最近很少去刷题了,一心在搞课程设计。自己觉得搞得不咋样,还好,自己过了。不管做的怎么样知识是自己编的,不会随便到网上找别人的代码去蒙老师。
把代码贴下来,也算是完成这学期的一个总结吧,把C++彻底弄懂吧。
游戏分为单人和多人游戏。我就把它分为了两个类,一个单人游戏,一个多人游戏的类,并且由多人派生出单人游戏的类。
代码放在三个文件里面:
game_class.h文件中代码如下:
#define N 10
using namespace std;
void StartMenu(); //本文件是包含类的声明和函数的声明。
int Menu();
void Exit();
class Game{
protected:
int color[N][N];
int num[N][N];
int currentOdds[N];
char name[N][20] ;
int money[N];
int score[N];
int visit[N];
int hands[N];
int e[N];
public:
Game(){ //构造函数
for(int i=0;i
#include
#include
#include
#include
#include
#include
#include"game_class.h"
using namespace std;
char PokeColor[4] = {3,4,5,6};
char PokeNum[13] = {'2','3','4','5','6','7','8','9','I','J','Q','K','A'};
int n,stake,h=0,flag=0; //玩家总数 //记录庄家姓名
void StartMenu() //游戏起始界面,基类game
{
char load[]="▋☆☆★☆☆█";
cout<<"\t╔═══════════════════════╗\t\n";
cout<<"\t ≧▂≦ 欢迎来到二十一点纸牌游戏 ≧▂≦\t\n\t\t";
for(int i = 0; i <= strlen(load); ++i)
{
cout<>ch){
if('0'<=ch[0]&&ch[0]<='4') break;
else cout<<"选择无效!,请重新输入:";
}
switch(ch[0]){
case '0':return 0;
case '1':return 1;
case '2':return 2;
case '3':return 3;
case '4':return -1;
}
}
}
void Game::Help(){ //帮助函数,基类game
cout<<"/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n\n";
cout<<"游戏起源\n"<<"21点游戏为一款极具趣味性的牌类游戏,\n"
<<"最早出现在十六世纪,起源于法国,法语称:vingt-et-un \n"
<<"英国并广泛流传,如果玩家拿到黑心A和黑心J,就会\n"
<<"给予额外的奖励,英文的名字叫黑杰克(Blackjack)\n"
<<"游戏规则:\n"
<<"21点一般用到1-8副牌。庄家给每个玩家发两张明牌,牌面朝上面;\n"
<<"给自己发两张牌,一张牌面朝上(叫明牌),一张牌面朝下(叫暗牌)。\n"
<<"大家手中扑克点数的计算是:A ,K、Q、J 和 10 牌都算作 10 点。\n"
<<"可以随意要多少张。目的是尽量往21点靠,靠得越近越好,最好就是21点了。 \n"
<<"在要牌的过程中,如果所有的牌加起来超过21点,玩家就输了——叫爆掉(Bust)\n"
<<"游戏也就结束了。假如玩家没爆掉,又决定不再要牌了,这时庄家就把他的那\n"
<<"一般到17点或17点以上不再拿牌,但也有可能15到16点甚至12到13点就不再拿牌\n"
<<"张暗牌打开来。18到19点继续拿牌.假如庄家爆掉了,那他就输了。假如他没爆掉,\n"
<<"或者那么你就与他比点数大小,大为赢。一样的点数为平手,你可以把你的赌注拿\n"
<<"回来。如果拿牌拿到手中有5张牌,并且总数不到21点,那这种情况能压住一切牌型(\n"
<<"当然5张加起来一共21点更好),但某些玩法中不支持此规则。\n";
cout<<"/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n\n";
}
void Game::ShowPoke(char i,char j) //显示扑克,基类game
{
cout<<"┌───┐"< 21){
cout<_<)o ~~!!!"<>n;
cout<<"输入庄家姓名:";
cin>>name[n-1];
strcpy(name[n-1],"庄家");
for(i=0;i>name[i];
}
cout<<"输入最小的赌注:";
cin>>stake;
for(i=0;i>ch){
if(ch[0]!='y'&&ch[0]!='y'&&ch[0]!='N'&&ch[0]!='n')
cout<<"输入有误,请重新输入:";
else break;
}
if(ch[0]=='y'||ch[0]=='Y') return true;
else return false;
}
void Game:: Result(int r)
{
if(score[n-1]<=16&&r) {cout<<"庄家你的点数小于十六,需要发张牌\n"; GetCard(n-1,1);}
Show(0);
for(int i=0;i21) {
cout<<"玩家们赢了:"<21){ cout<score[n-1]){ cout<>e[i];
money[i]+=e[i];
}
cout<>temp){
if(temp<=money[i]&&temp>=stake){
currentOdds[i] += temp;
money[i]-= temp;
break;
}
cout<<"资金不足,重新输入:";
}
currentOdds[i]+=stake;
money[i] -= stake;
}
bool Game::GetCard(int i,int f)
{
int g,r,tmp;
if(!visit[i])
{
if(!f){
cout<=10) tmp=10;
else tmp=g+2;
num[i][hands[i]] = g;
color[i][hands[i]++] = r;
score[i] += tmp;
cout<=10) tmp=10;
else tmp=g+2;
num[1][hands[1]] = g;
color[1][hands[1]++] = r;
score[1] += tmp;
cout<>n>>flag>>stake;
for(int i=0;i>name[i]>>money[i];
}
infile.close();
cout<<"读取成功!"<>n>>flag>>stake;
// cout<>name[i]>>money[i];
}
infile.close();
cout<<"读取成功!"<>name[0];
strcpy(name[1],"电脑");
cout<<"游戏最小赌金为10"<21) break;
if(!game::computer()) g++;
if(score[0]>21) break;
cout<16){ cout<<"电脑加注10"<21) cout<<"玩家引爆了,玩家你输了"<21){ cout<<"电脑引爆了,恭喜你赢了"<21&&score[1]>21||score[1]==score[0]) {cout<<"平手"<
#include
#include //system color
#include
#include"game_class.h"
using namespace std;
extern int n,flag; //局外变量。
int main(int argc, char *argv[])
{
int f;
Game multi;
game smpile;
StartMenu ();
system("color 5");
while(1){
f=Menu ();
if(f==-1) break;
if(f==2){ flag=2; multi.begin(2); }
if(f==1){ flag=1; smpile.begin(1); }
if(f==0)
{
if(f==0&&!flag)
{
ifstream infile("Poke_inf.txt",ios::in);
if(!infile){
cerr<<"open error!"<>n>>flag;
if(flag==1) smpile.Continue();
else multi.Continue();
}
if(f&&flag==1) smpile.begin(0);
if(f&&flag==2) multi.begin(0);
}
if(f==3) multi.Help();
}
cout<<"是否保存游戏(y|n):";
if(multi.choice()){
if(flag==1) smpile.Save();
else multi.Save();
cout<<"文件保存成功!"<