admin管理员组文章数量:1794759
C语言学习 / 简易21点
游戏规则:玩家电脑各发2张牌,玩家两张牌均为明牌,电脑一明一暗;玩家根据点数大小选择是否继续要牌,当玩家点数为21点时玩家直接获胜,超过21点电脑获胜;当玩家选择不要牌,开始电脑回合,电脑点数大于21点玩家获胜,电脑点数大于等于玩家,电脑获胜。
目录
1、打印欢迎界面
2、打印牌池和初始手牌
3、玩家回合
4、电脑回合
5、设置筹码
6、代码总览
1、打印欢迎界面 int main() { playgame(); return 0; } void playgame() { int input = 0; do { welcome(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: printf("开始游戏\\n"); break; case 0: printf("退出游戏\\n"); break; default: printf("选择错误,请重新选择\\n"); break; } } while (input); } void welcome() { printf("******************************\\n"); printf("********** 21点 *************\\n"); printf("*** 1.play 0.exit ***\\n"); printf("******************************\\n"); } 2、打印牌池和初始手牌
(1)添加game()函数
void playgame() { int input = 0; do { ... ... { case 1: printf("开始游戏\\n"); game(); break; ... ... } } while (input); }(2)创建game.h 和 game.c 用于游戏主程序
//text.c
#include "game.h" void game() { int board[ROW][COL] = { 0 }; int PlayerCard[13] = { 0 }; int ComputerCard[13] = { 0 }; initial(board, ROW, COL, PlayerCard, ComputerCard); show(board, ROW, COL); Computer(board, ROW, COL, ComputerCard); Player(board, ROW, COL, PlayerCard); }//game.h
#define ROW 4 #define COL 13 #include<stdio.h> #include<time.h> #include<Windows.h> void initial(int board[ROW][COL], int row, int col, int PlayerCard[],int ComputerCard[]); void show(int board[ROW][COL], int row, int col); void Computer(int board[ROW][COL], int row, int col,int ComputerCard[]); void Player(int board[ROW][COL], int row, int col, int PlayerCard[]);//game.c
#include"game.h" void initial(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[]) { int i = 0; int j = 0; for (i = 0;i < row;i++) { for (j = 0;j < col;j++) { if (j < 9) board[i][j] = j + 1; else board[i][j] = 10; } } for (i = 0;i < 13;i++) { PlayerCard[i] = 0; ComputerCard[i] = 0; } } void show(int board[ROW][COL], int row, int col) { int i = 0; int j = 0; printf("牌池:\\n"); for (i = 0;i < row;i++) { for (j = 0;j < col;j++) { printf("%d ", board[i][j]); } printf("\\n"); } } int give(int board[ROW][COL], int row, int col) { int card = 0; while (1) { int i = rand() % row; int j = rand() % col; if (board[i][j] != 0) { card = board[i][j]; board[i][j] = 0; break; } } return card; } void Computer(int board[ROW][COL], int row, int col,int ComputerCard[]) { int i = 0; int flag = 0; ComputerCard[0] = give(board, ROW, COL); ComputerCard[1] = give(board, ROW, COL); Sleep(300); printf("电脑手牌:[?] %d\\n", ComputerCard[1]); } void Player(int board[ROW][COL], int row, int col,int PlayerCard[]) { int i = 0; int flag = 0; PlayerCard[0] = give(board, ROW, COL); PlayerCard[1] = give(board, ROW, COL); Sleep(300); printf("玩家手牌:%d %d\\n", PlayerCard[0], PlayerCard[1]); }(3)效果展示
3、玩家回合(1)创建round()函数
//test.c
void game() { ... ... Player(board, ROW, COL, PlayerCard); Round(board, ROW, COL, PlayerCard, ComputerCard); }//game.h
void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[]);//game.c
int test(int Card[], int time) { int i = 0; int sum = 0; for (i = 0;i < time;i++) { sum += Card[i]; Sleep(300); printf("%d ", Card[i]); } printf("\\n"); return sum; } void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[]) { int input = 0; int time_P = 2; int sum_P = PlayerCard[0] + PlayerCard[1]; int i = 0; printf("玩家回合开始\\n"); do { printf("玩家是否继续要牌?1.是 0.否>>"); scanf("%d", &input); switch (input) { case 1: sum_P = 0; PlayerCard[time_P] = give(board, ROW, COL); time_P++; printf("玩家手牌:"); sum_P = test(PlayerCard, time_P); if (sum_P > 21) { printf("玩家点数为%d,超过21点,电脑获胜!\\n", sum_P); input = 0; } if (sum_P == 21) { printf("玩家点数为21点,玩家获胜!\\n"); input = 0; } break; case 0: printf("玩家回合结束,电脑回合开始\\n"); break; default: printf("选择错误,请重新选择\\n"); break; } } while (input); }(2)效果展示
4、电脑回合(1)代码实现
//game.c
void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[]) { case 0: printf("玩家回合结束,电脑回合开始\\n"); Sleep(300); printf("玩家手牌:"); for (i = 0;i < time_P;i++) { printf("%d ", PlayerCard[i]); } printf("\\n"); Sleep(300); printf("电脑手牌:%d %d\\n", ComputerCard[0], ComputerCard[1]); C_Round(board, ROW, COL, PlayerCard, ComputerCard, time_P, sum_P); break; } void C_Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[], int time_P, int sum_P) { int i = 0; int time_C = 2; int sum_C = ComputerCard[0] + ComputerCard[1]; while (sum_C < sum_P && sum_C < 21) { ComputerCard[time_C] = give(board, ROW, COL); time_C++; Sleep(500); printf("电脑手牌:"); sum_C = test(ComputerCard, time_C); } if (sum_C > 21) { printf("电脑点数为%d,超过21点,玩家获胜!\\n", sum_C); } else if (sum_C >= sum_P) { printf("电脑点数为%d,玩家点数为%d,电脑获胜!\\n", sum_C,sum_P); } }(2)效果展示
5、设置筹码(1)代码实现
//game.h
#define CHIP 1000 void Round(int board[ROW][COL], ..., int ComputerCard[],int* chip);//test.c
int chip = CHIP; void playgame() { int input = 0; do { if (chip <= 0) { printf("没有足够的筹码进行下一轮游戏,游戏结束!\\n"); break; } welcome(); ... ... } while (input); } void game() { ... ... show(board, ROW, COL); printf("玩家筹码:%d\\n", chip); ... Player(board, ROW, COL, PlayerCard); Round(board, ROW, COL, PlayerCard, ComputerCard, &chip); printf("玩家筹码:%d\\n", chip); }//game.c
void C_Round(int board[ROW][COL], ..., int sum_P, int* chips) { ... ... if (sum_C > 21) { ... *chips += 90; } else if (sum_C >= sum_P) { ... *chips -= 100; } } void Round(int board[ROW][COL], ..., int ComputerCard[],int *chip) { ... ... int chips = *chip; printf("玩家回合开始\\n"); do { ... ... switch (input) { case 1: ... ... if (sum_P > 21) { ... *chip -= 100; ... } if (sum_P == 21) { ... *chip += 90; ... } break; case 0: ... ... C_Round(board, ..., sum_P, &chips); *chip = chips; break; ... ... } } while (input); }(2)效果展示
6、代码总览//test.c
#define _CRT_SECURE_NO_WARNINGS #include "game.h" int chip = CHIP; void welcome() { printf("******************************\\n"); printf("********** 21点 *************\\n"); printf("*** 1.play 0.exit ***\\n"); printf("******************************\\n"); } void game() { int board[ROW][COL] = { 0 }; int PlayerCard[13] = { 0 }; int ComputerCard[13] = { 0 }; initial(board, ROW, COL, PlayerCard, ComputerCard); show(board, ROW, COL); printf("玩家筹码:%d\\n", chip); Computer(board, ROW, COL, ComputerCard); Player(board, ROW, COL, PlayerCard); Round(board, ROW, COL, PlayerCard, ComputerCard, &chip); printf("玩家筹码:%d\\n", chip); } void playgame() { int input = 0; do { if (chip <= 0) { printf("没有足够的筹码进行下一轮游戏,游戏结束!\\n"); break; } welcome(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: printf("开始游戏\\n"); game(); break; case 0: printf("退出游戏\\n"); break; default: printf("选择错误,请重新选择\\n"); break; } } while (input); } int main() { playgame(); return 0; }//game.h
#pragma once #define ROW 4 #define COL 13 #define CHIP 1000 #include<stdio.h> #include<time.h> #include<Windows.h> void initial(int board[ROW][COL], int row, int col, int PlayerCard[],int ComputerCard[]); void show(int board[ROW][COL], int row, int col); void Computer(int board[ROW][COL], int row, int col,int ComputerCard[]); void Player(int board[ROW][COL], int row, int col, int PlayerCard[]); void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[],int* chip);//game.c
#define _CRT_SECURE_NO_WARNINGS #include"game.h" void initial(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[]) { int i = 0; int j = 0; for (i = 0;i < row;i++) { for (j = 0;j < col;j++) { if (j < 9) board[i][j] = j + 1; else board[i][j] = 10; } } for (i = 0;i < 13;i++) { PlayerCard[i] = 0; ComputerCard[i] = 0; } } void show(int board[ROW][COL], int row, int col) { int i = 0; int j = 0; printf("牌池:\\n"); for (i = 0;i < row;i++) { for (j = 0;j < col;j++) { printf("%d ", board[i][j]); } printf("\\n"); } } int give(int board[ROW][COL], int row, int col) { int card = 0; while (1) { int i = rand() % row; int j = rand() % col; if (board[i][j] != 0) { card = board[i][j]; board[i][j] = 0; break; } } return card; } void Computer(int board[ROW][COL], int row, int col,int ComputerCard[]) { int i = 0; int flag = 0; ComputerCard[0] = give(board, ROW, COL); ComputerCard[1] = give(board, ROW, COL); Sleep(300); printf("电脑手牌:[?] %d\\n", ComputerCard[1]); } void Player(int board[ROW][COL], int row, int col,int PlayerCard[]) { int i = 0; int flag = 0; PlayerCard[0] = give(board, ROW, COL); PlayerCard[1] = give(board, ROW, COL); Sleep(300); printf("玩家手牌:%d %d\\n", PlayerCard[0], PlayerCard[1]); } int test(int Card[],int time) { int i = 0; int sum = 0; for (i = 0;i < time;i++) { sum += Card[i]; Sleep(300); printf("%d ", Card[i]); } printf("\\n"); return sum; } void C_Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[], int time_P, int sum_P, int* chips) { int i = 0; int time_C = 2; int sum_C = ComputerCard[0] + ComputerCard[1]; while (sum_C < sum_P && sum_C < 21) { ComputerCard[time_C] = give(board, ROW, COL); time_C++; Sleep(500); printf("电脑手牌:"); sum_C = test(ComputerCard, time_C); } if (sum_C > 21) { printf("电脑点数为%d,超过21点,玩家获胜!\\n", sum_C); *chips += 90; } else if (sum_C >= sum_P) { printf("电脑点数为%d,玩家点数为%d,电脑获胜!\\n", sum_C, sum_P); *chips -= 100; } } void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[],int *chip) { int input = 0; int time_P = 2; int sum_P = PlayerCard[0] + PlayerCard[1]; int i = 0; int chips = *chip; printf("玩家回合开始\\n"); do { printf("玩家是否继续要牌?1.是 0.否>>"); scanf("%d", &input); switch (input) { case 1: sum_P = 0; PlayerCard[time_P] = give(board, ROW, COL); time_P++; printf("玩家手牌:"); sum_P = test(PlayerCard,time_P); if (sum_P > 21) { printf("玩家点数为%d,超过21点,电脑获胜!\\n", sum_P); *chip -= 100; input = 0; } if (sum_P == 21) { printf("玩家点数为21点,玩家获胜!\\n"); *chip += 90; input = 0; } break; case 0: printf("玩家回合结束,电脑回合开始\\n"); Sleep(300); printf("玩家手牌:"); for (i = 0;i < time_P;i++) { printf("%d ", PlayerCard[i]); } printf("\\n"); Sleep(300); printf("电脑手牌:%d %d\\n", ComputerCard[0], ComputerCard[1]); C_Round(board, ROW, COL, PlayerCard, ComputerCard, time_P, sum_P, &chips); *chip = chips; break; default: printf("选择错误,请重新选择\\n"); break; } } while (input); }版权声明:本文标题:C语言学习简易21点 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686628378a88182.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论