三子棋游戏

 

简单三子棋游戏设计
game.h
#ifndef __GAME_H__
#define __GAME_H__


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


#define ROW 3
#define COL 3
void Display(char arr[ROW][COL],int row,int col);
void InitBoard(char arr[ROW][COL],int row,int col);
void ComputerMove(char arr[ROW][COL]);
void PlayMove(char arr[ROW][COL],int row,int col);
char IsWin(char arr[ROW][COL],int row,int col);


#endif //__GAME_H__
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
//打印菜单
void menu()
{
printf("*******************************\n");
printf("*****欢迎来到三子棋游戏********\n");
printf("*******1、进入游戏*************\n");
printf("*******0、退出游戏*************\n");
printf("*******************************\n");
}
void game()
{
char arr[ROW][COL];
int input=0;
char ret;
InitBoard(arr,ROW,COL);
Display(arr,ROW,COL);
do
{
PlayMove(arr,ROW,COL);
printf("玩家走:>*********\n");
Display(arr,ROW,COL);
ComputerMove(arr);
printf("电脑走:>*********\n");
Display(arr,ROW,COL);
ret=IsWin(arr,ROW,COL);
if(ret!=' ')
{
break;
}
}
while(ret==' ');
if(ret=='x')
{
printf("玩家赢\n");
}
else if(ret=='x')
{
printf("电脑赢\n");
}
else if(ret=='q')
{
printf("平局\n");
}
}
void test()
{
int input=0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请输入:>");
scanf("%d",&input);
switch(input)
{
case 1:
game();
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
}
while(input);
}
int main()
{
test();
return 0;
}
game.h
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
//初始化棋盘
void InitBoard(char arr[ROW][COL],int row,int col)
{
memset(arr,' ',row*col*sizeof(arr[0][0]));
}
//打印棋盘
void Display(char arr[ROW][COL], int row, int col) 
{ 
int i=0;
for (i = 0; i < row; i++)
{ 
printf(" — — —\n"); 
printf("|%c |%c |%c |\n", arr[i][0],arr[i][1],arr[i][2]); } 
printf(" — — —\n"); 
} 
//电脑走
void ComputerMove(char arr[ROW][COL])
{
int x=0;
int y=0;
while(1)
{
x=rand()%3;
y=rand()%3;
if(arr[x][y]==' ')
{
arr[x][y]='0';
break;
}
}
}
//玩家走
void PlayMove(char arr[ROW][COL],int row,int col)
{
int x=0;
int y=0;
while(1)
{
printf("请输入坐标:>");
scanf("%d%d",&x,&y);
x--;
y--;
if(((x>=0)&&(x<=2))&&((y>=0)&&(y<=2)))
{
if(arr[x][y]==' ')
{
arr[x][y]='x';
return;
}
}
printf("坐标有误\n");
}
}
//判断棋盘是否已满
int IsFull(char arr[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(arr[i][j]==' ')
return 0;
}
}
return 1;
}
//判断输赢
char IsWin(char arr[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++)
{
if((arr[i][0]==arr[i][1])&&(arr[i][1]==arr[i][2])&&(arr[i][0]!=' '))
{


return arr[i][0];
}
}
for(i=0;i<col;i++)
{
if((arr[0][i]==arr[1][i])&&(arr[1][i]==arr[2][i])&&(arr[0][i]!=' '))
{


return arr[0][i];
}
}
if((arr[0][0]==arr[1][1])&&(arr[1][1]==arr[2][2])&&(arr[1][1]!=' '))
{


return arr[0][0];
}
if((arr[0][2]==arr[1][1])&&(arr[1][1]==arr[2][0])&&(arr[1][1]!=' '))
{


return arr[1][1];
}
if(IsFull(arr,row,col))
{
return 'q';
}
return ' ';
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值