C语言:井字棋游戏

一、头文件

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
void InitBoard(char board[ROW][COL]);
void ShowBoard(char board[ROW][COL]);
void Human(char board[ROW][COL]);
void Computer(char board[ROW][COL]);
int Judge(char board[ROW][COL]);

二、游戏

#include"game.h"
void InitBoard(char board[ROW][COL])
{
 int i = 0;
 int j = 0;
 for (i = 0; i < ROW; i++)
 {
  for (j = 0; j < COL; j++)
  {
   board[i][j] = ' ';
  }
 }
}
void ShowBoard(char board[ROW][COL])
{
 int i = 0;
 int j = 0;
 for (i = 0; i < ROW; i++)
 {
  for (j = 0; j < COL; j++)
  {
   printf(" %c ",board[i][j]);
   if (j < COL-1)
   {
    printf("|");
   }
  }
  printf("\n");
  if (i < ROW - 1)
  {
   for (j = 0; j < COL; j++)
   {
    printf("___");
    if (j < COL - 1)
    {
     printf("|");
    }
   }
  }
  printf("\n");
 }
}
void Human(char board[ROW][COL])
{
 int i = 0;
 int j = 0;
 printf("your turn\n");
 while (1)
 {
  printf("input place(1,3):");
  scanf("%d%d", &i, &j);
  if ((i > 0 && i <= ROW) && (j > 0 && j <= COL))
  {
   if (board[i-1][j-1] != ' ')
   {
    printf("place full\n");
    continue;
   }
   else
   {
    board[i-1][j-1] = '*';
    break;
   }
  }
  else
  {
   printf("input wrong\n");
  }
 }
}
void Computer(char board[ROW][COL])
{
 int i = 0;
 int j = 0;
 printf("computer turn\n");
 while (1)
 {
  i = rand() % ROW;
  j = rand() % COL;
  if (board[i][j] == ' ')
  {
   board[i][j] = '+';
   break;
  }
 }
}
int Judge(char board[ROW][COL])
{
 int i = 0;
 int j = 0;
 int h = 0;
 int c = 0;
 for (i = 0; i < ROW; i++)
 {
  for (j = 0,c = 0,h = 0; j < COL; j++)
  {
   if (board[i][j] == '*')
   {
    h++;
   }
   if (board[i][j] == '+')
   {
    c++;
   }
  }
  if (h == 3)
  {
   return 1;
  }
  if (c == 3)
  {
   return 2;
  }
 }
 for (j = 0; j < COL; j++)
 {
  for (i = 0, h = 0, c = 0; i < ROW; i++)
  {
   if (board[i][j] == '*')
   {
    h++;
   }
   if (board[i][j] == '+')
   {
    c++;
   }
  }
  if (h == 3)
  {
   return 1;
  }
  if (c == 3)
  {
   return 2;
  }
 }
 for (i = 0, c = 0, h = 0; i < ROW; i++)
 {
  if (board[i][i] == '*')
  {
   h++;
  }
  if (board[i][i] == '+')
  {
   c++;
  }
 }
 if (h == 3)
 {
  return 1;
 }
 if (c == 3)
 {
  return 2;
 }
 for (i = 0, c = 0, h = 0; i < ROW; i++)
 {
  if (board[i][ROW-1-i] == '*' )
  {
   h++;
  }
  if (board[i][ROW-i-1] == '+')
  {
   c++;
  }
 }
 if (h == 3)
 {
  return 1;
 }
 if (c == 3)
 {
  return 2;
 }
 for (i = 0,h=0; i < ROW; i++)
 {
  for (j = 0; j < COL; j++)
  {
   if (board[i][j] == '*' || board[i][j] == '+')
   {
    h++;
   }
  }
 }
 if (h == ROW * COL)
 {
  return 0;
 }
}

三、检测

#include"game.h"
void menu()
{
 printf("************************\n");
 printf("**********井字棋********\n");
 printf("**1、开始游戏  0、退出**\n");
 printf("************************\n");
}void game()
{
 int ret = 0;
 srand((unsigned int)time(NULL));
 char board[ROW][COL] = { 0 };
 InitBoard(board);
 ShowBoard(board);
 //printf("show is ok\n");
 while (1)
 {
  Human(board);
  ShowBoard(board);
  ret=Judge(board);
  if (ret == 1 || ret == 2 || ret == 0 )
  {
   break;
  }
  Computer(board);
  ShowBoard(board);
  ret=Judge(board);
  if (ret == 1 || ret == 2 || ret == 0)
  {
   break;
  }
 }
 switch (ret)
 {
 case 0:
  printf("ping\n");
  break;
 case 1:
  printf("Human win\n");
  break;
 case 2:
  printf("Computer win\n");
  break;
 }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值