智障版)"/>
三子棋(时间智障版)
1.创建项目环境
2创建游戏主题
3game的实现
4下棋:
5判断输赢
1创建项目环境:
game.h——放头文件
game.c——存放函数
test.c——游戏逻辑
2 创建游戏主题
我们这里先创建游戏主题,其中包括菜单,游戏构架(在test.c实现)
void menu()
{printf("#######################################################\n");printf("##### 1. play 0.exit #####\n");printf("#######################################################\n");}void test()
{int intput = 0;srand((unsigned int)time(NULL));时间戳do{menu();printf("请选择:>");scanf_s("%d", &intput);switch (intput){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,小笨蛋\n");break;}}while(intput);
}int main()
{test();return 0;
}
3game的实现
test.c
void game()
{char ret = 0;char board[ROW][COL] = {0};//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);}
game.h
#define ROW 3
#define COL 3void InitBoard(char board[ROW][COL], int row, int col);初始化棋盘
void DisplayBoard(char board[ROW][COL], int row, int col);打印棋盘
game.c
#include"game.h"
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;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");}}
}
4下棋
4.1玩家下棋;
test.c
void game()
{char ret = 0;char board[ROW][COL] = {0};//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);PlayerMove(board, ROW, COL);}
game.c
void PlayerMove(char board[ROW][COL], int row, int col)
{printf("玩家走:>\n");//判断x,y的合法性while (1){int x = 0;int y = 0;printf("请输入要下的坐标:>\n");scanf_s("%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");}}
}
4.2电脑下棋,这里使用时间戳来实现,所以就比较憨憨
test.c
void game()
{char ret = 0;char board[ROW][COL] = {0};//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);
}
game.c
void ComputerMove(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("电脑走:>\n");while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}}
5判断输赢
test.c
void game()
{char ret = 0;char board[ROW][COL] = {0};//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);//下棋while (1){//玩家下PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断玩家是否赢了ret = IsWin(board,ROW,COL);if (ret != 'c'){break;}//电脑下ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//电脑是否赢了ret = IsWin(board,ROW,COL);if (ret != 'c'){break;}}if (ret == '*')printf("玩家赢了\n");else if (ret == '#')printf("电脑赢了\n");elseprintf("平局\n");DisplayBoard(board, ROW, COL);
}
geme.c
//返回1表示棋盘满了
//返回0表示棋盘没满static int IsFull(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;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 = 0;/*横三行*/for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' '){return board[i][1];}}/*竖三列*/for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' '){return board[0][i];}}//两个对角线if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' '){return board[0][0];}if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[2][0] != ' '){return board[2][0];}//判断平局if (1 == IsFull(board, ROW, COL)){return 'Q';}return 'c';
}
最后是完整的代码
game.h
//#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3void InitBoard(char board[ROW][COL], int row, int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
//告诉我们四种状态
//玩家赢了-*
//电脑赢了-#
//平局-Q
//继续-Cchar IsWin(char board[ROW][COL], int row, int col);
test.c#define _CRT_SECURE_NO_WARNINGS
//#include"game.c"
#include"game.h"
void menu()
{printf("#######################################################\n");printf("##### 1. play 0.exit #####\n");printf("#######################################################\n");}
//游戏实现
void game()
{char ret = 0;char board[ROW][COL] = {0};//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board,ROW,COL);//下棋while (1){//玩家下PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断玩家是否赢了ret = IsWin(board,ROW,COL);if (ret != 'c'){break;}//电脑下ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//电脑是否赢了ret = IsWin(board,ROW,COL);if (ret != 'c'){break;}}if (ret == '*')printf("玩家赢了\n");else if (ret == '#')printf("电脑赢了\n");elseprintf("平局\n");DisplayBoard(board, ROW, COL);
}void test()
{int intput = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf_s("%d", &intput);switch (intput){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,小笨蛋\n");break;}}while(intput);
}int main()
{test();return 0;
}
game.c#include"game.h"
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;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 PlayerMove(char board[ROW][COL], int row, int col)
{printf("玩家走:>\n");//判断x,y的合法性while (1){int x = 0;int y = 0;printf("请输入要下的坐标:>\n");scanf_s("%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)
{int x = 0;int y = 0;printf("电脑走:>\n");while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}}
//返回1表示棋盘满了
//返回0表示棋盘没满static int IsFull(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;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 = 0;/*横三行*/for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' '){return board[i][1];}}/*竖三列*/for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' '){return board[0][i];}}//两个对角线if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' '){return board[0][0];}if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[2][0] != ' '){return board[2][0];}//判断平局if (1 == IsFull(board, ROW, COL)){return 'Q';}return 'c';
}
更多推荐
三子棋(时间智障版)
发布评论