创建人机游戏用c语言,一担挑游戏---模拟人机对弈——C语言.doc

本文介绍了一个使用C语言编写的‘一担挑’游戏,模拟人机对弈。游戏规则简单,棋盘为3x3,目标是形成三点一线。程序包括初始化棋盘、玩家和计算机移动棋子以及判断胜负等功能模块。玩家输入位置,计算机自动寻找空位,每次移动后检查是否获胜或平局。程序代码中包含了主函数流程、棋盘初始化、玩家和计算机移动以及胜负判断的详细设计和实现。
摘要由CSDN通过智能技术生成

一担挑游戏---模拟人机对弈——C语言

模拟人机对弈--------“一担挑游戏”

简单设计计算机模拟棋盘对弈。其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。游戏规则如下:

计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:发现空单元后,置为“O”,未发现时,报告平局后退出。

轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。

谁先三点一线了,则报告谁胜出。

计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。

需求分析

该程序模拟人机对弈,具有极大的趣味性。

全程序主要模块包括“设计棋盘格式模块”“玩家移动棋子模块”,“计算机移动棋子模块”以及“判断胜负模块”。“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。

三、总体设计

四、详细设计

1,主函数流程图

2,各功能模块设计

棋盘设计模块流程图

该模块首先设置一个3X3的循环,将棋盘的每一个单元定义为空。在程序运行的第一步,主程序调用该模块功能,对棋盘进行初始化。

玩家移动棋子模块

该模块首先选择放置棋子的位置(i,j),之后行变量i减一,列变量j减一。如果该位置为空,则将该单元内容定义为“X”;如果该位置不为空,则返回错误信息并重新运行该模块函数,让人重新选择放置棋子的位置。

计算机移动棋子模块

该模块首先设置3X3的循环,从(1,1)开始,依次判断每一个单元是否为空。为空时,则将该位置定义为“O”;若不为空,则继续运行。当移动至(3,3),即行变量i与列变量j乘积为9时,若该单元依然不为空,则判定该局比赛结果为平局

(4)判断胜负模块

该模块首先设置3X3的循环,依次判断每行,每列以及左斜列,右斜列的内容是否相同。不相同时,返回至主函数;若相同,则将变量result定义为相同的内容。最后,根据结果显示谁赢。

五、(1)程序代码

#include "stdio.h"

#include "stdlib.h"

void init_qipan();

void player_move();

void computer_move();

void disp();

char check();

int main(void)

{

char done;

done=' ';

init_qipan();

do

{

disp();

player_move();

done=check();

if(done!=' ')

break;

computer_move();

done=check();

}

while(done==' ');

if(done=='X')

printf("You won!\n");

else

printf("You lost! \n");

disp();

getchar();

return 0;

}

char qipan[3][3];

void init_qipan(void)

{

int i,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

qipan[i][j]=' ';

}

void player_move(void)

{

int x,y;

printf("It's your turn:");

scanf("%d%*c%d",&x,&y);

x--;y--;

if(qipan[x][y]!=' ')

{

printf("Error, try again.\n");

player_move();

}

else qipan[x][y]='X';

}

void computer_move(void)

{

int i,j;

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

if(qipan[i][j]==' ')

break;

if(qipan[i][j]==' ')

break;

}

if(i*j==9)

{

printf("pingju\n");

exit(0);

}

else

qipan[i][j]='0';

}

void disp(void)

{

int t;

for(t=0;t<3;t++)

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值