简单的井子棋

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <time.h>
#include <windows.h>
void qipan(char arr[][3])
{
 system("cls");
 printf("   | 0 | 1 | 2 \n");
 for(int i=0;i<3;++i)
 {
  printf("---------------\n");
  printf(" %d | %c | %c | %c\n", i, arr[i][0], arr[i][1], arr[i][2]);
 }
}
void init(char arr[][3])
{
 for(int i=0;i<3;++i)
 {
  for(int j=0;j<3;++j)
  {
   arr[i][j]=' ';
  }
 }
}
int pos_is_legal(char arr[][3],int i,int j)
{
 if(i>2 || i<0 || j>2 || j<0)
 {
  printf("你的输入不合法\n");
  return 0;
 }
 if(arr[i][j]!=' ')
 {
  printf("你输入的格子已被占用请重新输入\n");
  return 0;
 }
 return 1;
 
}
char win(char arr[][3],int i,int j)
{
   for(i=0;i<3;++i)
   {
    if(arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2])
       {
     return arr[i][1];
    }
 }
 for(j=0;j<3;++j)
 {
    if(arr[0][j] == arr[1][j] && arr[0][j]==arr[2][j])
    {
     
     return arr[1][i];
  } 
 } 
 if( (arr[0][0]==arr [1][1] && arr[1][1]==arr[2][2])||(arr[2][0]==arr[1][1]&&arr[1][1]==arr[0][2]))
 {
  return arr[1][1];
 }
 return 'N';
}
void computer_go(char arr[][3],int i,int j)
{
 while(1)
 {
  int i=rand()%3;
  int j=rand()%3;
  if(arr[i][j]==' ')
  {
   arr[i][j]='O';
         break;
  } 
 }
}
int result(int*count, char arr[][3],int x,int y)
{
 char key;
 (*count)--;
 key=win(arr,3,3);
 switch(key)
 {
  case'X':
   printf("你赢了~~~nb\n");
   break;
  case'O':
      printf("你输了~~~真的菜\n");
      break;
  case'N':
      if(*count==0)
      {
       printf("棋逢对手\n");
          break;
   }
      return 1;
  default:
      return 1; 
 }
 return 0;
}
int main()
{
 int i,j;
 srand(time(NULL));
 char arr[3][3]={0};
 int count = 9;
 
 qipan(arr);
 init(arr);
 while(1)
 {
  
  printf("请出招\n");
  scanf("%d %d", &i, &j);
     if(!pos_is_legal(arr,i,j))
     {
      continue;
  }
  arr[i][j]='X';
  if(result(&count,arr,i,j)==0)
  {
   break;
  }
  qipan(arr);
  Sleep(1000);
  computer_go(arr,i,j);
  qipan(arr);
  if(result(&count,arr,i,j)==0)
  {
   break;
  } 
 }
 system("pause");
 return 0;
}

这是三子棋,是和低水平电脑的对局

在输入操作时请————》输入横排数字————》输入回车键—————》输入竖排数字

不然输入非法

新手小白,有写的不好的地方还请大家多多指正 !十分感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值