手把手教你用C语言实现三子棋

简介: 手把手教你用C语言实现三子棋

接下来手把手教你用C语言实现三子棋


第一步

建立一个项目 ——》在项目中建立三个文件:text.c game.c game.h


w1.png


第二步

分析三子棋实现步骤 :


1.交互页面:输入1 —— 玩       输入0 —— 退出游戏


q4.png


2.建立棋盘



q3.png

3. 下棋


q2.png



5.判断结果



q1.png

第三步

代码实现:


test.c


#define  _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
  printf("**********************\n");
  printf("*** 1.play  0.exti ***\n");
  printf("**********************\n");
}
void Gobang()
{
  srand((unsigned)time(NULL));
  char tmp = 'C';
  char board[Line][Row] = { 0 };//棋盘
  //1.初始化棋盘
  initial(board, Line, Row);
  //2.打印棋盘
  print(board, Line, Row);
  while (1)
  {
  //3.下棋(玩家先下,电脑再下)
  //玩家下
  player(board, Line, Row);
  tmp = judge(board, Line, Row);
  if (tmp != 'C')
    break;
  print(board, Line, Row);//打印棋盘
  //电脑下
  computer(board, Line, Row);
  tmp = judge(board, Line, Row);
  if (tmp != 'C')
    break;
  print(board, Line, Row);//打印棋盘
  //4.判断输赢
  }
  if (tmp == '*')
  printf("玩家赢\n");
  else if (tmp == '#')
  printf("电脑赢\n");
  else
  printf("平局\n");
  print(board, Line, Row);//打印棋盘
}
int main()
{
  int input = 0;
  do
  {
  menu();
  printf("请输入你的选择 >> ");
  scanf("%d", &input);
  switch (input)
  {
  case 1:Gobang(); break;//开始游戏
  case 0:printf("退出游戏\n"); break;
  default:printf("请重新输入\n"); break;
  }
  } while (input!=0);
  system("pause");
}

game.h


#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define Line 5//行
#define Row 5//列
//初始化棋盘
void initial(char board[Line][Row], int line, int row);
//打印棋盘
void print(char board[Line][Row], int line, int row);
//玩家下棋
void player(char board[Line][Row], int line, int row);
//电脑下棋
void computer(char board[Line][Row], int line, int row);
//判断输赢
char judge(char board[Line][Row], int line, int row);

game.c

#define  _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//将棋盘初始化为空
void initial(char board[Line][Row], int line, int row)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < line; i++)
  {
  for (j = 0; j < row; j++)
  {
    board[i][j] = ' ';
  }
  }
}
//打印棋盘
void print(char board[Line][Row], int line, int row)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < line; i++)
  {
  for (j = 0; j < row; j++)
  {
    printf(" %c ", board[i][j]);
    if (j < row - 1)
    {
    printf("|");
    }
  }
  printf("\n");
  for (j = 0; j < row; j++)
  {
    if (i < line - 1)
    {
    printf("---");
    if (j < row - 1)
    {
      printf("|");
    }
    }
  }
  printf("\n");
  }
}
//玩家下棋
void player(char board[Line][Row], int line, int row)
{
  int i = 0;
  int j = 0;
  while (1)
  {
  printf("请玩家下棋 >> ");
  scanf("%d%d", &i, &j);
  if (board[i-1][j-1] = ' ' && i-1 < line && j-1 < row && i - 1 >= 0 && j - 1 >= 0)
  {
    board[i-1][j-1] = '*';
    break;
  }
  else
  {
    printf("输入错误请重新输入\n");
  }
  }
}
//电脑下棋
void computer(char board[Line][Row], int line, int row)
{
  while (1)
  {
  int i = rand() % line;
     int j = rand() % row;
  printf("请电脑下棋 >> \n");
  if (board[i][j] == ' ')
  {
    board[i][j] = '#';
    break;
  }
  }
}
//判断输赢
char judge(char board[Line][Row], int line, int row)
{
  int i = 0;
  int j = 0;
  int t = 0;
  //判断行低级版本
  //for (i = 0; i < line; i++)
  //{
  //  if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
  //  {
  //  return board[i][0];
  //  }
  //}
  //判断行高级版本
  for (i = 0; i < line; i++)
  {
  for (j = 0; j < row; j++)
  {
    if (j < row - 2 && board[i][j] != ' ' &&  board[i][j] == board[i][j + 1] && board[i][j + 1] == board[i][j + 2])
    {
    return board[i][j];
    }
  }
  }
  //判断列低级版本
  //for (i = 0; i < row; i++)
  //{
  //  if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
  //  {
  //  return board[0][i];
  //  }
  //}
  //判断列高级版本
  for (i = 0; i < row; i++)
  {
  for (j = 0; j < line; j++)
  {
    if (j < line - 2 && board[j][i] != ' ' &&  board[j][i] == board[j + 1][i] && board[j + 1][i] == board[j+ 2][i])
    {
    return board[j][i];
    }
  }
  }
  //判断对角线低级版本
  //if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ' || board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
  //{
  //  return board[1][1];
  //}
  //判断对角线高级版本
  //正对角线
  for (i = 0, j = 0; i < line, j < row; i++, j++)
  {
  if (i < line - 2 && j < row - 2 && board[i][j] != ' '&&board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2])
  {
    return board[i][j];
  }
  }
  //反对角线
  for (i = 0; i < line; i++)
  {
  for (j = 0; j < row; j++)
  {
    if (j >= 2 && board[i][j] != ' ' && board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2])
    {
    return board[i][j];
    }
  }
  }
  //平局
  for (i = 0; i < line; i++)
  {
  for (j = 0; j < row; j++)
  {
    if (board[i][j] == ' ')
    {
    t = 1;
    }
  }
  }
  if (t != 1)
  {
  return 'D';
  }
  return 'C';
}
相关文章
|
5月前
|
C语言
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏?
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏?
30 1
|
6月前
|
C语言
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(二)
我们可以通过创建并定义符号常量NUMBER,来作为判断是否胜利的标准。如三子棋中,令NUMBER为3,则这八个方向中有任意一个方向达成3子连珠,则连珠的这个棋子所代表的玩家获胜。
72 1
|
6月前
|
算法 C语言 C++
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(一)
三子棋游戏设计的核心是对二维数组的把握和运用。
82 1
|
6月前
|
编译器 C语言
【C语言入门小游戏】三子棋
【C语言入门小游戏】三子棋
52 0
【C语言入门小游戏】三子棋
|
5月前
|
存储 C语言
三子棋(C语言版)
三子棋(C语言版)
|
5月前
|
程序员 C语言 索引
【️C语言-游戏设置】---三子棋(N满)
【️C语言-游戏设置】---三子棋(N满)
|
6月前
|
人工智能 算法 数据可视化
C语言”三子棋“升级版(模式选择+”模拟智能“下棋)
C语言”三子棋“升级版(模式选择+”模拟智能“下棋)
|
6月前
|
存储 C语言
C语言实现三子棋
C语言实现三子棋
34 0
|
6月前
|
C语言
C语言实现三子棋
C语言实现三子棋
35 0
|
6月前
|
C语言
C语言:三子棋的实现。
C语言:三子棋的实现。
35 0