C实现三子棋 人机对弈

C语言实现的三子棋,可以人和电脑一起下棋。

源码在最后面!!!!!!

先展示效果!!!!

C实现三子棋 人机对弈_第1张图片

 这里是运行结果,不过这个不是人工智能,可能是人工智障,由于我的水平也就这里,所以也写不出来比较聪明的人机。

C实现三子棋 人机对弈_第2张图片

这里程序从main函数进去去调用test函数 

C实现三子棋 人机对弈_第3张图片

test函数中用来里面是逻辑大框,如果玩游戏的话,输入1可以走到game函数,game函数中是玩游戏的整个过程

C实现三子棋 人机对弈_第4张图片

如果想要玩游戏的话首先得有棋盘,所以先打印棋盘,而棋盘中也需要可以存放玩家和电脑的落子,而存放落子可以通过数组实现

 所以首先得有数组存放落子

这里是数组的创建和初始化

C实现三子棋 人机对弈_第5张图片

 接下来就是打印棋盘

C实现三子棋 人机对弈_第6张图片

 

 等棋盘和存放落子的地方初始化和打印好之后,玩家和电脑就可以开始落子了

首先是玩家走

玩家走的地方必须在棋盘里面,所以用if判断玩家的落子位置是否合法,如果不合法需要重新落子,如果合法也需要判断落子的地方是否有子,如果没有即可以落子

C实现三子棋 人机对弈_第7张图片

 接下来是人机走

由于是人机走,所以需要让人机可以自动产生落子的数字,可以通过rand函数得到随机数字,然后用随机数字模棋盘的长宽,即可以得到一个人合法的落子位置,同时也需要判断落子的位置是否有子

C实现三子棋 人机对弈_第8张图片

 等玩家或者电脑每走一步后,就需要判断是否胜利,其中结果有,玩家胜,电脑胜,或者平局

其中判断过程可能有的结果是

玩家胜

电脑胜

平局(棋盘已经满了)

继续执行(继续执行是棋盘上还有位置)

C实现三子棋 人机对弈_第9张图片

 

所以要判断棋盘是否满还需要一个判断棋盘是否满的函数,就是上面这个

C实现三子棋 人机对弈_第10张图片

 等玩家或者电脑胜利后或者是平局后,即可进去菜单选择继续游戏还是退出游戏

下面是源码

!!!!!!!!!!!!!!!!!!!!

game.h

#pragma once
#include
#include
#include
#include

#define ROW 3
#define COL 3


//初始化
void Init_Board(char board[ROW][COL], int  row,int col);

//棋盘打印
void print_Board(char board[ROW][COL], int row, int col);

//玩家走
void player_Move(char board[ROW][COL], int row, int col);

//电脑走
void computer_Move(char board[ROW][COL], int row, int col);

char is_win(char board[ROW][COL], int row, int col);

~~~~~~~~~~~~~~~~~~~~

#define _CRT_SECURE_NO_WARNINGS 1

 

 

#include"game.h"

//初始化

void Init_Board(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++)

  {

   board[i][j] = ' ';

  }

 }

}

 

//棋盘打印

void print_Board(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

        printf("|");

  }

  printf("\n");

  if (i < row - 1)

  {

   for (j = 0; j < col; j++)

   {

    printf("---");

    if (j < col - 1)

     printf("|");

   }

  }

  printf("\n");

 

 }

}

 

//电脑走

void computer_Move(char board[ROW][COL], int row, int col)

{

 printf("电脑下棋\n");

 

 while (1)

 {

  int i = rand() % row;

  int j = rand() % row;

 

  if (board[i - 1][j - 1] == ' ')

  {

   board[i - 1][j - 1] = '#';

   break;

  }

 

 }

}

 

//玩家走

void player_Move(char board[ROW][COL], int row, int col)

{

 printf("玩家走\n");

 

 while (1)

 {

  int i = 0;

  int j = 0;

  printf("请输入要下棋的坐标\n");

  scanf("%d %d", &i, &j);

  if (i >= 0 && i <= row && j >= 0 && j <= col)

  {

   if (board[i - 1][j - 1] == ' ')

   {

    board[i - 1][j - 1] = '*';

    break;

   }

   else

   {

    printf("坐标被占用,请重新输入\n");

   }

  }

  else

  {

   printf("坐标非法\n");

  }

  

 }

}

 

 

int is_Fill(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++)

  {

   if (board[i][j] == ' ')

   {

    return 0;

   }

  }

  return 1;

 }

}

 

//判断是否胜利

char is_win(char board[ROW][COL], int row, int col)

{

 int i = 0;

 for (i = 0; i < row; i++)

 {

  if (board[i][0] == board[i][1] &&board[i][0] == board[i][2] && board[i][0] != ' ')

  {

   return board[i][0];

  }

  

 }

 for (i = 0; i < row; i++)

 {

  if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ' ')

  {

   return board[0][i];

  }

 }

 for (i = 0; i < row; i++)

 {

  if (board[0][0] == board[1][1] && board[0][0] == board[2][2] &&board[1][1]!=' ')

}

 for (i = 0; i < row; i++)

 {

  if (board[0][0] == board[1][1] && board[0][0] == board[2][2] &&board[1][1]!=' ')

  {

   return board[0][0];

  }

 }

 for (i = 0; i < row; i++)

 {

  if (board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[1][1] != ' ')

  {

   return board[1][1];

  }

 }

 

 //判断是否满了,满了返回Q没有满返回C

 if (is_Fill(board, row, col)==1)

 {

  return 'Q';

 }

 

 //返回C游戏继续

 return 'C';

}

~~~~~~~~~~~~~~~~~~~~

#define _CRT_SECURE_NO_WARNINGS 1

 

#include"game.h"

 

void menu()

{

 printf("********************************\n");

 printf("********* 1.play **********\n");

 printf("********************************\n");

 printf("********* 0.exit **********\n");

 printf("********************************\n");

}

 

void game()

{

 char ret = 0;

 char board[ROW][COL];

 //初始化数组

 Init_Board(board,ROW,COL);

 //棋盘打印

 print_Board(board, ROW, COL);

 //玩家走

 while (1)

 {

  player_Move(board, ROW, COL);

  print_Board(board, ROW, COL);

  //判断是否胜利

  ret = is_win(board, ROW, COL);

  if (ret != 'C')

  {

   break;

  }

  computer_Move(board, ROW, COL);

  print_Board(board, ROW, COL);

  //判断是否胜利

  ret = is_win(board, ROW, COL);

  if (ret != 'C')

  {

   break;

  }

 }

 if (ret == '*')

 {

  printf("玩家赢\n");

 }

 else if (ret == '#')

 {

  printf("电脑赢\n");

 }

 else if(ret=='Q')

 {

  printf("平局\n");

 }

 

 

 }

 

void test()

{

 srand((unsigned int)time(NULL));

 int input = 0;

 

 do

 {

  menu();

  printf("请选择:>\n");

  scanf("%d", &input);

  switch (input)

  {

  case 1:

   printf("玩游戏\n");

   game();

   break;

  case 0:

   printf("退出游戏\n");

   break;

  default:

   printf("选址错误,请重新输入:>\n");

   break;

  }

 } while (input);

 

}

 

int main()

{

 test();

 return 0;

}

 

你可能感兴趣的:(c++,c语言,c语言)