【新年第一个程序】三子棋小游戏(C语言数组实现)
一、游戏效果
二、游戏规则
❶ 输入1进入游戏
❷ 输入0退出游戏
❸ 玩家先走
❹ 玩家落子是选择棋盘的坐标位置
❺ 电脑是随机落子
❻ 如果电脑连了三子则提示电脑赢了,选择要不要继续游戏
三、实现游戏的代码思路
✪ 先构架游戏整体思路
void game(){ char ret = 0; //数组存放棋盘信息 char board[ROW][COL] = { 0 };//二维数组的初始化并没有这么简单 int row = ROW; int col = COL; //1.初始化棋盘 //一定要初始化 InitBoard(board, ROW, COL); //2.打印棋盘 DisplayBoard(board, ROW, COL); //3.玩游戏,开始下棋了 while (1) { //玩家下棋 PlayerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); //判断玩家是否赢了 ret = Iswin(board, ROW, COL); //如果不是游戏继续,那么就直接跳出循环 if (ret != 'D') { break; } //电脑下棋 ComputerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); //判断电脑是否赢了 ret = Iswin(board, ROW, COL); //如果不是游戏继续,那么就直接跳出循环 if (ret != 'D') { break; } } if (ret == 'X') printf("玩家赢了\n"); else if (ret == 'O') printf("电脑赢了\n"); else printf("平局\n");}
————————
✪ 再分步写出相应所需函数
1、菜单函数
void mnue(){ printf("-------------------------------\n"); printf("-------------------------------\n"); printf("----1.play 0.exit--------\n"); printf("-------------------------------\n"); printf("-------------------------------\n");}
————————
2、初始化棋盘函数
//函数的初始化//将棋盘所有元素都初始化为空格//空格为不在屏幕上显示其字符的字符(0也是)void InitBoard(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 ) { board[i][j] = ' '; } }}
————————
3、打印棋盘函数
//打印棋盘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"); } }}
————————
4、用来存储玩家下棋信息的函数
//玩家下棋void PlayerMove(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; printf("玩家走\n"); while (1) { printf("请输入要下的坐标:"); scanf("%d%d", &x, &y); if (x >= 1 && y >= 1 && x <= row && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'X'; break; } else printf("该坐标被占用,请重新输入\n"); } else printf("该坐标不存在,请重新输入\n"); }}
————————
5、电脑随机下棋的函数
//电脑随机下棋void ComputerMove(char board[ROW][COL], int row, int col){ printf("电脑走\n");//三子棋中电脑只要下在空棋盘上即可 int x = 0; int y = 0; while (1) { x = rand() % row;//将电脑走的随机值控制在棋盘中 y = rand() % col; if (x >= 1 && y >= 1 && x <= row && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'O'; break; } } }}
————————
6、判断棋盘是否满了的函数
//返回1,表示棋盘满了//返回0,表示棋盘还没满int IsFull(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 ) { if (board[i][j] == ' ') return 0;//没满 } } return 1;//满了}
————————
7、判断输赢和游戏是否继续的函数
//判断输赢和游戏是否继续//判断输赢//4种状态//1.玩家赢了---'X'//2.电脑赢了---'O'//3.平局----'C'//4.游戏继续---'D'char Iswin(char board[ROW][COL], int row, int col){ int i = 0; //横3行 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][0];//Iswin直接结束 } } //列3行 for (i = 0; i < col; i ) { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ') { return board[0][i]; } } //两个对角线 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') return board[1][1]; if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') return board[1][1]; //判断是否平局 if (1 == IsFull(board, ROW, COL)) return 'C'; //继续游戏 return 'D';}
————————
8、主函数控制游戏的进程
int main(){ int input = 0; srand((unsigned int)time(NULL));//扩大电脑走的随机值范围 do { mnue(); printf("请输入(0/1):"); scanf("%d", &input); switch (input) { case 1: printf("三子棋游戏开始\n"); game(); break; case 0: printf("退出游戏\n"); break; defout: printf("输入错误,请重新输入\n"); break; } } while (input); return 0;}
赞 (0)