游戏规则:玩家电脑各发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;elseboard[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 1000void 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;elseboard[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点相关推荐

  1. 保姆级零基础 C 语言学习路线,万字总结!

    从大学接触 C 语言编程,工作之后一直从事互联网 C/C++ 后台开发工作,粗略算下来有 10 多年经验了(但是年限也并不能代表什么),只能说对 C 语言学习有一些经验可以分享给初学者,让你少走一些弯 ...

  2. c语言中简易公交一卡通系统的实现

    c语言中简易公交一卡通系统的实现 1.基本功能介绍: 系统启动则进入登陆菜单. 根据不同角色的选取来确定是普通用户还是管理员帐户 添加新卡 能够添加一张新卡,卡号按照自然数列向下自动产生,而用户名键盘 ...

  3. 【Python】Python语言学习:pip工具使用知识,模型保存pickle,PDF与docx相互转换处理...

    2022年第01周. 这一周的Python语言学习,记录如下. 01 pip工具使用知识 1 pip是什么? pip是一个用Python写的用于安装和管理包的包管理系统.它连接一个叫做Python P ...

  4. 语言余一个负数_C语言学习日记(8)——整数溢出

    小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...

  5. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  6. python语言1002python语言_PYTHON语言学习

    PYTHON 语言学习 通过两个星期的自学 python 语言,初步了解到 python 的知识构架.它比 C 语言和 C++ 语 言在某种程度上来说要简单些, 但是也有很多我不懂的东西. 陈老师给我 ...

  7. 用了30天整理的一些GO语言学习资料,2019请你加油

    因为极其优秀的并发性能,Google的亲儿子Go语言站上了风潮之巅.出现在21世纪的GO语言,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风 ...

  8. c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc

    c语言学习知识编程经典编辑题汇总整编.doc - C语言编程基础习题汇总1.设计一个由键盘输入三个整数,求这三个数的平均数的程序.2.编写一个程序,用于水果店售货员结账.已知苹果每斤2.50元,鸭梨每 ...

  9. c语言float二进制输出代码_C语言学习笔记——学前知识概述

    将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...

最新文章

  1. 对PostgreSQL中 index only scan 的初步理解
  2. Ubuntu 16.04/CentOS 6.9安装Apache压力(并发)测试工具ab
  3. 初见 IsolatedStorage
  4. 数字反转(升级版)(洛谷-P1553)
  5. TouchID 指纹解锁
  6. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第2天
  7. 海康相机SDK+halcon17(64位)+MFC+VS(64位)联合开发遇到的问题(在使用GenImage3Extern将RGB数据转换为halcon图像时出现异常情况处理)
  8. 以JTextPanel为例Swing的鼠标事件详解
  9. 使用html和css的一些经验
  10. 3至六年级计算机知识,小学三至六年级下册信息技术教学计划范文
  11. 高等学校计算机一级考试题库,全国计算机一级考试题库「附答案」
  12. android 代码设置 键盘适应_实现Android键盘的中英文适配
  13. JS下载喜马拉雅非付费音频
  14. GPS坐标间距离计算
  15. 使用calibre制作带目录的mobi电子书
  16. Android开发 第2课 控件TextView、Plain Text、ImageView、 Button、ImageButton以及点击事件
  17. 解决img撑大父盒子
  18. 本周AI热点回顾:意念打字登Nature封面,准确率超99%;前馈网络+线性交互层=残差MLP,纯MLP图像分类架构入场...
  19. win10当生产服务器稳定吗,真让人不省心!Win10最稳定版出幺蛾子 微软已证实
  20. java中怎么实现指数幂,java中幂指数值的运算代码解析

热门文章

  1. CSC研修报告模板下载网址
  2. Hadoop综合实战之MapReduce运算优化——音乐排行榜
  3. java免注册调用大漠插件
  4. 2022年我的22个感悟
  5. Linux--web服务器搭建
  6. axis2.AxisFault: Namespace URI may not be null
  7. shoebox_Shoebox-我的虚拟手绘,手工编码现场乐队
  8. Swing读书笔记JInternalFrame的使用(窗口与面板)
  9. 微信支付AES加解密算法
  10. 导出Excel表格时 显示不全处理