一.游戏规则:
这款自己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; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70513.html