五子棋游戏
2021/4/27 18:31:40
本文主要是介绍五子棋游戏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <stdio.h> #include <stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void menu()//菜单 { printf("**********************************************\n"); printf("****1.play 0.exit ********\n"); printf("**********************************************\n"); } void INITBOARD(char board[ROW][COL],int row,int col)//打印每一个元素为空格 { int i,j; for(i=0;i<row;i++) { for(j=0;j<col;j++) { board[i][j]=' '; } } } void DISPLAYBOARD(char board[ROW][COL],int row,int col)//打印棋盘 { int i=0; for(i=0;i<row;i++) { int j=0; for(j=0;j<col;j++) { printf(" %c ",board[i][j]); if(j<col-1) printf("|"); } printf("\n"); if(i<row-1) { for(j=0;j<col;j++) { printf("---"); if(j<col-1) printf("|"); } printf("\n"); } } } void playmove(char board[ROW][COL],int row,int col) { int x,y; while(1) { printf("玩家走;\n"); printf("请输入要下的坐标\n"); scanf("%d %d",&x,&y); if(x>=1&&x<=row&&y>=1&&y<=col) { if(board[x-1][y-1]==' ') { board[x-1][y-1]='*'; break; } else { printf("该坐标被占用\n"); } } else { printf("坐标输入非法,请重新输入\n"); } } } void computermove(char board[ROW][COL],int row,int col) { while(1) { int x,y; x=rand()%row; y=rand()%col; if(board[x][y]==' ') { printf("电脑走\n"); board[x][y]='#'; break; } } } int isfull(char board[ROW][COL],int row,int col) { int i,j; for(i=0;i<row;i++) { for(j=0;j<col;j++) { if(board[i][j]==' ') { return 0; } } } return 1; } char iswin(char board[ROW][COL],int row,int col) { int i; for(i=0;i<row;i++) //某一行相同 { if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ') { return board[i][1]; } } for(i=0;i<col;i++) //某一列相同 { if(board[0][i]==board[1][i]&&board[1][i]==board[2][i]&&board[1][i]!=' ') { return board[i][1]; } } if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ') //主对角线相同 { return board[0][0]; } if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ') //次对角线相同 { return board[2][0]; } if(isfull(board,ROW,COL)==1) //棋盘满了,平局 { return 'q'; } else return 'c'; } void game() { char ret; char board[ROW][COL]={0}; INITBOARD(board,ROW,COL);//数组初始化 DISPLAYBOARD(board,ROW,COL);//打印棋盘 while(1) { playmove(board,ROW,COL);//玩家走棋 DISPLAYBOARD(board,ROW,COL);//打印棋盘 ret=iswin(board,ROW,COL); //判断输赢 '*' 玩家赢 '#' 电脑赢 'q'平局 'c'继续 if(ret!='c') { break; } computermove(board,ROW,COL);//电脑走棋 DISPLAYBOARD(board,ROW,COL);//打印棋盘 ret=iswin(board,ROW,COL); //判断输赢 '*' 玩家赢 '#' 电脑赢 'q'平局 'c'继续 if(ret!='c') { break; } } if(ret=='*') { printf("玩家赢\n"); } else if(ret=='#') { printf("电脑赢\n"); } else { printf("平局\n"); } } void test() { int input; srand((unsigned int)time(NULL));//随机数的起点 do { menu(); printf("请选择;1or0\n"); scanf("%d",&input); switch(input) { case 1: printf("开始三子棋\n"); game(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,请输入1or0\n"); break; } } while(input); } int main() { test(); return 0; }
这篇关于五子棋游戏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)