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

本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下

先简单介绍一下我的三子棋小游戏是怎么玩的,就是自己跟电脑pk,只不过电脑没这么智能。自己输入想要下的坐标,电脑随机生成一个坐标,直到赢家产生。在这个过程中我觉得比较难的就是赢家的判定部分。在c语言中随机数的产生也就是调用srand()函数利用时间戳来获取随机值。算了游戏太简单,我想你们也都是冲着代码来的,直接上代码。

代码和实现

为了代码逻辑性更高,没那么繁杂,主要将代码分为三个部分,头文件game.h,和两个c文件,game.c放主程序,body.c放各种函数。

1.game.c

讲解:游戏开始要打印一个界面,然后选择要玩游戏还是退出,如果玩游戏就直接调用Game函数再调用各种花里胡哨的函数来实现游戏。game.c没什么可讲的,都是基本操作,有手就行。

#include "game.h"

void menu() {
 printf("********************\n");
 printf("****** 1.play  *****\n");
 printf("****** 0.exit  *****\n");
 printf("********************\n");
}
void Game() {
 char ch;
 char board[ROW][COL] = { 0 };
 InitBoard(board, ROW, COL);
 ShowBoard(board, ROW, COL);
 while (1) {
  PlayerMove(board, ROW, COL);
  ShowBoard(board, ROW, COL);
  ch=WhoWin(board, ROW, COL);
  if (ch == '*') {
   printf("玩家赢!\n");
   break;
  }
  else if (ch == '#') {
   printf("电脑赢!\n");
   break;
  }
  else if(ch=='a') {
   printf("平局!\n");
   break;
  }

  WindowPlay(board, ROW, COL);
  ShowBoard(board, ROW, COL);
  ch = WhoWin(board, ROW, COL);
  if (ch == '*') {
   printf("玩家赢!\n");
   break;
  }
  else if (ch == '#') {
   printf("电脑赢!\n");
   break;
  }
  else if(ch=='a') {
   printf("平局!\n");
   break;
  }
 }

}
int main() {
 menu();
 srand((unsigned int)time(NULL));
 int input = 0;
 do {
  printf("请输入:");
  scanf("%d", &input);
  switch (input) {
  case 1:
   Game();
   continue;
  case 0:
   break;
  default:
   printf("输入不合法,请从新输入\n");
   continue;
  }
 } while (input);
 return 0;
}

2.body.c

讲解:body.c里就是各种花里胡哨的函数,一个功能一个函数,不要一个函数搞太多功能,看起来比较繁杂,条理不清晰。这里的棋盘借用二维数组来实现,因为二维数组和一个棋盘的构造类似,用二维数组再合适不过,如果你够牛逼,你来个三维数组的。包含的功能有棋盘初始化,打印棋盘,玩家下,电脑下,最后就是判断输赢。判断输赢也是比较难的一个部分。这里我用了最粗暴的方法,就是分四种情况,行,列,对角线,还有棋盘满了。比较繁琐但是比较实用,也没什么可说的都是比较常用的语句。唯一可说的就是srand()函数获取随机值,srand()功能就是生成随机值,还需要一个种子seed为无符号整型数。可以用time(NULL)时间戳来作为这个种子,用rand()%n来获取你想要的数字。

#include "game.h"

//初始化棋盘
void InitBoard(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 ShowBoard(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) {
   printf("---|---|---\n");
  }
 }
}

//玩家下
void PlayerMove(char board[ROW][COL], int row, int col) {
 do {
  int i;
  int j;
  printf("请玩家输入:");
  scanf("%d%d", &i, &j);
  if (i > row && j > col && i <= 0 && j<= 0) {
   printf("坐标不合法,请从新输入\n");
   continue;
  }
  else if (board[i-1][j-1] == ' ') {
   board[i-1][j-1] = '*';
   break;
  }
  else {
   printf("该处已被占请从新输入\n");
   continue;
  }
 } while (1);
}

//电脑下
void WindowPlay(char board[ROW][COL], int row, int col) {
 printf("等待电脑下!\n");
 do {
  int i = rand() % 3;
  int j = rand() % 3;
  if (board[i][j] == ' ') {
   board[i][j] = '#';
   break;
  }
  else {
   continue;
  }
 } while (1);
}

//判断输赢
char WhoWin(char board[ROW][COL], int row, int col) {
 //判断行
 for (int i = 0; i < row; i++) {
  int j = 0;
  if (board[i][j] == board[i][j + 1] && board[i][j + 1] == board[i][j + 2] && board[i][j]!=' ') {
   if (board[i][j] == '*') {
    return board[i][j];
   }
   else {
    return board[i][j];
   }
  }
 }
 //判断列
 for (int j = 0; j < col; j++) {
  int i = 0;
  if (board[i][j] == board[i+1][j] && board[i+1][j] == board[i+2][j] && board[i][j] != ' ') {
   if (board[i][j] == '*') {
    return board[i][j];
   }
   else {
    return board[i][j];
   }
  }
 }
 //判断对角线
 int i = 0;
 int j = 0;
 if (board[i][j] == board[i + 1][j + 1] && board[i + 1][j + 1] == board[i + 2][j + 2] && board[i][j] != ' ') {
  if (board[i][i] == '*') {
   return board[i][j];
  }
  else{
   return board[i][j];
  }
 }
 if (board[i][j+2] == board[i + 1][j + 1] && board[i + 1][j + 1] == board[i + 2][j] && board[i][j+2] != ' ') {
  if (board[i][i] == '*') {
   return board[i][j+2];
  }
  else{
   return board[i][j+2];
  }
 }
 //判断棋盘是否满
 int count = 0;
 //char a=0;
 for (i = 0; i < row; i++) {
  int j = 0;
  for (j = 0; j < col; j++) {
   if (board[i][j] == ' ') {
    count++;
   }
  }
 }
 if (count == 0) {
  return 'a';
 }
}

3.game.h

讲解:这里主要给大家说一下头文件,头文件可以把各个c语言文件联系起来,可以定义一些全局变量,宏,函数声明,引用一些内部库等。一次定义多处使用,其他c文件只要引用这个头文件就赋予了它调用某些函数的权限,调用某些变量,宏的权限。头文件只是声明不占用内存空间,可以不用,但是强烈建议用,因为当一个工程的代码量很大时,没有头文件就相当于没有了头。所以是很重要的。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define ROW 3
#define COL 3

//初始化棋盘
void InitBoard(char board[ROW][COL],int row,int col);
//打印棋盘
void ShowBoard(char board[ROW][COL],int row,int col);
//玩家下
void PlayerMove(char board[ROW][COL], int row,int col);
//电脑下
void WindowPlay(char board[ROW][COL], int row,int col);

//判断输赢
char WhoWin(char board[ROW][COL],int row,int col);

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

(0)

相关推荐

  • C语言实现三子棋程序

    本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 先直接上代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //2.实现三子棋游戏. #include<Windows.h> //Sleep() RAND_MAX 的头文件 void menu() //打印菜单 { printf("****************************\n"); printf("***

  • C语言实现简单三子棋程序

    使用C语言实现简单的三子棋程序,主要是对二维数组的运用,我们需要一个头文件,两个源文件来实现. game.h //包含函数的声明,宏定义 test.c //包含主函数,函数调用 game.c //包含函数的定义 整体思路 1.要完成一个简单的三子棋程序,首先需要创建一个二维数组,并完成数组初始化. //使用宏定义定义常量,方便之后对数组的使用 #define ROW 3 //行 #define COL 3 //列 char arr[ROW][COL] = { 0 }; Arr_init(arr,

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

    在这里我们要写出一个三子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能. 代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void init_board(char arr[ROW][COL]) { int i=0; int j=0; for

  • C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> void chess_board(char arr[3][3]) //打印棋盘 { int i = 0; int j = 0; for (i = 0; i < 3; i++) { printf( " %c | %c | %c \n", arr [i][0], a

  • C语言实现简单的三子棋

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 一.主要思想 1.创建一个3*3的棋盘(使用字符数组) 2.初始化棋盘(用空格填充) 3.打印棋盘(使其有可见的边框) 4.玩家落子,用x表示(检验是否越界,是否已经落子,是否赢) 5.电脑落子,用o表示(检验是否已经落子,是否赢)  注:电脑在有效范围内随机落子,使用当前时间戳设置随机种子即srand(time(0)) 6.三种情况:玩家赢,电脑赢,和棋 二.代码实现 #define _CRT_SECURE_NO

  • C语言实现三子棋的步骤和代码详解

    一.问题描述 用c语言实现三子棋. 二.基本流程 在写三子棋的代码之前,我们来看看实现这个游戏的逻辑: 1.菜单界面选择开始或者退出游戏. 2.创建棋盘并初始化. 3.打印棋盘. 4.玩家落子(玩家输入行列坐标的方式来落子),'x'表示玩家落子. 5.判定胜负关系(输,赢,和棋),'q'表示和棋. 6.电脑落子(随机位置落子) ,'o'表示电脑落子. 7.判定胜负关系. 8.回到 步骤2 继续执行. 三.步骤 1.菜单界面 1.开始游戏 0.退出游戏 int menu(){ printf("--

  • C语言实现三子棋

    本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 题目:C语言实现三子棋 问题分析:首先用到数组,存储信息.棋盘的信息和棋子的信息 打印棋盘 读取棋子的位置 判断是否连子 打印棋盘 然后重复 代码如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //数组沙盘 char Global_Gobang[10][10]; int Global_line, Global_p

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

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

  • 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 *********

随机推荐