您的位置:首页 > 编程语言 > C语言/C++

三子棋游戏C语言模拟实现

2017-04-29 15:48 686 查看
game.h

#ifndef __ADD_H__
#define __ADD_H__

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>

void game();
void com_move(char a[3][3]);
void play_move(char a[3][3]);
void init(char a[3][3]);
void print(char a[3][3]);
char check_win(char a[3][3]);
int is_full(char a[3][3]);//判断棋盘有没有满

#endif //__ADD_H__



test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

void menu()
{
printf("**********************************\n");
printf("****** 1.game 2.exit *******\n");
printf("**********************************\n");
}

void test()
{
int input = 0;
srand((unsigned int)time(NULL));
while(1)
{
menu();
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 2:
exit(1);
break;
default:
printf("选择错误\n");
break;
}
}
}

int main()
{
test();
return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

//初始化数组,使值都是空格
void init(char a[3][3])
{

int i = 0;
int j = 0;

//memset(a,' ',row*col*sizeof(char)) <string.h>
//要初始化空间的起始地址,内容,大小
for(i = 0;i < 3;i++)
{
for(j=0;j<3;j++)
{
a[i][j]=' ';
}
}
}

//打印棋盘
void print(char a[3][3])
{
int i = 0;
for(i = 0;i<3;i++)
{
printf(" %c | %c | %c \n",a[i][0],a[i][1],a[i][2]);
if ( 2!=i)
printf("-----------\n");
}
printf("\n");
}

void player_move(char a[3][3])
{
int x = 0;
int y = 0;
while(1)
{
printf("输入要走的位置:\n");
scanf("%d%d",&x,&y);
if(x>=0&&x<=2&&y>=0&&y<=2)
{
if(' '==a[x][y])
{
a[x][y]='x';

break;
}
else
{
printf("该位置有内容\n");
}
}
else
printf("位置越界\n");
}
}

void com_move(char a[3][3])
{
int x = 0;
int y = 0;
while(1)
{
x = rand()%3;
y = rand()%3;
if(' '==a[x][y])
{
a[x][y] = '0';

break;
}
}
}
char check_win(char a[3][3])
{
int i = 0;

for(i=0;i<3;i++)
{
if ((a[i][0]==a[i][1])&&(a[i][1]==a[i][2])&&(a[i][0]!=' ')) //一行
return a[i][0];
if ((a[0][i]==a[1][i])&&(a[1][i]==a[2][i])&&(a[0][i]!=' ')) //一列
return a[0][i];
if ((a[0][0]==a[1][1])&&(a[1][1]==a[2][2])&&(a[0][0]!=' '))
return a[0][0];
if ((a[0][2]==a[1][1])&&(a[1][1]==a[2][0])&&(a[1][1]!=' '))
return a[1][1];
}
if(is_full(a)==1)
{
return 'q';//棋盘满了返回q
}
return 'r';//谁都没赢谁都没输
}

int is_full(char a[3][3])
{
int i =0;
int j = 0;
for(i = 0; i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]==' ')
{
return 0;//没满返回0
}
}
}
return 1;//满了返回1
}

void game()
{

char a[3][3] = {0};
char win = 0;
init(a);
print(a);

do
{

//玩家走
player_move(a);
print(a);
win = check_win(a);
if(win != 'r' )
{
break;
}
//电脑走
com_move(a);
print(a);
win = check_win(a);
//如果win是' '就继续玩
if(win != 'r')
{
break;
}

}while(1);

if(win == '0')
printf("电脑赢\n");
else if(win == 'x')
printf("玩家赢\n");
else if(win == 'q')
printf("平局\n");

}

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: