三子棋的扩展,c语言

#include "game.h" 
void menu() 
{
 printf("##################################################\n");
 printf("######                 1.PLAY              #######\n");
 printf("######                 0.EXIT              #######\n");
 printf("######           PLEASE  SELECT  :          #######\n");
}
void game()
{
 char board[ROW][COL] = { 0 };
 chushiqipan(board, ROW, COL);//初始化棋盘
 displayboard(board, ROW, COL);//显示棋盘
 while (1)
 {
  moveboard(board, ROW, COL);//玩家走
  displayboard(board, ROW, COL);//显示棋盘
  if (Iswin(board, ROW, COL) == 'X')
  {
   printf("玩家赢\n");
   break;
  }
  if (IFull(board, ROW, COL) == 1)
  {
   printf("平局\n");
   break;
  }
        dianmoveboard(board, ROW, COL);//电脑走
  displayboard(board, ROW, COL);//显示棋盘
  if (Iswin(board, ROW, COL) == '0')
  {
   printf("电脑赢\n");
   break;
  }
  if (IFull(board, ROW, COL) == 1)
  {
   printf("平局\n");
   break;
  }
 }
}
int main()
{
 int select = 0;
 
 do {
  menu(); 
  printf("请输入>:");
  scanf("%d", &select);
  switch (select)
  {
  case 1:
   game();
   break;
  case 0:
   exit(0);
   break;
  default:
   printf("输入错误,请重新输入>:");
   break;
  }
 } while (select);
 system("pause");
 return 0;
}
test.c//游戏的主函数

#include"game.h"
void chushiqipan(char board[ROW][COL], int row, int col)//初始化棋盘
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)
 {
  for (j = 0; j < col; j++)
  {
   board[i][j] = ' ';
  }
 }
}
void displayboard(char board[ROW][COL], int row, int col)//显示棋盘
{
 int i = 0;
 for (i = 0; i < row; i++)
 {
  int j = 0;
  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 moveboard(char board[ROW][COL], int row, int col)//玩家走
{
 int i = 0;
 int j = 0;
 while (1)
 {
  printf("玩家走;请输入坐标:");
  scanf("%d %d", &i, &j);
  if (((i >= 1) && (i <= row + 1)) && ((j >= 1) && (j <= col + 1)))
  {
   if (board[i-1][j-1] == ' ')
   {
    board[i-1][j-1] = 'X';
                                break;
   }
   else
   {
    printf("地方已下过");
   }
  }
  else
  {
   printf("输出过界");
  }
 }
}
void dianmoveboard(char board[ROW][COL], int row, int col)//电脑走
{
 srand((unsigned int)time(NULL));
 do
 {
  int i = 0;
  int j = 0;
  i = rand() % row;
  j = rand() % col;
  if (board[i][j] == ' ')
  {
   board[i][j] = '0';
   break;
  }
 } while (1);
}
char Iswin(char board[ROW][COL], int  row, int  col)//判断输赢
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)//判断横
 {
  int sum = 1;
  for (j = 0; j < col - num + 1; j++)
  {
   if ((board[i][j] == board[i][j + 1]) && (board[i][j] == ' '))
   {
    sum++;
    if (sum == num)
    {
     return board[i][j];
    }
   }
  }
 }
 for (j = 0; j < col; j++)//判断竖
 {
  int sum = 1;
  for (i = 0; i < col - num + 1; i++)
  {
   if ((board[i][j] == board[i + 1][j]) && (board[i][j] == ' '))
   {
    sum++;
    if (sum == num)
    {
     return board[i][j];
    }
   }
  }
 }
 for (i = 0; i <= row - num; i++)
 {
  int count = 0;
  int n = i;
  for (j = 0; j <= col - num + 1; j++)//判段斜
  {
   for (int t = j; t <= col - num + 1; t++)
   {
    if (board[n][t] == board[n + 1][t + 1] && board[n][t] != ' ')
    {
     n++;
     count++;
     if (count == num - 1)
     {
      return board[n - 1][t];
     }
    }
   }
  }
 }
}

int IFull(char board[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 (board[i][j] == ' ')
    return 0;
  }
 }
 return 1;
}
game.c/游戏所需要函数的实现

#ifndef _GAME_H_ 
#define _GAME_H_ 
#include <stdio.h> 
#include <windows.h> 
#include <stdlib.h>  
#include <string.h>
#include <time.h> 
#define ROW 3 //控制行数
#define COL 3 //控制列数
#define num 3//判断是几子棋
void game();
void chushiqipan(char board[ROW][COL], int row, int col);//初始化棋盘
void displayboard(char board[ROW][COL], int row, int col);//显示棋盘
void moveboard(char board[ROW][COL], int row, int col);//玩家走
void dianmoveboard(char board[ROW][COL], int row, int col);//电脑走
char Iswin(char board[ROW][COL], int  row, int  col);//判断输赢
int IFull(char board[ROW][COL], int  row, int  col);//判断满盘
#endif 
//game.游戏所需要的头文件以及函数的声明,控制棋盘的大小以及几子棋

这段代码的优点就是可以多子棋大小棋盘的切换比较简单,缺点电脑下的比较无厘头,主要是没咋仔细研究五子棋的必胜走法。如果有兴趣的化可以去研究一下五子棋的走法,在电脑走的那个函数实习里优化一下。(没办法提交两次在c++,都给我把代码缩在一团只能用这种方法)

猜你喜欢

转载自blog.csdn.net/weixin_41883223/article/details/80380889