C语言实现简单三子棋小游戏

三子棋介绍

三子棋,民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。如果两个人都掌握了技巧,那么一般来说就是平棋。一般来说,下在中间最有利,下在角上次之,下在边上再次之。最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了。

描述

使用C语言来编写一个简单的三子棋游戏

基本流程

1、显示菜单

void Menu()
{
 printf("*******************************\n");
 printf("**********0、exit**************\n");
 printf("**********1、play**************\n");
 printf("*******************************\n");
}

输入“0”退出游戏,输入“1”开始游戏。在这里我们先简单定义一下Game()函数(后面会进行详细的定义与声明),在调用Menu()函数时,我们需要用到do……(while)循环以及switch循环,代码如下:

int main()
{
 int input = 0;
 do
 {
  Menu();
  printf("输入你的选择:\n");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
   Game();
   break;
  case 0:
   printf("退出游戏\n");
   break;
  default:
   break;
  }
 } while (input != 0);
 return 0;
}

2、棋盘初始化

三子棋棋盘分三行三列,我们首先需要定义两个变量来确定我们的行和列,使用#define来固定我们的行和列有一个好处,如果之后我们需要进行五子棋或其他游戏的表格打印时,我们可以直接在此修改,比较方便。

#define ROW 3
#define COL 3
char board[ROW][COL]={0};//定义数组

我们需要将棋盘所在位置所有元素改为空格,方便我们打印棋盘。有以下两种方式:

(1)使用for循环进行遍历

void Initboard(char board[ROW][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
  for (int j = 0; j < col; j++)
  {
   board[i][j] = ' ';
  }
 }
}

(2)使用memeset()(需要引用头文件<string.h>)

void Initboard(char board[ROW][COL], int row, int col)
{
 memset(board, ' ', row*col*sizeof(char));
}

3、打印棋盘

打印的棋盘为三行三列,两条横线,两条竖线,九个空格。代码如下:

void Showboard(char board[ROW][COL], int row, int col)
{
 printf("======================\n");//上分割线
 for (int i = 0; i < row; i++)
 {
  for (int j = 0; j < col; j++)
  {
   printf(" %c ", board[i][j]);//三个空格
   if (j < col - 1)//只有两列竖线
   {
    printf("|");
   }
  }
  printf("\n");
  if (i < row - 1)//横线只有两行
  {
   for (int j = 0; j < col; j++)
   {
    printf("---");
    if (j < col - 1)
    {
     printf("|");
    }
   }
   printf("\n");
  }
 }
 printf("======================\n");//下分割线
}

4、玩家落子

在玩家输入坐标后,我们需要先判断输入的坐标是否合法,其次该位置是否为空。

void Playermove(char board[ROW][COL], int row, int col)
{
 while (1)
 {
  printf("请输入坐标:\n");
  int x = 0;
  int y = 0;
  scanf("%d%d", &x, &y);
  if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
  {
   if (board[x - 1][y - 1] = ' ')
   {
    board[x - 1][y - 1] = 'X';
    break;
   }
   else
    printf("该位置已有棋子\n");
  }
  else
  {
   printf("坐标错误\n");
  }
 }
}

5、电脑落子

电脑落子需要产生随机坐标,可使用rand函数,在使用rand函数时,需要调用头文件<stdlib.h>,同时为了保证坐标的随机性,需要引用以下语句:srand((unsigned)time(NULL))

void Computermove(char board[ROW][COL], int row, int col)
{
 while (1)
 {
  int x = rand() % row;//[0,1,2]
  int y = rand() % col;
  if (board[x][y] == ' ')
  {
   board[x][y] = 'O';
   break;
  }
 }
}

6、判断是否和棋

判断和棋可以直接写为静态函数(static),因为当前函数只为判断胜负的函数(Iswin)提供帮助。

static int Isfull(char board[ROW][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
  for (int j = 0; j < col; j++)
  {
   if (board[i][j] == ' ')
    return -1;//没有放满
  }
 }
  return 1;//平局
}

7、判断胜负关系

在该函数中,我们需要调用判断平局的函数(Isfull)如下,胜负关系可以通过返回值来判断,返回'X'时,玩家赢;返回‘O'时,电脑赢;返回‘Q'时,平局。

char Iswin(char board[ROW][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
  if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
  {
   return board[i][1];
  }
 }
 for (int j = 0; j < col; j++)
 {
  if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
  {
   return board[0][j];
  }
 }
 if (board[1][1] == board[2][2] && board[0][0] == board[1][1] && board[0][0] != ' ')
 {
  return board[0][0];
 }
 if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
 {
  return board[1][1];
 }
 if (Isfull(board, row, col) == 1)
 {
  return 'Q';
 }
 return ' ';
}

8、Game()函数

void Game()
{
 printf("游戏开始:\n");
 char board[ROW][COL] = { 0 };
 Initboard(board, ROW, COL);
 Showboard(board, ROW, COL);
 char ret;
 while (1)
 {
  Playermove(board, ROW, COL);
  ret = Iswin(board, ROW, COL);
  if (ret != ' ')
  {
   break;
  }
  Showboard(board, ROW, COL);
  Computermove(board, ROW, COL);
  ret = Iswin(board, ROW, COL);
  if (ret != ' ')
  {
   break;
  }
  Showboard(board, ROW, COL);
 }
 if (ret == 'O')
  printf("电脑赢\n");
 else if (ret == 'X')
  printf("玩家赢\n");
 else if (ret == 'Q')
  printf("平局\n");
}

Game()函数中,我们需要先初始化棋盘,再循环调用玩家落子(Playermove)、电脑落子(Computermove)、打印棋盘(Showboard)函数来确保游戏能够正常进行下去。

9、主函数

int main()
{
 srand((unsigned)time(NULL));
 int input = 0;
 do
 {
  Menu();
  printf("输入你的选择:\n");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
   Game();
   break;
  case 0:
   printf("退出游戏\n");
   break;
  default:
   break;
  }
 } while (input != 0);
 return 0;
}

总代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3
#define COL 3
#include<stdio.h>
#include<stdlib.h>
void Menu()
{
 printf("*******************************\n");
 printf("**********0、exit**************\n");
 printf("**********1、play**************\n");
 printf("*******************************\n");
}

void Initboard(char board[ROW][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
  for (int j = 0; j < col; j++)
  {
   board[i][j] = ' ';
  }
 }
}
void Showboard(char board[ROW][COL], int row, int col)
{
 printf("======================\n");
 for (int i = 0; i < row; i++)
 {
  for (int j = 0; j < col; j++)
  {
   printf(" %c ", board[i][j]);//三个空格
   if (j < col - 1)//只有两列竖线
   {
    printf("|");
   }
  }
  printf("\n");
  if (i < row - 1)//横线只有两行
  {
   for (int j = 0; j < col; j++)
   {
    printf("---");
    if (j < col - 1)
    {
     printf("|");
    }
   }
   printf("\n");
  }
 }
 printf("======================\n");
}
void Playermove(char board[ROW][COL], int row, int col)
{
 while (1)
 {
  printf("请输入坐标:\n");
  int x = 0;
  int y = 0;
  scanf("%d%d", &x, &y);
  if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
  {
   if (board[x - 1][y - 1] = ' ')
   {
    board[x - 1][y - 1] = 'X';
    break;
   }
   else
    printf("该位置已有棋子\n");
  }
  else
  {
   printf("坐标错误\n");
  }
 }
}
void Computermove(char board[ROW][COL], int row, int col)
{
 while (1)
 {
  int x = rand() % row;//[0,1,2]
  int y = rand() % col;
  if (board[x][y] == ' ')
  {
   board[x][y] = 'O';
   break;
  }
 }
}
static int Isfull(char board[ROW][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
  for (int j = 0; j < col; j++)
  {
   if (board[i][j] == ' ')
    return -1;//没有放满
  }
 }
  return 1;//平局
}
char Iswin(char board[ROW][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
  if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
  {
   return board[i][1];
  }
 }
 for (int j = 0; j < col; j++)
 {
  if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
  {
   return board[0][j];
  }
 }
 if (board[1][1] == board[2][2] && board[0][0] == board[1][1] && board[0][0] != ' ')
 {
  return board[0][0];
 }
 if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
 {
  return board[1][1];
 }
 if (Isfull(board, row, col) == 1)
 {
  return 'Q';
 }
 return ' ';
}
void Game()
{
 printf("游戏开始:\n");
 char board[ROW][COL] = { 0 };
 Initboard(board, ROW, COL);
 Showboard(board, ROW, COL);
 char ret;
 while (1)
 {
  Playermove(board, ROW, COL);
  ret = Iswin(board, ROW, COL);
  if (ret != ' ')
  {
   break;
  }
  Showboard(board, ROW, COL);
  Computermove(board, ROW, COL);
  ret = Iswin(board, ROW, COL);
  if (ret != ' ')
  {
   break;
  }
  Showboard(board, ROW, COL);
 }
 if (ret == 'O')
  printf("电脑赢\n");
 else if (ret == 'X')
  printf("玩家赢\n");
 else if (ret == 'Q')
  printf("平局\n");
}
int main()
{
 srand((unsigned)time(NULL));
 int input = 0;
 do
 {
  Menu();
  printf("输入你的选择:\n");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
   Game();
   break;
  case 0:
   printf("退出游戏\n");
   break;
  default:
   break;
  }
 } while (input != 0);
 return 0;
}

文章到此就结束了,希望本篇文章能够对大家有所帮助。若发现不足及错误的地方,欢迎大家批评指正!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现简单的<三子棋>案例

    棋盘的实现 众所周知,三子棋棋盘其实是一个就九方格,所以我们首先要定义一个二维数组来实现存放棋子.每一个方格我们规定为占三个小格例如 ' X ',且必须有分隔符来分开棋子. 棋盘的初始化 棋局开始时,棋盘必须是空的,所以我们首先的初始化数组,将每一个元素都置为' ',然后再来实现棋盘的功能,棋盘的初始化代码如下: void InitBoard(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for

  • 用C语言实现三子棋小游戏

    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1. 规则介绍 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.但是,有很多时候会出现和棋的情况. 2. 编写思路 2.1 选择界面的编写 提供选择界面(设计者可根据自己的喜好设定棋盘的大小:输入何种数字或者符号开始或者退出游戏也可由设计者自己确定数字) static void Menu() { pri

  • 利用C语言实现简单三子棋游戏

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 创建文件 只要弄清了二维数组的相关知识,我们就可以去实现简单的三子棋.对于初学者可谓是成就感满满~~ 首先我们会创建三个文件夹分别是game.h .geme.c .test.c .其中game.h中我们会引用所有需要的头文件(test.c和game.c中#include "game.h"即可):对常用量进行宏定义:还有对封装的函数进行申明和注释,使代码可读性更高.更好进行管理. 准备环节 1.菜单打印 既

  • C语言分装实现三子棋游戏详解

    本文实例为大家分享了C语言分装实现三子棋游戏的具体代码,供大家参考,具体内容如下 test.c --------------测试游戏的逻辑 game.h------------关于游戏相关函数的声明 game.c------------游戏相关函数的实现 game.h #include<stdio.h> #include<stdlib.h> #include<time.h> //符号的定义 #define ROW 3 #define COL 3 //函数声明 void

  • C语言设计三子棋小游戏

    三子棋想必大家都不陌生,随便画个井字便可以游戏,如下图 接下来我将介绍如何用C语言实现简易的三字棋游戏 先确定好文件布局 进入程序首先我们要设计一个菜单,如下图 这个用很容易实现 void menu() { printf("********************************\n"); printf("******** 1.game **********\n"); printf("******** 0.exit **********\n&quo

  • C语言代码实现简易三子棋游戏

    本文实例为大家分享了C语言代码实现简易三子棋游戏的具体代码,供大家参考,具体内容如下 1. 三子棋游戏规则 是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.但是,有很多时候会出现和棋的情况. 2.设计思路 游戏流程: 1.创建棋盘,并且初始化,将所有位置设置为空格. 2.打印棋盘 3.玩家通过输入坐标(row,col)进行落子 4.判定胜负 5.电脑随机落子 6.判

  • C语言实现简单三子棋小游戏

    三子棋介绍 三子棋,民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.如果两个人都掌握了技巧,那么一般来说就是平棋.一般来说,下在中间最有利,下在角上次之,下在边上再次之.最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了. 描述 使用C语言来编写一个简单的三子棋游戏 基本流程 1.显示菜单 void Menu() { printf("*******************************

  • C语言代码实现三子棋小游戏

    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 设计思路 三子棋的C语言设计的思路: 1.设计一个界面:让玩家运行后即可以看到一个界面,而此时界面需要一个让玩家选择的语句,即可以选择玩游戏或者退出操作.界面设计需要swich语句的实现,退出游戏设计选项为0,即可以当选择退出游戏时直接退出while(循环),即结束游戏. 2.游戏实现:当玩家选择玩游戏时,调用启动游戏的函数,而在游戏中,应当有的内容有: (1)游戏内的棋盘设计:三子棋应当是三行三列的一个棋盘,通过函

  • 适合初学者练习的C语言实现三子棋小游戏

    目录 一.写代码前明确下棋时的步骤与顺序 二 根据初步的主函数完成想要的代码 1.写一个函数来初始化棋盘 2.打印棋盘 3.玩家落子 4.电脑落子 5.判断胜负 三.三子棋实现代码 用简单的C语言来实现小时候玩的三子棋游戏,下面是人机对战,当然这个代码的电脑对手是人工智障而不是人工智能 一.写代码前明确下棋时的步骤与顺序 1.创建一个3*3的棋盘. 2.将上面创建的棋盘中每个格初始化成' '状态. 3.打印出初始化完成的棋盘 4.玩家落子 5.电脑落子 6.判断胜负 写代码之前梳理好大概的思路,

  • 使用C语言实现三子棋小游戏

    目录 1.实现原理 2.实现模块 3.实现逻辑 4.实现结果 本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1.实现原理 采用二位数组保存棋盘信息,棋盘上面的任何一个位置,里头可以放三个信息: 1.空2.用户落子3.电脑落子 下三子棋就是在二维数组种找对应的空位置,进行落子,落完之后立即就要判断落子位置是否有三字连珠,从而判断谁数输谁赢.每走一次棋会有四种情况: *用户1赢*用户2赢*平局(棋盘被沾满)**没有出结果 继续下棋 2.实现模块 文件名      

  • C语言实现简单三子棋游戏

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 游戏介绍:使用C语言中二维数组和函数的基本知识实现一个三子棋游戏,这个游戏要实现的基本功能有初始化棋盘.棋盘的打印.玩家下棋.电脑下棋.判断输赢. 代码框架: 1.头文件(game.h) #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<st

  • C语言实现三子棋小游戏详解

    在用c语言实现三子棋小游戏之前,我们应当了解三子棋的游戏规则:在九宫格棋盘上,哪一方三个棋子连成一线(一行或一列或对角线)即判定哪一方胜利. 以下为源代码: 1.首先打印出菜单. void menu() { printf("**********************************\n"); printf("**********************************\n"); printf("***** 0.play *********

  • C语言三子棋小游戏的实现代码

    本文实例为大家分享了C语言三子棋小游戏的具体代码,供大家参考,具体内容如下 一.介绍: 运用C语言的数组等相关知识:实现一个简易的三子棋小游戏: 三子棋小游戏的大概内容为 此游戏在设计时:总共设计了三个文件: game.h: 类型的声明和函数的声明 game.c:函数功能的具体实现 test.c: 测试文件 二.具体实现: (1).game.h模块: 代码实现如下: #define _CRT_SECURE_NO_WARNINGS 1 //头文件包含 #include <stdio.h> #in

  • C语言实现三子棋小游戏(vs2013多文件)

    本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 基本思路: 1.创建一个游戏选择面板. 2.创建并初始化棋盘. 3.玩家落子并判定,电脑落子并判定. 4.判定结果 ,游戏结束! 代码如下: 头文件: #pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4

随机推荐