三子棋(时间智障版)

编程入门 行业动态 更新时间:2024-10-27 12:25:48

三子棋(时间<a href=https://www.elefans.com/category/jswz/34/1752399.html style=智障版)"/>

三子棋(时间智障版)

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';
}

更多推荐

三子棋(时间智障版)

本文发布于:2023-06-28 00:34:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/919135.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:智障   三子   时间

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!