返回

#C语言实现三子棋#22/9/12#五#

发布时间:2022-09-19 03:23:51 289
# windows

test.c:

#define _CRT_SECURE_NO_WARNINGS
#include
#include "game.h"
#include
#include
#include

void Menu()
{
printf("###########################\n");
printf("###1.play 0.exit######\n");
printf("###########################\n");
}
void Game()
{
int board[Row][Col] = {' '};
Initcheck(board,Row,Col);//初始化棋盘
Putcheck(board, Row, Col); //输出棋盘
srand((unsigned)time(NULL));
Menu2();
printf("请选择—>");//增加了谁先下载的模块
int input2;
scanf("%d", &input2);
int w = 0;
if (input2== 1)
{
int* p = &board[0][0];
int k = 0;
while (k < Row * Col)
{
My_Part(p, Row, Col);
k++;//我下棋
Putcheck(board, Row, Col);
if (k > 2)
w = Gudje(p, Row, Col);
if (w == 1)
break;
Sleep(1000);
if (k < 9)
{
printf("机器已下:\n");
Report_Part(p, Row, Col);
k++;//机器下棋
Putcheck(board, Row, Col);//输出棋盘
if (k > 5)
w = Gudje(p, Row, Col);
if (w == 1)
break;
}
}
if (k == 9 && w == 0)
printf("<--平——局-->\n");
}
else
{
int* p = &board[0][0];
int k = 0;
while (k {
Sleep(1000);
printf("机器已下:\n");
Report_Part(p, Row, Col);
Putcheck(p, Row, Col);
if (k > 2)
w=Gudje(p, Row, Col);
if (w == 1)
break;
k++;//我下棋
if (k < 9)
{
My_Part(board, Row, Col);
Putcheck(board, Row, Col);//输出棋盘
k++;//机器下棋
if (k > 5)
w=Gudje(p, Row, Col);
if (w==1)
break;
}
}
if(k==9&&w==0)
printf("<--平——局-->\n");
}
}
int main()
{
int input=0;
do
{
Menu();
printf("请输入->");
scanf("%d", &input);
switch (input)
{
case 1:
printf(" <--开始游戏-->\n");
Game();
break;
case 0:
printf(" <--成功退出游戏-->\n");
default:
printf("选择错误,重新选择\n");
break;
}
}while(input);

return 0;
}

game.h:

#define Row 3
#define Col 3
#include

void Initcheck(int board[Row][Col], int row, int col);//初始化棋盘
void Putcheck(int board[Row][Col], int row, int col); //输出棋盘
void Menu2();//菜单二选择谁先手
void My_Part(int *p, int row, int col);//我开始下棋
void Report_Part(int* p, int row, int col);//机器随机下棋
int Gudje(int* p, int row, int col);//判断输赢

game.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"



void Initcheck(int board[Row][Col], int row, int col)
{
int i=0;
int j=0;
for(i=0;i {
for (j=0; j < col; j++)
{
board[i][j] = ' ';
}
}

}
void Putcheck(int board[Row][Col], int row, int col)
{
int i;
int j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
printf("|");
}
printf("\n");
for (j = 0; j < col; j++)
{
if(i printf("_____");
else
printf(" ");
if (j < col - 1)
printf("|");
}
printf("\n");
}
}

void Menu2()//界面2
{
printf("###################################\n");
printf("##1.you first 0.report first##\n");
printf("###################################\n");
}
void My_Part(int *p, int row, int col)
{
printf("输入几行几列\n");
int m=0, n=0;
scanf("%d%d", &m, &n);
*(p + (m-1)* col + n-1)='#';
}
void Report_Part(int* p, int row, int col)
{
while (1)
{
int m = rand()%row;
int n = rand() % col+1;
if (*(p + m * col + n) == ' ')
{
*(p + m * col + n) = '*';
break;
}
}
}
int Gudje(int* p, int row, int col)
{
int i;
for (i = 0; i < row; i++)//判断纵横
{
if (*(p + i * col + 0) == *(p + i * col + 1) && *(p + i * col + 0) == *(p + i * col + 2) && *(p + i * col + 0) == '#')
{
printf("你赢了!!\n");
return 1;
}
if (*(p + i * col + 0) == *(p + i * col + 1) && *(p + i * col + 0) == *(p + i * col + 2) && *(p + i * col + 0) == '*')
{
printf("机器赢了哦!\n");
return 1;
}
}
for (i = 0; i < col; i++)//判断纵横
{
if (*(p + 0 * col + i) == *(p + 1 * col + i) && *(p + 1 * col + i) == *(p + 2 * col + i) && *(p + 0 * col + i) == '#')
{
printf("你赢了!!\n");
return 1;
}
if (*(p + 0 * col + i) == *(p + 1 * col + i) && *(p + 1 * col + i) == *(p + 2 * col + i) && *(p + 0 * col + i) == '*')
{
printf("机器赢了哦!\n");
return 1;
}
}
if (*p == *(p + 4) && *(p + 4) == *(p + 8) && *p == '#')
{
printf("你赢了!!\n");
return 1;
}
else if (*(p + 2) == *(p + 4) && *(p + 4) == *(p + 6) && *p == '*')
{
printf("机器赢了哦!\n");
return 1;
}
else
return 0;
}

输出结果示例:

#C语言实现三子棋#22/9/12#五#_C语言

由于代码都基本上是自己完成的,所以更能不是最优也不好理解。

总结:

1.在编写代码时可以将函数声明和函数定义分开,有利于编写、利用、理解。

2.代码写出来不一定是对的,一定要是实验,一些特殊情况都能够被考虑和编写到是一个程序员写好代码真正需要的。

3.由于全局变量的运用,所以我认为可以将三子棋衍生到五子棋,但是由于输赢的判断是直接性的,所以无法直接改变。

希望以后的学习过程中可以找到更好的解决办法。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
P8506 标题计数 题解 2022-09-19 02:47:41