前言
用c++写了一个类似与QQ宠物的养成类游戏,不过更像精武堂。
它是一个文字类的养成类游戏。
效果和代码
效果图如下:
/************************************************
项目名称: QQ宠物
项目介绍: 宠物养成类游戏
游戏说明: 你做为一个小企鹅,在爸爸的带领下
完成历练提高自己的修为。
************************************************/
#include<iostream>
#include<iomanip>
#include<windows.h>
#include<ctime>
#include <string>
#include<vector>
#include<algorithm>
#include <conio.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
using namespace std;
/************************************************/
/************************************************/
int i,j;//循环变量
char choice;//选择
int money=500;//金钱
int level=0;//等级
string value_father_name;//父亲的姓名
string value_daughter_name; //女儿的姓名
int value_birth_month;//女儿生日的月份
int value_birth_date; //女儿生日的日期
string value_daughter_constell;//女儿的星座
int value_daughter_baseinfo[5];//女儿的基本信息,体力,智力,魅力,道德,气质
string value_array_baseinfo_names[5]={"体力","智力","魅力","道德","气质"};
string constell_names[12][2]={
{"山羊座","水瓶座"},//一月
{"水瓶座","双鱼座"},//二月
{"双鱼座","白羊座"},//三月
{"白羊座","金牛座"},//四月
{"金牛座","双子座"},//五月
{"双子座","巨蟹座"},//六月
{"巨蟹座","狮子座"},//七月
{"狮子座","处女座"},//八月
{"处女座","天秤座"},//九月
{"天秤座","天蝎座"},//十月
{"天蝎座","射手座"},//十一月
{"射手座","山羊座"}//十二月
};
int constell_dates[]={20,19,21,20,21,22,23,23,23,24,23,22};
/************************************************/
/************************************************/
void people_menu()//游戏设置
{
system("title QQ宠物");
system("mode 40,25");
srand(time(NULL));
mciSendString("open 背景.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL); //循环播放音乐
}
void big_menu()//大的游戏菜单
{
system("cls");
cout<<"\n\n\n\n\n\n";
cout<<" 1、查看状态\n\n";
cout<<" 2、安排行程\n\n";
cout<<" 3、与父亲谈话\n\n";
cout<<" 4、存档\n\n";
cout<<" 5、读档\n\n";
cout<<" 6、帮助\n";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 背景.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL); //循环播放音乐
}
void game()//游戏加载界面
{
system("cls");
int i,j;
for(i=1;i<=29;i++)
{
system("cls");
cout<<"\n\n\n\n\n\n\n\n\n人物加载中";
for(j=1;j<=i;j++)
{
cout<<"-";
Sleep(5);
}
}
cout<<"\n\n 人物初始化完成\n";
printf("\a");
Sleep(350);
system("cls");
}
void color(WORD c);//控制输出字体属性(字体颜色)
void kongge(int sum);//循环打印空格
void chars(int sum);//循环打印制定字符(为了效果好一些我用了'#')
void print_linux();//打印Linux系统图标函数
void color(WORD c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);//设置控制台输出字体颜色值为c的值
}
//循环打印空格函数
void kongge(int sum)
{
while (sum--)//循环sum次
printf(" ");//打印空格
}
//循环打印字符
void chars(int sum)
{
while (sum--)//循环sum次
printf("#");//打印#号
}
void print_start()
{
system("time /t");
system("date /t");
cout<<endl;
/*第一行*/
kongge(17);
chars(6);//打印6个#号
printf("\n");//会车
/*第二行*/
kongge(15);
chars(11);
printf("\n");
/*第三行*/
kongge(14);
chars(13);
printf("\n");
/*第四行*/
kongge(14);
chars(2);
color(0x04);//红
chars(3);
color(0x07);//黑底白色字体
chars(2);
color(0x04);//白色
chars(3);
color(0x07);//黑底白色字体
chars(3);
printf("\n");
/*第五行*/
kongge(14);
chars(2);
color(0x04);//红色
chars(1);
color(0x07);//黑底白色字体
chars(1);
color(0x04);//红色
chars(1);
color(0x07);//黑底白色字体
chars(2);
color(0x04);//红色
chars(1);
color(0x07);//黑底白色字体
chars(1);
color(0x04);//红色
chars(1);
color(0x07);//黑底白色字体
chars(3);
printf("\n");
/*第六行*/
kongge(14);
color(0x07);//黑底白色字体
chars(4);
color(0x06);//黄色
chars(4);
color(0x07);//黑底白色字体
chars(5);
printf("\n");
/*第七行*/
kongge(14);
color(0x07);//黑底白色字体
chars(2);
color(0x06);//黄色
chars(8);
color(0x07);//黑底白色字体
chars(3);
printf("\n");
/*第八行*/
kongge(13);
chars(3);
color(0x08);//灰色
chars(2);
color(0x06);//黄色
chars(4);
color(0x08);//灰色
chars(2);
color(0x07);//黑色
chars(4);
printf("\n");
/*第九行*/
kongge(12);
color(0x07);//黑底白色字体
chars(2);
color(0x02);//绿色
chars(11);
color(0x07);//黑底白色字体
chars(4);
printf("\n");
/*第十行*/
kongge(11);
chars(2);
color(0x02);//绿色
chars(13);
color(0x07);//黑底白色字体
chars(4);
printf("\n");
/*第十一行*/
kongge(10);
chars(3);
color(0x02);//绿色
chars(13);
color(0x07);//黑底白色字体
chars(5);
printf("\n");
/*第十二行*/
kongge(9);
chars(3);
color(0x02);//绿色
chars(15);
color(0x07);//黑底白色字体
chars(5);
printf("\n");
/*第十三行*/
kongge(8);
chars(3);
color(0x02);//绿色
chars(16);
color(0x07);//黑底白色字体
chars(5);
printf("\n");
/*第十四行*/
kongge(7);
chars(4);
color(0x02);//绿色
chars(16);
color(0x07);//黑底白色字体
chars(5);
printf("\n");
/*第十五行*/
kongge(7);
chars(1);
color(0x06);//黄色
chars(2);
color(0x07);//黑底白色字体
chars(1);
color(0x02);//绿色
chars(14);
color(0x02);//黄色
chars(2);
color(0x07);//黑底白色字体
chars(4);
color(0x06);//黄色
chars(1);
printf("\n");
/*第十六行*/
kongge(7);
color(0x06);//黄色
chars(4);
color(0x07);//黑底白色字体
chars(1);
color(0x02);//绿色
chars(13);
color(0x06);//黄色
chars(3);
color(0x07);//黑底白色字体
chars(2);
color(0x06);//黄色
chars(2);
printf("\n");
/*第十七行*/
kongge(6);
color(0x06);//黄色
chars(5);
color(0x07);//黑底白色字体
chars(2);
color(0x02);//绿色
chars(10);
color(0x07);//黑底白色字体
chars(1);
color(0x06);//黄色
chars(9);
printf("\n");
/*第十八行*/
kongge(2);
color(0x06);//黄色
chars(9);
color(0x7);//黑底白色字体
chars(1);
color(0x02);//绿色
chars(9);
color(0x07);//黑底白色字体
chars(2);
color(0x06);//黄色
chars(11);
printf("\n");
/*第十九行*/
kongge(5);
color(0x06);//黄色
chars(8);
color(0x07);//黑底白色字体
chars(1);
color(0x02);//绿色
chars(6);
color(0x07);//黑底白色字体
chars(3);
color(0x06);//黄色
chars(10);
printf("\n");
/*第二十行*/
kongge(3);
color(0x06);//黄色
chars(11);
color(0x07);//黑底白色字体
chars(9);
color(0x06);//黄色
chars(6);
printf("\n");
/*第二十一行*/
kongge(9);
color(0x06);//黄色
chars(4);
color(0x07);//黑底白色字体
chars(11);
color(0x06);//黄色
chars(3);
printf("\n");
color(0x06);//黄色
}
void choise_1()
{
char a;
system("cls");
cout<<"\n\n你的信息: "<<endl;
cout<<"姓名: "<<value_daughter_name<<" 等级 : "<<level<<endl;
printf("\n");
cout<<"生日: 1988-"<<value_birth_month<<"-"<<value_birth_date<<endl;
printf("\n");
cout<<"星座: "<<value_daughter_constell<<endl;
printf("\n");
cout<<left;
for(i=0;i<5;i++)
{
cout<<value_array_baseinfo_names[i]<<" : "<<setw(2)<<value_daughter_baseinfo[i];
//计算实心方框的数量
int solidCount=value_daughter_baseinfo[i]/10;
if(value_daughter_baseinfo[i]%10>=5)//四舍五入
{
solidCount++;
}
for(j=0;j<10;j++)
{
if((j+1)<=solidCount)
cout<<"■";
else
cout<<"□";
}
cout<<endl<<endl;
}
cout<<"金钱:"<<money<<endl<<endl;
cout<<"按任意键回到主菜单";
a=getch();
system("cls");
}
void choise_2_1()
{
int i=0;
int w,d;
char a;
system("cls");
w=rand()%5+1;
d=rand()%2+1;
if(money>=60)
{
cout<<"\n\n经过一段时间的练武,你有了很大的进步"<<endl<<endl;
cout<<"\n属性发生了如下变化:"<<endl<<endl;
cout<<" 体力 : "<<value_daughter_baseinfo[0]<<"----->"<<value_daughter_baseinfo[0]+w;
printf("\n\n");
cout<<" 道德 : "<<value_daughter_baseinfo[3]<<"----->"<<value_daughter_baseinfo[3]+d;
printf("\n\n");
value_daughter_baseinfo[0]+=w;
value_daughter_baseinfo[3]+=d;
money=money-60;
cout<<"学习武术你花费了60金币"<<endl<<endl;
}
else
{
cout<<" \n\n\n你的金钱不足!\n";
}
cout<<"\n 按任何键返回上一菜单";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 1练武.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL);
a=getch();
system("cls");
}
void choise_2_2()
{
int i=0;
int n1,n2,n3,n4,n5;
char a;
system("cls");
n1=rand()%2+1;
n2=rand()%4+1;
n3=rand()%1+1;
n4=rand()%3+1;
n5=rand()%2+1;
if(money>=200)
{
cout<<"\n\n经过一段时间的学习,你有了很大的进步"<<endl<<endl;
cout<<"\n属性发生了如下变化:"<<endl<<endl;
cout<<" 体力 : "<<value_daughter_baseinfo[0]<<"----->"<<value_daughter_baseinfo[0]+n1;
printf("\n\n");
cout<<" 智力 : "<<value_daughter_baseinfo[1]<<"----->"<<value_daughter_baseinfo[1]+n2;
printf("\n\n");
cout<<" 魅力 : "<<value_daughter_baseinfo[2]<<"----->"<<value_daughter_baseinfo[2]+n3;
printf("\n\n");
cout<<" 道德 : "<<value_daughter_baseinfo[3]<<"----->"<<value_daughter_baseinfo[3]+n4;
printf("\n\n");
cout<<" 气质 : "<<value_daughter_baseinfo[4]<<"----->"<<value_daughter_baseinfo[4]+n5;
printf("\n\n");
value_daughter_baseinfo[0]+=n1;
value_daughter_baseinfo[1]+=n2;
value_daughter_baseinfo[2]+=n3;
value_daughter_baseinfo[3]+=n4;
value_daughter_baseinfo[4]+=n5;
money=money-200;
cout<<"上学你花费了200金币"<<endl<<endl;
}
else
{
cout<<" \n\n\n你的金钱不足!\n";
}
cout<<"\n 按任何键返回上一菜单";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 2背书.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL);
a=getch();
system("cls");
}
void choise_2_3()
{
int i=0;
int w,d;
char a;
system("cls");
w=rand()%4+1;
d=rand()%3+1;
if(money>=100)
{
cout<<"\n\n经过一段时间礼法的学习,你有了很大的进步"<<endl<<endl;
cout<<"\n属性发生了如下变化:"<<endl<<endl;
cout<<" 气质 : "<<value_daughter_baseinfo[4]<<"----->"<<value_daughter_baseinfo[4]+w;
printf("\n\n");
cout<<" 道德 : "<<value_daughter_baseinfo[3]<<"----->"<<value_daughter_baseinfo[3]+d;
printf("\n\n");
value_daughter_baseinfo[4]+=w;
value_daughter_baseinfo[3]+=d;
money=money-100;
cout<<"学习礼仪你花费了100金币"<<endl<<endl;
}
else
{
cout<<" \n\n\n你的金钱不足!\n";
}
cout<<"\n 按任何键返回上一菜单";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 3礼仪.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL);
a=getch();
system("cls");
}
void choise_2_4()
{
int i=0;
int w,d;
char a;
system("cls");
w=rand()%2+1;
d=rand()%3+1;
if(money>=80)
{
cout<<"\n\n出城修炼的一路,你斩妖除魔。"<<endl<<endl;
cout<<"\n属性发生了如下变化:"<<endl<<endl;
cout<<" 体力 : "<<value_daughter_baseinfo[0]<<"----->"<<value_daughter_baseinfo[0]+w;
printf("\n\n");
cout<<" 魅力 : "<<value_daughter_baseinfo[2]<<"----->"<<value_daughter_baseinfo[2]+d;
printf("\n\n");
value_daughter_baseinfo[0]+=w;
value_daughter_baseinfo[2]+=d;
money=money-80;
cout<<"修行的路上你花费了80金币"<<endl<<endl;
}
else
{
cout<<" \n\n\n你的金钱不足!\n";
}
cout<<"\n 按任何键返回上一菜单";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 4武打.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL);
a=getch();
system("cls");
}
void choise_2_5()
{
char a;
int b;
b=rand()%100+20;
system("cls");
cout<<"\n\n经过一段时间的打工-------"<<endl<<endl;
cout<<"你获得了"<<b<<"金钱"<<endl<<endl;
money=money+b;
cout<<"\n 按任何键返回上一菜单";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 5工作.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL);
a=getch();
system("cls");
}
void choise_2()
{
char a;
system("cls");
while(1)
{
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
printf("\n\n\n\n");
cout<<" 1.学习武艺"<<endl<<endl<<endl;
cout<<" 2.上私塾"<<endl<<endl<<endl;
cout<<" 3.学习礼法"<<endl<<endl<<endl;
cout<<" 4.出城修炼"<<endl<<endl<<endl;
cout<<" 5.打工赚钱"<<endl<<endl<<endl;
cout<<"请选择(按z回到主菜单):";
//cin<<choice;
//这里需要注意没钱的情况,强制打工
a=getch();
switch(a)
{
case '1':
choise_2_1();
break;
case '2':
choise_2_2();
break;
case '3':
choise_2_3();
break;
case '4':
choise_2_4();
break;
case '5':
choise_2_5();
break;
}
if(a=='z')
break;
system("cls");
}
system("cls");
}
void choise_3(string value_daughter_name)
{
int a;
int i=0;
char b;
system("cls");
a=rand()%100;
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 交谈.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL); //循环播放音乐
if(a<=30)
{
cout<<"\n\n\n\n父亲 : "<< value_daughter_name<<"你最近干的不错"<<endl<<endl;
cout<<" 谢谢父亲大人:你"<<endl<<endl;
cout<<"......."<<endl<<endl;
cout<<"\n在与父亲的谈话中你获得了100零花钱"<<endl;
money=money+100;
}
if(a>30&&a<=80)
{
cout<<"\n\n\n\n父亲 : "<< value_daughter_name<<"你要好好学习"<<endl<<endl;
cout<<" 知道了:你"<<endl<<endl;
cout<<"父亲 : "<< value_daughter_name<<"你的态度要端正"<<endl<<endl;
cout<<" 额额:你"<<endl<<endl;
cout<<"......."<<endl<<endl;
cout<<"\n你与父亲谈论的不愉快"<<endl<<endl;
cout<<"道德-5 气质-3"<<endl<<endl;
if(value_daughter_baseinfo[3]>=5)
value_daughter_baseinfo[3]-=5;
else
value_daughter_baseinfo[3]=0;
if(value_daughter_baseinfo[4]>=3)
value_daughter_baseinfo[4]-=3;
else
value_daughter_baseinfo[4]=0;
}
if(a>80)
{
cout<<"\n\n\n父亲 : "<< value_daughter_name<<"最近看了一首歌挺不错的。"<<endl<<endl;
cout<<"父亲 : "<<"23岁的九局下半转啊转,"<<endl<<endl;
cout<<"父亲 : "<<"我把帽子反戴还在期待逆转"<<endl<<endl;
cout<<" 谢谢父亲:你"<<endl<<endl;
cout<<" 我会努力学习的:你"<<endl<<endl;
cout<<"......."<<endl<<endl;
cout<<"你与父亲谈论的很开心愉快,谈论中悟出了人生哲理。"<<endl;
cout<<"全属性个加2点"<<endl;
for(i=0;i<5;i++)
{
value_array_baseinfo_names[i]+=1;
}
}
cout<<"\n 按任何键返回主菜单";
a=getch();
system("cls");
}
void choise_45()
{
char a;
system("cls");
cout<<"\n\n\n\n\n\n\n 维修中----------\n\n\n";
cout<<" 按任何键返回主菜单";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 维修.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL); //循环播放音乐
a=getch();
system("cls");
}
void choise_6()
{
char a;
system("cls");
cout<<"\n\n\n 游戏说明\n\n";
cout<<" 该游戏是一个养成类游戏,游戏的背景是\n\n";
cout<<"从1988年6月开始,你要通过操作企鹅来干一\n\n" ;
cout<<"些事情来提高企鹅的等级。\n\n\n";
cout<<"按任意键回到主菜单";
mciSendString("stop bkmusic", NULL, 0, NULL);
mciSendString("close bkmusic", NULL, 0, NULL);
mciSendString("open 打字.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic repeat", NULL, 0, NULL);
a=getch();
system("cls");
}
void birthday(int month,int value_birth_month,string value_father_name)
{
//判断本月是否是你的生日,触发彩蛋
int a;
char b;
a=rand()%300+200;
system("cls");
cout<<"\n\n 彩蛋情节触发\n"<<endl;
cout<<"本月是你的生日。\n\n你的父亲"<<value_daughter_name<<"先生给你送了"<<a<<"金币。\n"<<endl;
//根据用户的输入进行判断
cout<<"按任意键回到主菜单";
money=money+a;
b=getch();
system("cls");
}
void level_start()//等级判断函数
{
int i=0;
int temp=999999;
int a[5];
for(i=0;i<5;i++)
{
if(value_daughter_baseinfo[i]>0&&value_daughter_baseinfo[i]<10)
{
a[i]=1;
continue;
}
if(value_daughter_baseinfo[i]>=10&&value_daughter_baseinfo[i]<20)
{
a[i]=2;
continue;
}
if(value_daughter_baseinfo[i]>=20&&value_daughter_baseinfo[i]<32)
{
a[i]=3;
continue;
}
if(value_daughter_baseinfo[i]>=32&&value_daughter_baseinfo[i]<48)
{
a[i]=4;
continue;
}
if(value_daughter_baseinfo[i]>=48&&value_daughter_baseinfo[i]<66)
{
a[i]=5;
continue;
}
if(value_daughter_baseinfo[i]>=66&&value_daughter_baseinfo[i]<96)
{
a[i]=6;
continue;
}
if(value_daughter_baseinfo[i]>=96&&value_daughter_baseinfo[i]<120)
{
a[i]=7;
continue;
}
if(value_daughter_baseinfo[i]>=120)
{
a[i]=8;
continue;
}
}
for(i=0;i<5;i++)
{
if(a[i]<temp)
temp=a[i];
}
level=temp;
}
/************************************************/
int main(void)
{
char a;
people_menu();//设置菜单
print_start();//游戏片头
cout<<"\n 按任意键进入游戏!";
a=getch();
system("cls");
system("color 03");
system("title 游戏中");
value_daughter_baseinfo[0]=rand()%10+1;//体力
value_daughter_baseinfo[1]=rand()%10+3;//智力
value_daughter_baseinfo[2]=rand()%10+6;//魅力
value_daughter_baseinfo[3]=rand()%10+5;//道德
value_daughter_baseinfo[4]=rand()%10+6;//气质
cout<<"\n\n\n\n\n\n";
cout<<" 父亲的姓名 :";
cin>>value_father_name;
cout<<endl;
cout<<" 你的姓名 :";
cin>>value_daughter_name;
cout<<endl;
cout<<" 你的生日(月) :";
cin>>value_birth_month;
cout<<endl;
cout<<" 你的生日(日) :";
cin>>value_birth_date;
cout<<endl;
value_daughter_constell=constell_names[value_birth_month-1][value_birth_date/constell_dates[value_birth_month-1]];
//game();//游戏加载
//游戏从1988年6月开始
for(int year=1988;year<=1988 + 9;year++)
{
for(int month = (year == 1988)? 6:1;month<=12;month++)
{
if(month == value_birth_month)
{
birthday(month,value_birth_month,value_father_name);
}
big_menu();//显示游戏主菜单
choice=getch();//用户的选择
switch(choice)
{
case '1'://查看状态
level_start();
choise_1();
break;
case '2'://安排行程:一个月最多三次行程
{
choise_2();
break;
}
case '3':
choise_3(value_daughter_name);
break;
case '4': //存档
choise_45();
break;
case '5': //读档
choise_45();
break;
case '6': //帮助
choise_6();
break;
default:
system("cls");
break;
}
}
}
//1.为父女取名字
//2.为女儿录入初始信息
//根据女儿的星座,设置游戏的基本参数(体力、智力、魅力、道德、气质)
//3. 开始游戏大循环
//4.设置各项参数,判断游戏结果
return 0;
}