三子棋的简单实现

  //   tset.h
#ifndef __GAME_H__
#define __GAME_H__
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.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],int row,int col);
void Playermove(char arr[ROW][COL],int row,int col);
char IsWin(char arr[ROW][COL],int row,int col);

#endif//__GAME_H__

//game.c

#include"test.h"
int count=9;
void InitBoard(char arr[ROW][COL],int row,int col)  //初始化棋盘
{

for(row=0;row<ROW;row++)
{
  for(col=0;col<COL;col++)
  {
      arr[row][col]=' ';  
  }
}
}
void Display(char arr[ROW][COL],int row,int col)  //打印棋盘
{
for(row=0;row<3;row++)
{


  printf(" %c | %c | %c \n",arr[row][0],arr[row][1],arr[row][2]);
 // printf("------------\n");
 
}
for(row=0;row<2;row++)
{
 printf("------------\n");
}
}
void Computermove(char arr[ROW][COL],int row,int col)  //电脑走
{
    srand((int)time(NULL));  //以当前时间为种子,产生随机数
while(count!=0)
{
row=rand()%3;
col=rand()%3;
if(arr[row][col] == ' ')
{   
 
    arr[row][col] ='0';
count--;
break;
}
}


}
void Playermove(char arr[ROW][COL],int row,int col)  //玩家走

printf("请输入坐标>:");
while(count!=0)
{
    
scanf("%d %d",&row,&col);
 
if(arr[row][col]==' ')
{
    arr[row][col]='X';
count--;
break;
}
else
{
   printf("输入坐标有误!!\n");

}
}


}
char IsWin(char arr[ROW][COL],int row,int col)  //检查是否赢了
{
  if((arr[0][0]==arr[0][1]&&arr[0][1]==arr[0][2]&&arr[0][2]=='X')
  ||(arr[1][0]==arr[1][1]&&arr[1][1]==arr[1][2]&&arr[1][2]=='X')
  ||(arr[2][0]==arr[2][1]&&arr[2][1]==arr[2][2]&&arr[2][2]=='X')
  ||(arr[0][0]==arr[1][0]&&arr[1][0]==arr[2][0]&&arr[2][0]=='X')
  ||(arr[0][1]==arr[1][1]&&arr[1][1]==arr[2][1]&&arr[2][1]=='X')
  ||(arr[0][2]==arr[1][2]&&arr[1][2]==arr[2][2]&&arr[2][2]=='X')
  ||(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]&&arr[2][2]=='X')
  ||(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0]&&arr[2][0]=='X'))
  {
   
return 'w';  //玩家赢
  }
  if((arr[0][0]==arr[0][1]&&arr[0][1]==arr[0][2]&&arr[0][2]=='0')
  ||(arr[1][0]==arr[1][1]&&arr[1][1]==arr[1][2]&&arr[1][2]=='0')
  ||(arr[2][0]==arr[2][1]&&arr[2][1]==arr[2][2]&&arr[2][2]=='0')
  ||(arr[0][0]==arr[1][0]&&arr[1][0]==arr[2][0]&&arr[2][0]=='0')
  ||(arr[0][1]==arr[1][1]&&arr[1][1]==arr[2][1]&&arr[2][1]=='0')
  ||(arr[0][2]==arr[1][2]&&arr[1][2]==arr[2][2]&&arr[2][2]=='0')
  ||(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]&&arr[2][2]=='0')
  ||(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0]&&arr[2][0]=='0'))
  {
return 'l';  //电脑赢
  }
if(count==0)
{
return 'q';  //平局
}

 //test.c

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include"test.h"
void menu()    //菜单
{
  printf("***********************************\n");
  printf("******        1.play         ******\n");
  printf("******        0,exit         ******\n");
  printf("***********************************\n");
}
void game()
{
   char arr[ROW][COL] = {0};
   int row = 0;
   int col = 0;
   int count = 9;  //计数器
   char c = ' ';   //返回值
   InitBoard(arr,row,col);  //初始化
   Display(arr, row, col);  //打印空棋盘
   
   while(1)
   { 
 Playermove(arr,row,col);
 Computermove(arr,row,col);  
 //Playermove(arr,row,col);
 Display(arr, row, col);     //打印玩家和电脑走后的棋盘
 c=IsWin(arr,row,col);
      if(c=='w')
 {
   printf("玩家赢\n");
break;
 }
 else if(c=='l')
 {
   printf("电脑赢\n");
break;
 }
 else if(c=='q')
 {
   printf("平局\n");
break;
 }
   }
}
int main()
{
  int input=0;
  while(1)
  {
    menu();
printf("请选择>: ");
scanf_s("%d",&input);
switch(input)
  {
case 1:
  game();
  break;
case 0:
exit(1);
break;
default:
printf("输入错误!!\n");
break;
  }
  }
  system("pause");
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值