小游戏之三子棋

小游戏之三子棋

三子棋的基本玩法

游戏制作思路

制作步骤

1、菜单

2、初始化棋盘

3、打印棋盘

4、玩家下棋

5、电脑下棋

6、判断胜利

完整代码

​​​​​​​小结

三子棋的基本玩法

三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线(可以是直的也可以是横着或者斜着)就视为胜利,而对方就算输了,但是三子棋在很多时候会出现和棋的局面。

游戏制作思路

和上个游戏猜数字的思路基本一样,大概就是让你的电脑聪明一点。

首先, 初始化一个棋盘。

其次, 开始下棋,电脑下棋。

最后, 判断胜利方。

制作步骤

1、菜单

老步骤,打印一个属于游戏的进入界面。

cout << "*************************" << endl;cout << "*****1.start  0.exit*****" << endl;cout << "*************************" << endl;

当然为了游戏的重复使用,这个简单的菜单还是嵌入在一个do—while的结构里。

2、初始化棋盘

void intborad(char board[50][50], int r)
{for (int i = 0; i < r; i++){for (int j = 0; j < r; j++){board[i][j] = ' ';}}
}

因为这里制作的是一个简易的版本,所以棋盘大小就算是定死为3。

后期可以利用宏定义对相应的变量做出改变,达成更多变的设定。

3、打印棋盘

void display(char board[50][50])
{for (int i = 0; i < r; i++){for (int j = 0; j < r; j++){
​cout << " " << board[i][j];if (j < r - 1)cout << " |";}cout << endl;for (int j = 0; j < r; j++){cout << "---";if (j < r - 1)cout << "|";}cout << endl;}cout << endl;
}

为了方便其实这里可以多打印一个序号,这样下棋的时候就不用再去数一遍了。

ps.作者有点偷懒了

4、玩家下棋

void playermove(char board[50][50])
{cout << "请输入玩家下棋位置:";int x, y;cin >> x >> y;if (x > r && y > r && board[x][y] != '*')cout << "非法地址,重新输入:";else board[x - 1][y - 1] = '#';
}

这里就是要对数组的位置进行简单的判断,确保我们输入的是对的地址。

不过简单画一下图,相信即使你是第一次制作也能很好的明白这个简单的逻辑。

5、电脑下棋

void computermove(char board[50][50])
{srand((unsigned)time(NULL));int i, j;cout << "电脑回合" << endl;while (1){i = rand() % 3;j = rand() % 3;if (board[i][j] == ' '){board[i][j] = '*';break; }           }
}

大致的思路也和玩家一样,不过就是在这里面我们加入和上个小游戏一样的随机数。

其实在这地方还可以进行简单的优化,使得你的电脑更加聪明。

因为三子棋的棋盘简答够小,你作为电脑其实可以对玩家的下的位置进行简单的判断从而提高AI水平。

6、判断胜利

char  Win1(char board[50][50])
{for (int i = 0; i < 3; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')return board[i][0];}for (int i = 0; i < 3; i++){if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ' ')return board[0][i];}if ((board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ' ') || (board[0][3] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' '))return board[0][0];
}

在这里我们用一个判断函数返回一个返回值,通过返回值再给出最后的结果。

虽然可以直接通过一个函数完成判断,但是这样整个函数就显得冗长。

 if (x == '#'){cout << "玩家胜利" << endl;break;}else if (x == '*'){cout << "电脑胜利" << endl;break;}else if (x == ' '){cout << "和局" << endl;break;}

在这通过x来接收返回值从而打印胜利结果。

完整代码

//game.h头文件
#pragma once
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
​
void intborad(char board[50][50], int r);
//void game();
void display(char board[50][50]);
void playermove(char board[50][50]);
char  Win1(char board[50][50]);
void computermove(char board[50][50]);
//main.cpp主程序
#include "game.h"
extern int r, r;
​
int main()
{char borad[50][50] = { 0 };int i;
​do {cout << "*************************" << endl;cout << "*****1.start  0.exit*****" << endl;cout << "*************************" << endl;
​cin >> i;if (i == 0) break;
​cout << "选择你的棋盘大小" << endl;cin >> r ;char x = 'a';intborad(borad, r);display(borad);while (1){
​playermove(borad);display(borad);x = Win1(borad);if (x == '#'){cout << "玩家胜利" << endl;break;}else if (x == '*'){cout << "电脑胜利" << endl;break;}else if (x == ' '){cout << "和局" << endl;break;}computermove(borad);display(borad);x = Win1(borad);
​}} while (1);
​return 0;
​
}
​
//game.cpp函数实现文件
#include "game.h"
int r;
void display(char board[50][50])
{for (int i = 0; i < r; i++){for (int j = 0; j < r; j++){
​cout << " " << board[i][j];if (j < r - 1)cout << " |";}cout << endl;for (int j = 0; j < r; j++){cout << "---";if (j < r - 1)cout << "|";}cout << endl;}cout << endl;
​
​
}
​
void intborad(char board[50][50], int r)
{for (int i = 0; i < r; i++){for (int j = 0; j < r; j++){board[i][j] = ' ';}}
}
​
void playermove(char board[50][50])
{cout << "请输入玩家下棋位置:";int x, y;cin >> x >> y;if (x > r && y > r && board[x][y] != '*')cout << "非法地址,重新输入:";else board[x - 1][y - 1] = '#';
}
​
char  Win1(char board[50][50])
{for (int i = 0; i < 3; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')return board[i][0];}for (int i = 0; i < 3; i++){if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ' ')return board[0][i];}if ((board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ' ') || (board[0][3] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' '))return board[0][0];
​
}
void computermove(char board[50][50])
{srand((unsigned)time(NULL));int i, j;cout << "电脑回合" << endl;while (1){i = rand() % 3;j = rand() % 3;if (board[i][j] == ' '){board[i][j] = '*';break; }}}
​

小结

这也是一个简单的c语言小程序,虽然我用了c++的文件格式来实现,但是如果使用c语言绝大部分也是可以通用的。

小白编程,欢迎指正。

用c语言实现小游戏三子棋相关推荐

  1. C语言趣味小游戏——三子棋

    全篇无任何废话,本文的解释大多数都在代码段中,所以一定要看代码,边看边学边理解. 这只是初学者入门的一个小游戏,不难懂,没有什么复杂的内容 可以先学习一下比三子棋还简单的猜数字小游戏 C语言趣味小游戏 ...

  2. C语言简易小游戏--三子棋

    小时候,在学校和小伙伴除了互相追逐着玩闹玩游戏以外,相信很多小伙伴们也有和朋友在课堂上拿一张纸玩井字棋的美好回忆.(如下图酱紫啦~) 那今天呢,我们就用C语言制作一款简易的井字棋来练习一下对代码的感觉 ...

  3. (超详解)C语言实现小游戏三子棋

    目录 一,实现目标 二,整体思路 1.创立三个文件:text.c(实现测试的逻辑)                                                            ...

  4. 童年小游戏三子棋(C语言数组实现)

    目录 认识游戏 游戏框架 游戏实现 基本构思 棋子 棋盘 下棋 判断输赢 效果展示 全部代码 游戏效果 认识游戏 三子棋是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等 ...

  5. 趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)

    前言 今天牛牛给大家分享的是c语言实现三子棋和五子棋游戏,初学者可能有些不理解的地方,记得私信提问哦,牛牛会一 一回答的. 目录 前言 一.游戏介绍 二.游戏设计思路 2.1 主函数测试区(test. ...

  6. 简单小游戏------三子棋

    目录 前言 一.整体的逻辑 创建菜单 创建棋盘 打印棋盘 玩家下棋 电脑下棋 判断输赢 整合代码 game.c test.c game.h 总结 前言 经典数组游戏三子棋 一.整体的逻辑 1.创建菜单 ...

  7. C语言小游戏——三子棋(井字棋)

    文章目录 前言 一.前期准备 二.游戏整体结构及思路 1.程序主体结构: 2.代码解读 3.完整源代码 总结 前言 相信大家小时候都玩过井字棋小游戏,拿石子在地上画或是用笔在纸上画······今天我们 ...

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

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

  9. C语言小游戏——三子棋

    C语言 -- 三子棋 本篇主要是用二维数组和多个函数来实现三子棋游戏. 让我们先来看看这个编写这个游戏的思路:首先要打印三子棋的棋盘,然后是玩家下棋,电脑下棋,最后判断谁赢了,或者看看是否平局. 我们 ...

最新文章

  1. 使用Spring MVC HandlerExceptionResolver处理异常
  2. 使用淘宝的IP查询API实现IP地址省市展示
  3. Matplotlib-scatter-绘制散点图
  4. 使用脚本安装elasticsearch7.3的记录
  5. 2022.3.25黄花酢浆草
  6. VC里的#define new DEBUG_NEW
  7. 如何启用SAP C4C OData Event Notification
  8. OSI七层协议与TCP连接
  9. 设计素材 | 来一份秋高气爽——秋季促销海报
  10. 3 photolemur 样式下载_全自动照片美化软件Photolemur mac特别版
  11. CSS样式切换技巧 - 动态更换网页色彩皮肤
  12. linux下修改mysql数据存储_Linux下修改MySQL数据存放目录方法及可能遇到的问题--转...
  13. java mina框架教程_java mina框架的使用和一些自己的理解
  14. vim 配置快捷键映射
  15. 【ORBSLAM2点线融合】空间直线参数化
  16. 如何开发一个车牌识别,车牌识别系统,车辆识别系统毕业设计毕设作品
  17. 今日头条开通,分享我爱的数码科技
  18. android-23是什么手机,Android 8.1!首款helio P23/MT6763T手机曝光!
  19. 计算机考研落榜了怎么办,一位考研落榜者的自述:考研失败的原因
  20. XCTF---MISC---来自银河的信号

热门文章

  1. 如何妥善备份你的以太坊钱包
  2. 画各种思维导图的软件
  3. 计算机学院2022级新生邀请赛(三)
  4. 超快捷还原达梦数据库dmp
  5. 泡沫芯层的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. 量化交易 米筐 因子分组打分(成长因子)
  7. crm营销自动化系统 CRM软件自动化 - whale帷幄
  8. idea maven 本地仓库有但是引不进来问题记录
  9. 小米技术高管崔宝秋离职,雷军武大舍友,「创业派」已所剩无几
  10. python字符串的特点_字符串特点_清华尹成python入门教程_少儿编程视频-51CTO学院...