VS环境下实现一个简单的三子棋游戏
来源:互联网 发布:清理后台的软件 编辑:程序博客网 时间:2024/05/21 00:18
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<time.h>#define row 3#define col 3#define NULL 0void initBoard(char arr[row][col]) //初始化棋盘{ int i = 0, j = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { arr[i][j] = ' '; } }}void menu(void) //打印开始菜单{ printf("1.play 0.exit\n"); printf("请选择:>");}void ChessBoard(char a[row][col]) //打印棋盘{ int i,j; for (i = 0; i < 4; i++) { printf(" --- --- --- \n"); if (i <= 2) { for (j = 0; j <= 2; j++) { printf("| %c ", a[i][j]); } if (j == 3) { printf("|\n"); } } }}void PlayerMove(char a[row][col]){ int x,y; while (1) { printf("请输入坐标(格式:1 2):>"); scanf("%d %d", &x, &y); x--; y--; //使得坐标从(1.1)开始 if (a[x][y] == ' ') //落点必须为空 { a[x][y] = 'X'; break; //输入成功跳出循环,结束 } else { printf("错误输入\n"); continue; //输入错误再次循环,重新输入 } }}void RobotPlay(char a[row][col]){ int x = 0; int y = 0; int i, j; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (a[i][j] == ' ') { a[i][j] = '0'; if (((a[i][0] == a[i][1]) && (a[i][1] == a[i][2])) && (a[i][0] != ' ')) { a[i][j] = '0'; return; } else if (((a[0][j] == a[1][j]) && (a[1][j] == a[2][j])) && (a[0][j] != ' ')) { a[i][j] = '0'; return; } else if (((a[0][0] == a[1][1]) && (a[0][0] == a[2][2])) && (a[1][1] != ' ')) { a[i][j] = '0'; return; } else if (((a[0][2] == a[1][1]) && (a[0][2] == a[2][0])) && (a[1][1] != ' ')) { a[i][j] = '0'; return; } a[i][j] = ' '; //从第一个点开始优先检验是否存在可以使己方三个子相连的落点 //若存在则置0并结束函数,不能存在则执行下一条语句 } } } for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (a[i][j] == ' ') { a[i][j] = 'X'; if (((a[i][0] == a[i][1]) && (a[i][1] == a[i][2])) && (a[i][0] != ' ')) { a[i][j] = '0'; return; } else if( ((a[0][j] == a[1][j]) && (a[1][j] == a[2][j])) && (a[0][j] != ' ')) { a[i][j] = '0'; return; } else if (((a[0][0] == a[1][1]) && (a[0][0] == a[2][2])) && (a[1][1] != ' ')) { a[i][j] = '0'; return; } else if (((a[0][2] == a[1][1]) && (a[0][2] == a[2][0]))&&(a[1][1] != ' ')) { a[i][j] = '0'; return; } a[i][j] = ' '; //从第一点开始检验是否存在使对方三子相连的落点 } //若存在置0并结束函数,不存在则继续 } } while (1) //不存在使得己方或对方三子相连时随机下点 { srand((unsigned)time(NULL)); i = rand() % 3; srand((unsigned)time(NULL)); j = rand() % 3; if (a[i][j] == ' ') { a[i][j] = '0'; return; } }} char CheckWin(char a[row][col]){ int i,j; for (i = 0; i < row; i++) { if ((a[i][0] == a[i][1]) && (a[i][1] == a[i][2])) { return a[i][0]; } } for (j = 0; j < col; j++) { if ((a[0][j] == a[1][j]) && (a[1][j] == a[2][j])) { return a[0][j]; } } if ((a[0][0] == a[1][1]) && (a[1][1] == a[2][2])) { return a[1][1]; } else if ((a[0][2] == a[1][1]) && (a[1][1] == a[2][0])) { return a[1][1]; } //检验是否有三子相连的点,存在则返回该点 for (i = 0; i < row; i++) //不存在三字相连点时棋盘是否下满 { for (j = 0; j < col; j++) { if (a[i][j] == ' ') { return ' '; //未下满返回空格继续下 } } } return 'e'; //下满则平局,返回e}int main(){ char arr[row][col] = { 0 }; //创建2维数组用于存放棋子 int input = 0; char ret; do{ menu(); scanf("%d", &input); switch (input) { case 1: initBoard(arr); //初始化棋盘,数组内容全部置空格 ChessBoard(arr); //打印棋盘 do { PlayerMove(arr); //玩家下 ChessBoard(arr); if ((ret = CheckWin(arr)) != ' ') { break; } //检验胜负 RobotPlay(arr); //电脑下 ChessBoard(arr); ret = CheckWin(arr); } while (ret == ' '); //检验胜负 if (ret == 'X') { printf("玩家赢\n"); } else if (ret == '0') { printf("电脑赢\n"); } else { printf("平局\n"); } break; case 0: break; default: printf("输入错误请重新输入:>\n"); break; } } while (input); //保证可再次进行游戏 system("pause"); return 0;}
阅读全文
0 0
- VS环境下实现一个简单的三子棋游戏
- Delphi 环境下使用DirectDraw实现简单的全屏游戏
- VS下用C++实现的简单3D射击游戏(附游戏文件与源工程代码)
- 一个简单的猜拳游戏的实现
- 一个简单的三子棋游戏(c语言实现)
- 一个俄罗斯方块游戏的简单实现
- 一个简单的打砖块游戏实现
- Qt实现一个简单的打字游戏
- VS 2005环境下使用boost ::bind的一个注意事项
- PythonTkinter 实现一个简单游戏
- MyBatis在eclipse环境下搭建+“Java+Mysql+Mybatis实现一个简单的图书信息录入”
- 一个简单的游戏引擎核心状态机的C++实现
- [入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第一回合: 搭建开发环境
- 游戏环境下如何实现真正D3D的窗口
- 游戏环境下如何实现真正D3D的窗口
- 游戏环境下如何实现真正D3D的窗口
- cocos2d-x入门(2)-实现一个简单的游戏SimpleGame
- 用Python实现一个简单的算术游戏
- 剑指offer面试题56 链表中环的入口节点(java实现)
- Qt On Android + protobuf3的使用
- session机制解析
- JUC原子类-03之 AtomicLongArray原子类
- CSS_导航栏+固定浮动的回到顶部按钮
- VS环境下实现一个简单的三子棋游戏
- 嵌入式学习网站推荐
- ajax获取servlet发送的数据
- ubuntu下将本地项目上传到github托管
- 二十多种视频前景提取的算法
- ORACLE AWR 报告的生成
- centos7下lamp环境搭建
- 使用Gson获取签到记录
- Digit Counting (P57)/ UVA