一.游戏规则:

这款自己DIY的小游戏有24个棋子。其中司令,军长各1个;师长,旅长,团长,营长,炸弹各2个;连长,排长,工兵,地雷各3个。棋子由小到大的顺序是:司令>军长>师长>旅长>团长>营长>连长>排长>工兵。其中工兵能挖掉地雷(工兵大于地雷),地雷能炸掉除工兵以外的其他任何棋子并消失;炸弹能炸掉对方所出的任何棋子并消失。若玩家和电脑所出的棋子相同,双方棋子同时阵亡。

二.代码实现:

/*--------------------------game.h
---------------------------*/#ifndef GAME_H_
#define GAME_H_
#include<iostream>
#include<string>
#include<Windows.h>
#include<ctime>
#include<cstdlib>
#pragma warning(disable:26495)//棋子
typedef struct
{std::string name;//棋子的名称(司令等)int amount;//棋子的数量int identify;//棋子的编号
}chess;//抽象基类
class Player
{
protected:chess ces[11];        //11种不同种类的棋子(司军师旅团 营连排兵弹 雷)int chessSum = 0;   //生还的棋子总数
public:Player();void deleteChess(int id);                           //某方棋子被干掉int showChessSum()const;                           //访问chessSum变量virtual void showList()const = 0;                    //向玩家展示我方生还的棋子virtual void operation(int& my)const = 0;            //玩家的操作
};//我方玩家(自己)
class You :public Player
{
public:virtual void showList()const;            //向玩家展示我方生还的棋子virtual void operation(int& my)const; //玩家的操作
};//敌方玩家(电脑)
class ComputerPlayer :public Player
{
public:virtual void showList()const;            //向玩家展示电脑方生还的棋子virtual void operation(int& co)const;    //电脑的操作(随机生成一个棋子)
};#endif
/*--------------------------game.cpp
---------------------------*/
#include"game.h"
#pragma warning(disable:6385)Player::Player()
{//初始化棋子名称ces[10].name = "炸弹";ces[9].name = "司令";ces[8].name = "军长";ces[7].name = "师长";ces[6].name = "旅长";ces[5].name = "团长";ces[4].name = "营长";ces[3].name = "连长";ces[2].name = "排长";ces[1].name = "工兵";ces[0].name = "地雷";for (int i = 10; i >= 0; i--){//初始化棋子编号ces[i].identify = i;if (i == 9 || i == 8){ces[i].amount = 1;}else if (i >= 4 && i <= 7){ces[i].amount = 2;}else if (i == 10){ces[i].amount = 2;ces[i].identify = 10;}else{ces[i].amount = 3;}chessSum += ces[i].amount;}
}void Player::deleteChess(int id)
{ces[id].amount--;chessSum--;
}int Player::showChessSum()const
{return chessSum;
}//玩家方
void You::showList()const
{using std::cout;using std::endl;cout << "我方:\n";for (int i = 10; i >= 0; i--){cout << ces[i].name << "共有" << ces[i].amount << "个(编号:" << i<< ")\n";}cout << "剩余棋子:" << chessSum << endl;
}void You::operation(int& my)const
{using std::cin;using std::cout;using std::endl;do{cout << "输入棋子代号[1-10]:";cin >> my;if (ces[my].amount != 0){break;}else{cout << "你的" << ces[my].name << "全没了!\n";}} while (1);cout << "我出的棋子为:" << ces[my].name << endl;
}//电脑方
void ComputerPlayer::showList()const
{using std::cout;using std::endl;cout << "敌方:\n";for (int i = 10; i >= 0; i--){cout << ces[i].name << "共有" << ces[i].amount << "个\n";}cout << "剩余棋子:" << chessSum << endl;
}void ComputerPlayer::operation(int& co)const
{using std::cout;using std::endl;//敌方随机出一个棋子srand((unsigned)time(0));while (1){co = rand() % 11;if (ces[co].amount == 0){continue;}break;}cout << "敌方出的棋子为:" << ces[co].name << endl;
}
/*--------------------------test.cpp
---------------------------*/
#include"game.h"int main()
{using std::cout;using std::cin;while (1){Player* my = new You;Player* co = new ComputerPlayer;my->showList();co->showList();do{int mynum = -1;int conum = -1;//判断游戏结果并让用户选择是否继续if (my->showChessSum() == 0 || co->showChessSum() == 0){bool choose;system("cls");//同归于尽if (my->showChessSum() == 0 && co->showChessSum() == 0){cout << "平局!是否重来?(1:重来,0:退出)>";}//电脑失败if (co->showChessSum() == 0){cout << "胜利!是否重来?(1:重来,0:退出)>\n";}//我方失败if (my->showChessSum() == 0){cout << "失败!是否重来?(1:重来,0:退出)>\n";}cin >> choose;//用户选择1就跳出循环,选择0就结束游戏进程if (choose){break;}else{return 0;}}my->operation(mynum);//我方操作Sleep(200);co->operation(conum);//电脑操作Sleep(750);//吃子规则//情况一:两个棋子编号为1-9的棋子的吃子规则if ((mynum >= 1 && mynum <= 9) && (conum >= 1 && conum <= 9)){//1.我的棋子比电脑大if (mynum > conum){co->deleteChess(conum);}//2.电脑的棋比我的大else if (mynum < conum){my->deleteChess(mynum);}//3.同归于尽else{my->deleteChess(mynum);co->deleteChess(conum);}}//情况二:地雷与棋子相遇的规则//双方中有一方的棋子为地雷else if (mynum == 0 || conum == 0){//双方出的都是地雷if (mynum == 0 && conum == 0){system("cls");my->showList();co->showList();continue;}//地雷与工兵相遇//1.我出工兵电脑出地雷else if (conum == 0 && mynum == 1){co->deleteChess(conum);}//2.我出地雷电脑出工兵else if (mynum == 0 && conum == 1){my->deleteChess(mynum);}//3.地雷与非工兵,非地雷棋子相遇else{my->deleteChess(mynum);co->deleteChess(conum);}}//情况三:炸弹与其他棋子相遇同归于尽else{my->deleteChess(mynum);co->deleteChess(conum);}system("cls");my->showList();co->showList();} while (1);delete my;delete co;}return 0;
}

C++制作简单的军棋小游戏(控制台窗口)相关推荐

  1. cocos2d x 入门学习(一)实例制作简单的射击小游戏Star Fighter

    我们将使用cocos2d-x制作一个简单的射击游戏. 本文所用的制作环境是cocos2d x 2.0.4,VS2010. 参考资料: 1.本文的原型其实是来自cocos2d-2.0-x-2.0.4官方 ...

  2. python编辑简单小游戏大全_Python制作简单的滑雪小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块.关注公众号:Python学习指南,回复"滑雪"获取源码 环境搭建 安装Pyt ...

  3. Python制作简单的滑雪小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 关注公众号:Python学习指南,回复"滑雪"获取相关文件 环境搭建 安装 ...

  4. 制作一个简单的switch小游戏

    好的,那么,我们可以这样来制作一个简单的 switch 小游戏: 首先,我们需要先引入所需的库,如 stdio.h 和 stdlib.h. 接着,我们可以使用 printf 和 scanf 函数来输出 ...

  5. 用计算机玩游戏最简单的方法,如何制作电脑简易命令小游戏

    满意答案 sylvia1017 2019.01.20 采纳率:48%    等级:7 已帮助:460人 简单的Dos小游戏 开始学习java,这周只简单的学习了C++的基本语法:输入输出,判断循环,因 ...

  6. unity课设小游戏_Unity制作20个迷你小游戏实例训练视频教程

    本教程是关于Unity制作20个迷你小游戏实例训练视频教程,时长:20小时,大小:3.8 GB,MP4高清视频格式,教程使用软件:Unity,附源文件,作者:Raja Biswas,共97个章节,语言 ...

  7. 计算机课玩的小游戏怎么找,能够回味电脑课的小游戏是什么 怎么制作这两个小游戏...

    能够回味电脑课的小游戏是什么,怎么制作这两个小游戏.在我的世界里回味已经是很多人的游玩乐趣之一了,因为这个游戏超高的自由度还有各种玩法可以让我们回味童年的种种. 这些小游戏乍一看都不怎么需要技巧 简单 ...

  8. 使用小程序制作一个飞机大战小游戏

    此文主要基于微信小程序制作一个飞机大战小游戏,上手即用,操作简单. 一.创建小程序 二.页面实现 三.代码块 一.创建小程序 访问微信公众平台,点击账号注册. 选择小程序,并在表单填写所需的各项信息进 ...

  9. Appgamekit制作消消乐小游戏(附代码)# 1

    Appgamekit制作消消乐小游戏(附代码)# 1 其实作者我也是刚刚才接触的Appgamekit,而且以前我是学C/C++的,所以我学的东西拿来这里就只有代码的结构思路会清晰一点了.(但是思路其实 ...

最新文章

  1. 2021.5.13指导论文
  2. 省钱方便网上手机充话费
  3. 农民工上网求职事半功倍
  4. linux 组调度浅析
  5. IOS中http请求使用cookie
  6. FZU Monthly-201903 获奖名单
  7. 虚拟机dhcp服务器怎么检验,实验十二虚拟机上DHCP服务器的配置和验证.doc
  8. erlang mysql连接超时_Erlang数据库-(一)Erlang与Mysql的连接
  9. plsql存过声明游标_plsql--游标用法
  10. 【转】DICOM 网关的设计与实现
  11. Coherence装载数据的研究-PreloadRequest
  12. VSCode 中文乱码设置
  13. 水经注地图发布服务中件间功能简介
  14. php爬虫post,PHPspider爬虫10分钟快速教程
  15. 花都平安保险应该找谁?
  16. 英语基础语法-语态(被动语态Be done)
  17. ANO匿名上位机V7协议STM32
  18. iScroll.js快速使用
  19. Subversive or Subclipse
  20. 一行Python能实现什么丧心病狂的功能?

热门文章

  1. vivo手机助手新手使用图文教程
  2. NVIDIA下一代Hopper架构曝光,采用5nm工艺 晶体管超1400亿
  3. mysql创建角色集_mysql8之新增角色
  4. 《那些年啊,那些事——一个程序员的奋斗史》——04
  5. 半导体行业产业相关企业洁净室用在线式粒子计数器
  6. 不用代码, “对象重建”让数据纳管、灾难恢复一键完成
  7. verilog编写RoundRobinArbiter的一些小错误摘录
  8. 深度:蒙牛老年高端产品营收增长9倍,中老年消费品市场趋势不变,创新机会涌现!
  9. mysql 命令先执行子查询,MySQL必知必会--使用子查询
  10. 个人目标日历定制制作小工具微信小程序(含源码)