五子棋(C语言版)

test.c:

#include"game.h"
void menu()
{
 printf("***************************\n");
 printf("*******1.play 0.exit*******\n");
 printf("***************************\n");
}
void game()
{
 char arr[ROWS][COLS];
 char win = 0;
 int sz = sizeof(arr) / sizeof(arr[0][0]);
 srand((unsigned int)time(NULL));
 init_board(arr,sz);
 do
 {
  printf("五子棋:\n");
  display_board(arr, ROWS, COLS);
  printf("电脑下:>\n");
  computer_move(arr, ROWS, COLS);
  win = check_win(arr, ROWS, COLS);
  if ((win == '0') || (win == 'q'))
  {
   break;
  }
  display_board(arr, ROWS, COLS);
  printf("玩家下:>");
  play_move(arr, ROWS, COLS);
  win = check_win(arr, ROWS, COLS);
  if ((win == 'x') || (win == 'q'))
  {
   break;
  }
  system("CLS");
 } while (win == ' ');
 if (win == '0')
 {
  printf("电脑赢\n");
 }
 else if (win == 'x')
 {
  printf("玩家赢\n");
 }
 else
 {
  printf("平局\n");
 }
}
void test()
{
 int input = 0;
 do
 {
  menu();
  printf("请选择:>");
  scanf("%d",&input);
  switch (input)
  {
  case 1:
   game();
   break;
  case 0:
   break;
  default:
   printf("搞事情,请重输!\n");
   break;
  }
 } while (input);
}
int main()
{
 test();
 return 0;
}


game.c:

#include"game.h"
void init_board(char arr[ROWS][COLS], int sz)
{
 memset(arr[0],' ',sz);
}
void display_board(char arr[ROWS][COLS], int rows, int cols)
{
 int i = 0;
 for (i = 0; i < cols; i++)
 {
  if (i == 0)
  {
   printf(" ___ ___ ___ ___ ___ \n");
  }
  printf("| %c | %c | %c | %c | %c |\n", arr[i][0], arr[i][1], arr[i][2], arr[i][3], arr[i][4]);
  printf("|___|___|___|___|___|\n");
 }
}
void computer_move(char arr[ROWS][COLS], int rows, int cols)
{
 int row = 0;
 int col = 0;
 while (1)
 {
  row = rand() % 5;
  col = rand() % 5;
  if (arr[row][col] == ' ')
  {
   arr[row][col] = '0';
   break;
  }
 }
}
void play_move(char arr[ROWS][COLS], int rows, int cols)
{
 int row = 0;
 int col = 0;
 while (1)
 {
  scanf("%d%d",&row,&col);
  if (((row>0)&&(row<=ROWS))&&((col>0)&&(col<=COLS)))
  {
   if (arr[row - 1][col - 1] == ' ')
   {
    arr[row-1][col-1] = 'x';
    break;
   }
   else
    printf("输入坐标有误,请重新输入:>\n");
  }
  else
  {
   printf("输入坐标有误,请重新输入:>\n");
  }
 }
}
char check_win(char arr[ROWS][COLS], int rows, int cols)
{
 int i = 0;
 for (i = 0; i < COLS; i++)
 {
  if ((arr[i][0] == arr[i][1]) &&
   (arr[i][1] == arr[i][2]) &&
   (arr[i][2] == arr[i][3]) &&
   (arr[i][3] == arr[i][4]) &&
   (arr[i][0]) != ' ')
  {
   return arr[i][0];
  }
 }
 for (i = 0; i < ROWS; i++)
 {
  if ((arr[0][i] == arr[1][i]) &&
   (arr[1][i] == arr[2][i]) &&
   (arr[2][i] == arr[3][i]) &&
   (arr[3][i] == arr[4][i]) &&
   (arr[0][i]) != ' ')
  {
   return arr[0][i];
  }
 }
 if ((arr[0][0] == arr[1][1]) &&
  (arr[1][1] == arr[2][2]) &&
  (arr[2][2] == arr[3][3]) &&
  (arr[3][3] == arr[4][4]) &&
  (arr[2][2] != ' '))
 {
   return arr[2][2];
 }
 if ((arr[0][4] == arr[1][3]) &&
  (arr[1][3] == arr[2][2]) &&
  (arr[2][2] == arr[3][1]) &&
  (arr[3][1] == arr[4][0]) &&
  (arr[2][2] != ' '))
 {
   return arr[2][2];
 }
 for (i = 0; i < ROWS; i++)
 {
  int j = 0;
  for (j = 0; j < COLS; j++)
  {
   if (arr[i][j] == ' ')
    return arr[i][j];
  }
 }
 return 'q';
}


game.h:

#ifndef __GAME_H__
#define __GAME_H__
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define ROWS 5
#define COLS 5
void init_board(char arr[ROWS][COLS],int sz);
void display_board(char arr[ROWS][COLS],int rows,int cols);
void computer_move(char arr[ROWS][COLS], int rows, int cols);
void play_move(char arr[ROWS][COLS], int rows, int cols);
char check_win(char arr[ROWS][COLS], int rows, int cols);
#endif //__GAME_H__

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值