c语言实现简单的多子棋游戏# 系列文章目录

c语言实现简单的多子棋游戏


前言

*大家好呀!今天我们要探究怎么用c语言实现以三子棋为基础的五子棋、十子棋等等多子棋游戏。游戏对代码的要求不高,只需要学习c语言的输入输出、分支、循环、数组知识即可实现。
下面就让我们对代码抽丝剥茧,一层一层地进入多子棋的世界吧!

  1. test.c 测试游戏的逻辑
  2. game.c 游戏代码的实现
  3. game.h 游戏代码的申明(函数申明、符号定义)*

一、设计思路

1、打印菜单 menu()
2、三子棋函数实现 game()
1)初始化三行三列的棋盘 InitBoard()
2)打印棋盘 DisplayBoard()
3) 下棋
玩家下棋 PlayerMove()
判断输赢 IsWin()
a、玩家赢 *
b、电脑赢 #
c、平局 q
d、游戏继续 c
电脑下棋ComputerMove()
判断输赢

多子棋只需要将game.h文件中的
#define ROW 3
#define COL 3
改成对应的数字即可。
例:五子棋
#define ROW 5
#define COL 5

二、详细步骤

1.test.c

代码如下(示例):

#include "game.c"
void menu()
{printf("-----------------------------------------------\n");printf("----------------- 1 、play --------------------\n");printf("----------------- 0 、exit --------------------\n");printf("-----------------------------------------------\n");
}
void game()
{char ret = 0;//初始化IsWin()函数返回值char board[ROW][COL] = { 0 };//InitBoard(board, ROW, COL);//初始化棋盘DisplayBoard(board, ROW, COL);//打印棋盘while (1){PlayerMove(board, ROW, COL);//玩家下棋ret=IsWin(board, ROW, COL);//判断输赢if(ret != 'c')//ret接收IsWin()函数返回值,返回c,继续游戏{break;}DisplayBoard(board, ROW, COL);//棋盘未满,继续游戏,打印棋盘ComputerMove(board, ROW, COL);//电脑下棋ret = IsWin(board, ROW, COL);if (ret != 'c'){break;}DisplayBoard(board, ROW, COL);}if (ret=='*')//返回*,玩家赢{printf("玩家赢!\n");}if (ret=='#')//返回#,电脑赢{printf("电脑赢!\n");}if(ret=='q')//返回q,平局{printf("平局!\n");}DisplayBoard(board, ROW, COL);
}
int main()
{srand((unsigned int)time(NULL));//分配产生随机数int input = 0;do{menu();//打印菜单printf("请选择:\n");scanf("%d", &input);switch (input)//选择1,进入游戏。选择0,退出主页{case 0:break;case 1:game();break;default:printf("选择错误!请从新输入1或0\n");break;}} while (input);return 0;
}

2.game.c

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void InitBoard(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 < row; j++){printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");//打印分割行if (i<row-1){int j = 0;for (j=0;j<col;j++){printf("---");if (j<col-1){printf("|");}}}printf("\n");}}
void PlayerMove(char board[ROW][COL], int row, int col)
{//玩家下棋int x = 0;int y = 0;printf("玩家下棋:\n");while(1){printf("请输入坐标:\n");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y>=1 && y <=col)//判断输入的坐标是否在棋盘范围内{if (board[x - 1][y - 1] == ' ')//判断对应坐标内是否有数据{board[x - 1][y - 1] = '*';//没有数据输入*break;}else{printf("该坐标已有棋子,请重新输入坐标\n");}}else{printf("输入的坐标不在棋盘范围,请从新输入\n");}}
}
void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑下棋:\n");int x = 0;int y = 0;while (1){//产生棋盘范围内的随机坐标x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}
int IsFull(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;//满了
}
char IsWin(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][1] == board[i][2] && board[i][1] != ' '){return board[i][1];}/*int j = 0;for (j=0;j<col;j++){if (board[i][j]==board[i+1][j+1]&&board[i][j]!=' '){return board[i][j];}}break;*/}//竖列相同/*int i = 0;for (i=0;i<row;i++){*/int j = 0;for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' '){return board[1][j];}}
//  }//对角线相同if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && 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';//满了}if(IsFull(board, row, col) == 0){return 'c';//没满}}

3.game.h

代码如下(示例):
全部是函数申明

#pragma once
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
void InitBoard(char board[ROW][COL], int row,int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
char  IsWin(char board[ROW][COL], int row, int col);

c语言实现简单的多子棋游戏相关推荐

  1. 如何用C语言来实现【三子棋游戏】

    目录 一.前言 二.思维导图 三.思路分析 四.运行结果 五.算法细节 1.游戏相关的测试 2.游戏函数的声明 3.游戏函数的实现 (1)初始化棋盘的函数 (2)打印棋盘的函数 (3)玩家下棋的函数 ...

  2. 【C语言】通过C语言实现简单的三子棋

    [C语言]通过C语言实现简单的三子棋 文章目录 [C语言]通过C语言实现简单的三子棋 前言 一.本次小小小小项目前提 二.游戏简易菜单 1.菜单打印 2.游戏菜单的逻辑执行 三.三子棋游戏 1.初始化 ...

  3. c语言大作业走迷宫,基于C语言实现简单的走迷宫游戏

    本文实例讲述了C语言实现简单的走迷宫游戏的方法,代码完整,便于读者理解. 学数据结构时用"栈"写的一个走迷宫程序,实际上用到双向队列,方便在运行完毕后输出经过的点. #includ ...

  4. 用c语言写简单的回合制游戏

    用c语言写简单的回合制游戏 #include <stdio.h> #include <stdlib.h> #include <time.h> #include &l ...

  5. c语言小游戏 三子棋,C语言实现简单的三子棋小游戏

    学习完数组就能用C语言写出的简单小游戏: 编译器使用的为VS2013 代码分为三个部分 1.头文件 game.h 2.源文件 game.c 用来存放游戏中所有的函数 3.源文件 test.c 用来存放 ...

  6. 【c语言版】带你领悟多子棋游戏

    三子棋以及N子棋的实现 初始化棋盘 打印棋盘 玩家下棋 电脑下棋 判断输赢 主函数的实现(test.c) game.c的实现 game.h的实现 铁汁们~今天给大家分享一篇三子棋以及N子棋的实现,来吧 ...

  7. c语言程序设计中三子棋游戏,C语言实现简易版三子棋游戏

    本文实例为大家共享了C语言实现三子棋游戏的详细代码,供大家参考,详细内容如下 什么是多文件? 多数大型的工程的头文件和源文件非常多,我们也不可能把所有的代码都写在同一个文件里,这样也不方便代码的阅读与 ...

  8. C语言的简单运用——三子棋

    前言 学习新知识固然重要,但如何运用所学的知识解决生活中的问题更为重要.只会学而不会用,何异于纸上谈兵.那么就让我们来看看如何用C语言来实现一个简单的三子棋吧! 目录 前言 一点建议 一.游戏菜单 1 ...

  9. 多子棋游戏的玩法设计

    首先:我们创建三个文件: game.h(头文件): 里面包含程序需要的所以头文件和必要的函数 game.c(游戏设计的函数功能实现)     主要是用于说明游戏中所运用的功能 text.c(程序启动的 ...

最新文章

  1. ios之开发者须知常见简写英文代表的含义
  2. ABAP中P类型介绍
  3. 数据存储方案-闭包表
  4. Docker 的插件式设计
  5. jq简单封装replaceAll
  6. html工作界面抽象吗,WEB界面设计五种特征-网页设计,HTML/CSS
  7. WSL1安装GUI界面
  8. dumpsys命令用法
  9. IM消息重试机制Java实现_消息的重试机制的设计思路
  10. 低配本用win10服务器系统,低配电脑装win10会怎么样
  11. Arduino-定义串口
  12. 2022届软件技术专业毕业生就业岗位分析(.Net方向)
  13. java 导出压缩文件,里面文件名字乱码的问题(麒麟系统,linux)
  14. type-c耳机方案
  15. 6种以太坊(ETH)钱包的基本介绍
  16. Python 解析爬取的车次数据(12306)
  17. 六类网线钳能压五类水晶头吗_六类网线钳能压五类水晶头吗_网线水晶头线序的接法解析...
  18. 客户端伪造代理服务器ip进行sql注入
  19. Nucleo-64开发板笔记
  20. 周志华、贾扬清入选!2022中国高被引学者榜单揭晓,计算机界214人上榜

热门文章

  1. 用Unity重现《空洞骑士》的苦痛之路(2)——地图篇
  2. mysql左连接sql语句详解_SQL各种连接查询详解(左连接、右连接..)
  3. 例28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请
  4. 有线桥接,多个路由器共用一个WIFI
  5. 建筑建材行业采购平台解决方案丨让企业赢在效率,采购管理更“智慧”
  6. mysql的更新用法_mysql update语句的用法详解
  7. uniapp实现app自动检测更新
  8. 明朝是中国历史上最有骨气的王朝
  9. #git操作#拉取远程分支到本地,克隆远程分支的代码(指定分支)
  10. Mysql-高级查询语句