C语言之三子棋
来源:互联网 发布:方式和方法的区别知乎 编辑:程序博客网 时间:2024/06/03 18:51
要写一个三子棋游戏,首先分为5个函数。
1.初始化函数,将定义的数组arr初始化
void init(){ memset(arr,' ',rows*cols*(len+1));}
注意:memset函数的头文件是#include
void board(){ int i=0,j=0; for(i=0;i<3;i++) { printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]); if(i<(3-1)) printf("---|---|---\n"); }}
这里可以自己设计一个想要的样子,随自己喜欢。
3.接下来就是主要的了,写一个player(),就是指玩家下,将玩家下的位置改成X。
void player(){ int a=0,b=0; printf("请输入你要下的位置:"); scanf("%d%d",&a,&b); if(arr[a][b] ==' ') { arr[a][b]='X'; num++; } else { printf("请输入你要下的位置:"); scanf("%d%d",&a,&b); }}
这里要先判断玩家所下的位置是否为空格,若不是空格就需要重新输入。
4.接下来就是电脑下了,电脑下就是生成一个随机数,但这个随机数也需要判断是否为空格,若不是就需要重新生成,将电脑下的位置改成Q
srand((unsigned int)time (NULL)); int a ,b;begin: a=rand()%3; b=rand()%3; if(arr[a][b]==' ' ) { arr[a][b]='Q'; num++; } else { goto begin; }
这里可以用一个goto语句,比较简单。
5.这是最重要的一个函数了,就是判断输赢。
int win(){ //平局 3 int i=0,j=0; //人赢就返回 2 for(i=0;i<rows;i++)//计算机赢就返回 0 { //继续输入就返回 1 if((arr[i][0] == arr[i][1]) && (arr[i][0] == arr[i][2]) && (arr[i][1] == arr[i][2]) && arr[i][0] != ' ') { if(arr[i][0] == 'Q') { return 0; } if(arr[i][0] == 'X') { return 2; } } } for(j=0;j<cols;j++) { if((arr[0][j] == arr[1][j]) &&(arr[0][j] == arr[2][j]) && (arr[1][j] == arr[2][j]) && arr[0][j] != ' ') { if(arr[0][j] == 'Q') { return 0; } if(arr[0][j] == 'X') { return 2; } } } if((arr[0][0] == arr[1][1]) &&(arr[0][0] == arr[2][2]) &&(arr[1][1] == arr[2][2]) && arr[0][0] != ' ') { if(arr[0][0] == 'Q') { return 0; } if(arr[0][0] == 'X') { return 2; } } if((arr[2][0] == arr[1][1]) &&(arr[2][0] == arr[0][2]) && (arr[1][1] == arr[0][2]) && arr[0][2] != ' ') { if(arr[0][2] == 'Q') { return 0; } if(arr[0][2] == 'X') { return 2; } } if(num == cols*rows) { return 3; } return 1;}
若是有一列或一行相同的字符,或者是斜的三个相同的字符,那就说明有人赢了,至于是电脑还是人,那就需要再进行判断了,如果没赢,就只剩下两种可能,一种是平局,还有一种是需要再进行一轮才能判断。
对于平局就是指棋盘都已经下满了还没有分出胜负,那么此时的期盼就没有一个空格了,可以重新写一个函数来判断若是还有空格,那就表明还没有平局,否则就平局了。
排除掉所有的情况之后就只剩下最后一种可能了,那就是还要再继续玩。
在写完所有的要用的函数后,就开始写主函数了。
int main(){ int n=1; do { menu(); printf("请选择:"); scanf("%d",&n); switch(n) { case 1: init(); while(1) { if(win() == 1) { computer(); board(); if(win() == 1) player(); } else { break; } } if(win()==0) { printf("计算机赢了\n"); } if(win()==2) { printf("人赢了\n"); } if(win()==3) { printf("平局\n"); } break; case 0: break; default: printf("输入有误\n"); break; } } while(n==1); return 0;}
对于主函数,这个可以看个人的设计,我写的这个是可以重复玩的,在每次游戏结束后,若是想继续玩就选择1,退出就选择0。
其实也可以将switch1里的代码都放进一个函数,而这个函数就命名为game(),只需在switch里调用就行了。
0 0
- C语言之三子棋
- !--三子棋之C语言实现--!
- c语言小程序之三子棋
- C语言小游戏入门之三子棋
- C语言之四书五经
- C语言之四书五经
- C语言之四书五经
- C语言之数据类型
- C语言之指针
- C语言之解析
- C语言之诡异
- C语言之四书五经
- C语言之指针
- C语言之输入
- C语言之四书五经
- C语言之四书五经
- C语言之extern
- C语言之变量
- DOM事件流
- Android简易实战教程--第三十五话《音乐播放》
- 滴滴的组件化实践与优化
- CSS3_Node6_布局-分栏布局&弹性布局&响应式设计
- python中list数据的append 和 extend 用法是区别
- C语言之三子棋
- LLT与HLT测试简介
- 浅析XSS和CSRF攻击及防御
- 《go语言编程》学习笔记四
- Webstorm 安装less
- Q9--数值的整数次方
- 造轮子--QTreeWidget节点之精确搜索
- iOS面试问题全面梳理 --持续更新
- 用servlet实现验证码的切换