C++小游戏《末日之战1:新生》1.12.31823.132
啊哈哈哈哈游戏来喽~~~
五一作业有点多,没来得及更新
这次博客是我消耗了10根头发才写成的
新增了凋零风暴的剧情,如果想挑刺的可以在面板处按0
进入管理员模式,就可以跳过凋零风暴章节限制了
其他更新内容请在游戏中查看!!!
/*末日之战1:新生*/
/*作者:yanxinchenji*/
/*如需转载请标明出处!*/
/*存档功能尚在完善,末日之战2一定出!*/
/*编译环境:dev-C++*/#include<algorithm>
#include<cmath>
#include<vector>
#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
#include<windows.h>
#include<conio.h>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;/*****全局的*****/
long long things[10000];
/*
1 HP 2 XP 3 atk //4 episode 5 water
6 food 7 体力 8 money 9 技能 10 name
11 defense 12 jiujibao 185 存档编号
*/
int sudu=80;
int money=things[8];//重新定义一个,免得武器店和药店报错
string name;
int episodes;
string filename[10]={"空存档","空存档","空存档","空存档","空存档","空存档","空存档","空存档","空存档","空存档"};//存档名,如果没有改变则为“空存档”/*********存档函数*********/
void w1();
void w2();
void w3();
void w4();
void w5();//一堆输出点
void w6();
void w7();
void w8();
void w9();
void r1();
void r2();
void r3();
void r4();
void r5();//一堆读入点
void r6();
void r7();
void r8();
void r9();
void mrf();//save.txt的读取
void mwf();//save.txt的存档
void Write_File();//负责调用子存档函数
void Read_File();//负责调用子读取函数 /*功能函数*/
void gs();
void g();
void hidden();
void Sout(string n);
void gotoxy(int x,int y);
int random(int n,int m);
void cls();
void about();
int zhangjieshu;
void init(); /*菊清函数*/
void juqing();
void end1();/*游戏页面函数*/
void mianban();//定义干什么(省流)
string episode[10000];//1初出茅庐2背水一战3休养生息4凋零风暴
void welcome();
int main();
string where[10000];//1武器店2药店3家4状态
void home();
string guaiwu[123];//1小怪物2大怪物3boss4凋零风暴
void fight();
void diaolingfengbao();
void fightmmain();
void daguai();
void xiaoguai();
void boss();
/*升级(完善中)*/
const unsigned long long sj[]=//升级所需经验值
{
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 22 0,0,100,300,500,800,1500,2122,4500,6821,8933,13382,20091,38392,59183,70003,89312,100033,110344,130953,150099,169821,193831,229183,
// 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 500000,867132,1102933,1491839,1783021,2092103,2819382,3857192,4561738,5637139,7003928,8563729,10000000,10092819,11928372,12837291,14838279,16738291,18973820,
// 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 20093819,23849577,25860392,28039281,3003920,3120392,3302910,3939201,4029102,4392018,4592018,4672103,4800928,5028102,5193029,5392010,5503921,5872810,6839201,
// 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 7293829,7495820,7888930,8139002,8873029,9567291,10093829,11293029,13930295,15930281,169302810,18392910,22839020,28739201,38392819,50009329,74892396,99837281,
// 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 103958372,113837293,136573829,157683920,175837292,183726195,200999887,218376859,239837261,254637289,267392019,289383910,309201839,339281039,358372918,381039283,
// 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 457362821,478392018,500938271,536839201,556738291,598372918,620999382,647382019,667382010,683920133,708310999,738291839,756372819,778837261,819382910,837291038,
// 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 1000000000,1093729183,1128372919,1273829102,1303928193,13283920193,135869302,142637291,144738291,145637289,149392019,151839201,1553291333,156839201,158382919,160993029,
// 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 1618392918,1638392819,1657382918,1689392819,1700900300,17100000000,1728393820,1759382910,1783929182,1800392022,1819310393,1827392913,1858392918,1889380130,1918038286,1938028284,
// 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 1958302882,1978928388,2009380291,2039209288,2048983828,20673802838,2083920788,210989382,212980838,214008000,2147483647,225903988,2500993021,2930993822,3259586666,3693829100,
// 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 4193857766,4894827188,5693028188,6839281999,7503929188,79302918383,9603929183,1059837772,12968392005,15382993005,16392159388,18396198382,21325938292,24593203928,26832392012,//下面为程序自动生成 38530052279053,33358029748,39696055400,43665660940,51962136518,59236835630,66937624261,77647644142,91624220087,106284095300,122226709595,139338448938,160239216278,177865530068,199209393676,227098708790,249808579669,294774124009,338990242610,376279169297,440246628077,488673757165,566861558311,657559407640,762768912862,884811938919,1008685610367,1129727883611,1276592508480,1493613234921,1642974558413,1840131505422,2189756491452,2408732140597,2745954640280,3267686021933,3855869505880,4357132541644,4967131097474,5712200762095,6797518906893,7885121931995,8673634125194,9887942902721,11173375480074,12514180537682,14891874839841,16827818569020,19015434982992,21867750230440,24054525253484,27181613536436,30715223296172,35936811256521,40967964832433,45474440964000,51386118289320,61149480764290,71544892494219,85138422068120,99611953819700,110569268739867,122731888301252,139914352663427,166498079669478,183147887636425,206957113029160,229722395462367,261883530827098,298547225142891,349300253417182,415667301566446,461390704738755,539827124544343,642394278207768,706633706028544,833827773113681,967240216811870,1092981444997413,1256928661747025,1420329387774138,1590768914307034,1877107318882300,2121131270336999,2481723586294289,2903616595964318,3223014421520393,3642006296318044,4079047051876209,4731694580176402,5441448767202862,6094422619267206,7130474464542631,8413959868160304,9423635052339540,11025653011237262,12679500962922852,15088606145878194,16899238883383578,19772109493558788,22540204822657020,26146637594282144,30330099609367288,33666410566397688,37033051623037456,42588009366493072,49827970958796896,57302166602616432,65897491593008896,74464165500100048,84144507015113056,95083292927077760,110296619795410208,125738146566767632,139569342689112064,157713357238696640,187678895114048992,213953940430015840,254605189111718848,295342019369593856,336689902081336960,370358892289470656,429616315055785984,506947251765827456,562711449460068480,669626624857481472,770070618586103680,847077680444713984,948727002098079616,1110010592454753152,1243211863549323520,1404829405810735616,1431086375945250560,1446971027840490240,1494018951557873152,1518714164038880000,1592428131188393984,1630900628817673728,1810299697987617792,1824965224029160192,1877743262415855616,1974937311041138432,2007712974518568192,2104325350214072320,2277593219013369088,2389212896748011520,2402552078753502208,2442051050667406336,2526209225503725568,2644886891827077120,2752031650881759744,2925328324759292928,3082952541741774848,3114801490694014464,3272962213933260800,3448520616728823808,3562378621596667904,3614580665056815104,3715541270040010240,3829626753671020544,3881950815100641792,4066119147758477312,4100812022884206080,4264982704384962048,4393977614875269632,4552320047186110976,4729663571374253056,4748539979845751808,4817922013471148032,4978958553478782976,5037722159087005696,5105887941592544256,5153669446809650176,5158992743549910016,5216864161138915328,5313692663972759552,5476127048895844352,5614437613770797056,5790912181349713920,5874510199086896128,6009584831237059584,6108877048861882368,6286137713971544064,6369582544521513984,6402682722514263040,6504774754431067136,6666897655207197696,6846854075068702720,6883076441892843520,6971175851971602432,7024803267562148864,7173881272107077632,7225138449090473984,7346607341013281792,7490330458986493952,7651300351116490752,7800145196587322368,7863362331652847616,8014695660294729728,8134268892447566848,8247604581892128768,8334495277132959744,8394519971509001216,8462948123097688064,8525747737633649664,8598595290495365120,8756588869792719872,8788140778443200512,8902971217834443776,8934328782589128704,9084111032814346240,
};/*凋零风暴学习string*/
const string study[5]=
{"凋零风暴的血量与攻击力都很高,没事不要惹它","凋零风暴的防御力很低,一把铁剑就能干过它","凋零风暴的弱点是下半身,建议用刺击与砍击","先把防御力提升到1000再打凋零风暴","凋零风暴被打完半血就无法再用弓箭攻击了"
};
//凋零风暴剧情部分
const string nsStory[9]=
{//Nither "哼哼,这些年来还没有几个人打过我的,怎么又来了一个送死的蠢货",//1"好,那就来吧!",//2"哼,你算老几啊,能打的过我吗?","告诉你吧,有创世神的帮助,我是不会死的!!!","好啊,但是你这个游戏也太危险了,一不小心你就会死的哦~",//Player//2"?敢说我是蠢货?看看我打不打的过你就完了!","那又怎么样!我可是有备而来!",//1"真正的勇士从来都是不说废话的!来吧!",//以下请等待2.12800.315 "吗" }; /********函数定义********/
void mrf()//储存存档名称的存档
{ifstream fin("save.YXCJ");for(int i=1;i<=9;i++)fin>>filename[i];fin.close();
}
void mwf()
{ofstream fout("save.YXCJ");for(int i=1;i<=9;i++)fout<<filename[i]<<'\n';fout.close();
}void w1()
{ofstream fout("file2.b");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w2()
{ofstream fout("file2.b");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w3()
{ofstream fout("file3.c++");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w4()
{ofstream fout("file4.d");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w5()
{ofstream fout("file5.e");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w6()
{ofstream fout("file6.f");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w7()
{ofstream fout("file7.g");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w8()
{ofstream fout("file8.h");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void w9()
{ofstream fout("file9.i");fout<<name<<endl;for(int i=0;i<2000;i++)fout<<things[i]<<' ';fout<<sudu<<'\n';fout<<money<<endl;fout<<episodes<<endl;fout.close();
}
void Write_File()
{if (things[192]==0)return;switch(things[185]){ case 1:w1();break;case 2:w2();break;case 3:w3();break;case 4:w4();break;case 5:w5();break;case 6:w6();break;case 7:w7();break;case 8:w8();break;case 9:w9();break;default:cout<<things[185]<<"[error] 404";Sleep(5000);exit(0);}
}
void r1()
{ifstream fin("file1.a");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r2()
{ifstream fin("file2.b");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r3()
{ifstream fin("file3.c++");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r4()
{ifstream fin("file4.d");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r5()
{ifstream fin("file5.e");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r6()
{ifstream fin("file6.f");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r7()
{ifstream fin("file7.g");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r8()
{ifstream fin("file8.h");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void r9()
{ifstream fin("file9.i");fin>>name;for(int i=0;i<2000;i++)fin>>things[i];fin>>sudu;fin>>money;fin>>episodes;fin.close();
}
void Read_File()
{switch(things[185]){case 1:r1();break;case 2:r2();break;case 3:r3();break;case 4:r4();break;case 5:r5();break;case 6:r6();break;case 7:r7();break;case 8:r8();break;case 9:r9();break;default:cout<<"[error] 找不到存档";Sleep(5000);exit(0);}
}void cls()
{system("cls");
}void hidden()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo);
CursorInfo.bVisible = false;
SetConsoleCursorInfo(handle, &CursorInfo);
}void gotoxy(int y,int x)
{COORD coord; coord.X=x; coord.Y=y;HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(a,coord);
}void gs()
{hidden();gotoxy(45,80);cout<<"按下任意键继续_";_getch();system("cls");
}void g()
{_getch();
}void init()
{things[1]=100;things[2]=0;things[3]=10;things[5]=100;things[6]=100;things[7]=100;things[11]=5;money=10;episodes=0;
}void Sout(string n)//减速输出,挺有用的
{for(int i=0;i<n.size();i++){cout<<n[i];Sleep(sudu);if (kbhit())if (getch()=='\n'){cout<<n.substr(i+1,n.size()-i);return;}}
}int random(int n,int m)//产生一个随机数n~m
{return rand()%(m-n+1)+n;
}void about()//公告
{cls();cout<<"------------------------------------------------\n";cout<<" 末日之战公告\n";cout<<"游戏版本:build1.12.31823.132\n";cout<<"游戏作者:沉迷学习的YXCJ\n";cout<<"更新内容:\n新增活动'末日新生',打败凋零风暴可获得50000000金币与1000000000XP\n修复已知bug,增强游戏稳定性\n官方宣布将在1.3.23124.114版本更新存档功能!\n";cout<<"末日新生活动时间:2022年4月30日--2022年8月30日\n";cout<<"------------------------------------------------\n";gs();
}void Die()
{cls();cout<<"你\t死\t了\t!";gs();cout<<"血量恢复至50,按1继续,按e关机,按其他退出";char d;d=_getch();switch(d){case '1':things[1]=50;break;case 'e':system("Shutdown -H");break;default:exit(0);break;}
}/*游戏界面函数定义*/void diaolingfengbao()
{long long nsthings[1000];/*1HP 2Defense 3ATK 4技能 *///init nsnsthings[1]=5000;nsthings[2]=2500;nsthings[3]=2000;//Fightif(things[1]<=0){return diaolingfengbao();}things[7]-=50;int i=1,n=0,l=1,taopao,cg;int lengque=0; char r,w; srand(static_cast<unsigned int >(time(0))) ; int randomNumber=rand(); cout<<"\n凋零风暴:"; Sout(nsStory[0]);cout<<endl; cout<<"1."<<nsStory[5]<<endl;cout<<"2."<<nsStory[7]<<endl;Sout("请选择>\n");char y;cin>>y;switch(y){case '2':cout<<"\n凋零风暴:"; Sout(nsStory[1]);gs();break;case '1':cout<<"\n凋零风暴:"; Sout(nsStory[2]);Sout(nsStory[3]);cout<<"1."<<nsStory[6]<<endl;Sout("请选择>");_getch();cout<<"\n凋零风暴:"; Sout(nsStory[4]);gs();break;default:cout<<"凋零风暴:"; Sout("小子,想什么呢");gs();}cout<<"\n你面对的是凋零风暴,是否迎战(y/n)\n";r=_getch();if(r=='y'){int f=0;while(things[1]>0&&nsthings[1]>0&&l!=123&&i<=50){int jineng=random(1,10);if (jineng==1||jineng==3||jineng==5||jineng==7){Sout("凋零风暴不讲武德,使用了技能\n让你扣了250滴血\n");things[1]-=250;cout<<"你还剩"<<things[1]<<"滴血"; gs();if (things[1]<=0){Die();}}cout<<"第"<<i<<"回合"<<endl;cout<<"你的生命:"<<things[1]<<endl;cout<<"凋零风暴生命:"<<nsthings[1]<<endl;cout<<"输入1攻击(造成攻击(你的伤害-怪的伤害),防御减半)"<<endl;cout<<"输入2防御(不造成攻击,防御*2)"<<endl; cout<<"输入3使用技能(无敌,造成敌方等级*20伤害,boss:500点伤害)"<<endl;cout<<"输入4逃跑(20%几率,逃跑失败也要减少血(无视防御),实在打不过撑过50回合自动结束)"<<endl; cout<<"输入5使用战斗急救包!!!"<<endl; taopao=(randomNumber% 5)+1;cin>>l;if(lengque>0&&f==1){lengque--; } switch(l){case 1:if((things[11]/2)<nsthings[3]){things[1]-=nsthings[3]-things[11]/2; } if(things[3]>nsthings[2] ) {nsthings[1]-=things[3]-nsthings[2]; } i++; f=1;break; case 2: if(things[11]*2<nsthings[3]){things[1]-=nsthings[3]-things[11]*2; } i++; f=1;break;case 3:if(lengque==0){nsthings[1]-=1*20;lengque=5;i++; break; } cout<<"冷却中剩余"<<lengque<<"回合"<<endl; f=0;break;case 4:if(taopao=3){cout<<"逃跑成功!!!"<<endl; l=123;} f=1;break;case 5:f=1;if(things[12]>0){cout<<"使用成功!!!"<<endl; things[12]--;things[1]+=50;i++; } break; } }if(things[1]<=0){cout<<"你死了"<<endl;Sleep(1000);Die(); return daguai(); }if(nsthings[1]<=0){cout<<"你打败了"<<"凋零风暴"<<endl;cout<<"奖励金币"<<"50000000"<<"$"<<endl;cout<<"奖励经验"<<"100000000000"<<endl;money+=50000000; things[2]+=100000000000; gs();end1();}}else{cout<<"你已逃跑"<<endl; } }void fight()
{;
}void wuqidian()
{int i=1,n=0,l=1;char w,r;while(l) {char l;cout<<"武器店规则:伤害不能叠加!!!\n例如:假如你目前伤害50 ,购买木剑后,伤害不会+40,而是替换成40"<<endl;cout<<"你目前伤害:"<<things[3]<<"目前防御:"<<things[11]<<"你的金币为:"<<"$"<<money<<endl;Sleep(250);cout<<"欢迎来到 武器店!"<<endl;cout<<"1、买木剑($10加40攻击力)"<<endl;cout<<"2、买石剑($50加60攻击力)"<<endl;cout<<"3、买铁剑($100加120攻击力)"<<endl;cout<<"4、买钻石剑($150加180攻击力)"<<endl;cout<<"5、买木盾($200加100防御力)"<<endl;cout<<"6、买铁盾($400加200防御力)"<<endl;cout<<"7、买皮革套($500加250防御力)"<<endl;cout<<"8、买铁制长柄斧($500加300攻击力)"<<endl;cout<<"9、买钻石长柄斧($200加200攻击力)"<<endl;cout<<"n、买下界合金剑($90000加1500攻击力)"<<endl;cout<<"0、离开武器店"<<endl;l=_getch();switch(l) {case '1' :if(money<10) {cout<<"你的钱不够"<<endl;gs();break;} else {cout<<"购买成功!"<<endl;//钱足够时返回Truethings[3]=40;money-=10;cout<<"你的伤害现在为"<<things[3]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '2' :if(money<50) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {cout<<"购买成功!"<<endl;things[3]=60;money-=50;cout<<"你的伤害现在为"<<things[3]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '3' :if(money<100) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else{cout<<"购买成功!"<<endl;things[3]=120;money-=100;cout<<"你的伤害现在为"<<things[3]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '4' :if(money<150) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {cout<<"购买成功!"<<endl;things[3]=180;money-=150;cout<<"你的伤害现在为"<<things[3]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '5' :if(money<200) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {cout<<"购买成功!"<<endl;things[11]=100;money-=200;cout<<"你的防御现在为"<<things[11]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '6':if(money<400) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {things[11]=200;money-=500;cout<<"你的防御现在为"<<things[11]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '7':if(money<500) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {things[11]=250;money-=500;cout<<"你的防御现在为"<<things[11]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '8':if(money<500) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {things[3]=300;money-=500;cout<<"你的攻击现在为"<<things[3]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '9':if(money<200) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {things[3]=200;money-=200;cout<<"你的攻击现在为"<<things[3]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case 'n':if(money<90000) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasegs();break;} else {things[3]=1500;money-=90000;cout<<"你的攻击现在为"<<things[3]<<endl;cout<<"-------------------------------------------------------------------------------\n" ;gs();break;}case '0':break;default:cout<<"看清楚."<<endl;gs();break;}cls();break;}
}void yaopindian() {int i=1,n=0,l=1;char w,r;while(l) {cout<<"-------------------------------------------------------------------------------\n" ;cout<<"欢迎来到 药品店!"<<endl;cout<<"你的金币为:"<<"$"<<money<<endl;cout<<"1、粗制的药水($50加50血)"<<endl;cout<<"2、治疗药水 ($100加100血)"<<endl;cout<<"3、治疗药水II($150加200血)"<<endl;cout<<"4、再生药水 ($200加300血)"<<endl;cout<<"5、再生药水II ($500加300血,50点防御)"<<endl;cout<<"6、神龟药水 ($700加400血,50点防御,100点攻击(+100))"<<endl;cout<<"7、急救包 ($50加50血 战斗时使用)"<<endl;cout<<"0、离开药品店"<<endl;l=getch();switch(l) {case '1' :if(money<50) {cout<<"你的钱不够"<<endl;break;} else {cout<<"购买成功!"<<endl;things[1]+=50;money-=50;cout<<"-------------------------------------------------------------------------------\n" ;break;}case '2' :if(money<100) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasebreak;} else {cout<<"购买成功!"<<endl;things[1]+=100;money-=100;cout<<"-------------------------------------------------------------------------------\n" ;break;}case '3' :if(money<150) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasebreak;} else{cout<<"购买成功!"<<endl;things[1]+=200;money-=150;cout<<"-------------------------------------------------------------------------------\n" ;break;}case '4' :if(money<200) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasebreak;} else {cout<<"购买成功!"<<endl;things[1]+=300;money-=200;cout<<"-------------------------------------------------------------------------------\n" ;break;}case '5' :if(money<500) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasebreak;} else {cout<<"购买成功!"<<endl;things[1]+=300;things[11]+=50;money-=500;cout<<"-------------------------------------------------------------------------------\n" ;break;}case '6':if(money<700) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasebreak;} else {things[1]+=400;things[11]+=50;things[3]+=100;money-=700;cout<<"-------------------------------------------------------------------------------\n" ;break;}case '7':if(money<50) {cout<<"你的钱不够"<<endl;//钱不够时返回Flasebreak;}money-=50;things[12]++;cout<<"购买成功!"<<endl;cout<<"-------------------------------------------------------------------------------\n" ;break;case '0':break;default:cout<<"看清楚"<<endl;cout<<"-------------------------------------------------------------------------------\n" ;break;}cls();break;}}void juqing()
{/*开始菊琴*/if (episodes==0){cls();Sout("这是一个四面都是森林的小镇\n你是这里的居民\n这里的人都生活的很幸福\n但是,从连着下暴雨一个月之后\n人们就开始重复着一句话:明天和意外不知道哪个先来\n");gs();Sout("正如人们说的,这一天,创世神YXCJ不知发了什么神经\n往你们小镇投放了凋零风暴\n从此,这里野兽横行,凋零风暴也无时无刻地骚扰小镇\n");gs();Sout("有一天,人们实在是受不了了\n大家就开始想着逃离小镇\n于是,人们开启了流浪之旅");gs();Sout("你奉命保护人烟稀少的小镇,以免逃亡中途怪物袭击小镇");Sleep(1*1000);cls();sudu=200;Sout("镇长:请问勇士尊姓大名?\n");cin>>name;Sout("镇长:");Sout(name);Sout(",希望你能守护好我们的小镇!");gs(); episodes+=1;}/*章节*/if (episodes==1){sudu=300;gotoxy(30,70);Sout("第\t一\t章");gotoxy(32,70);Sout("初\t出\t茅\t庐");gotoxy(31,70);Sout("Episode 1\n");gotoxy(33,70);Sout("Fledling\n");things[26]=1;gs();mianban(); }if (episodes==2){sudu=300;gotoxy(30,70);Sout("第\t二\t章");gotoxy(32,70);Sout("背\t水\t一\t战");gotoxy(31,70);Sout("Episode 2\n");gotoxy(33,70);Sout("Burn one's bridges\n");gs();things[1]+=50;things[3]+=20;things[11]+=10;mianban();}if (episodes==3){sudu=300;gotoxy(30,70);Sout("第\t三\t章");gotoxy(32,70);Sout("休\t养\t生\t息");gotoxy(31,70);Sout("Episode 3\n");gotoxy(33,70);Sout("Recuperate\n");gs();mianban();}if (episodes==4){sudu=300;gotoxy(30,70);Sout("第\t四\t章");gotoxy(32,70);Sout("决\t战");gotoxy(31,70);Sout("Episode 4\n");gotoxy(33,70);Sout("Decisive battle\n");gs();mianban();}
}/*怪物部分*/
void xiaoguai()
{if(things[1]<=0){return xiaoguai();}things[7]-=20;int i=1,n=0,l=1,taopao,cg,lengque=0;char r,w; srand(static_cast<unsigned int >(time(0))) ; int randomNumber=rand(); int xdj=(randomNumber% 5)+1;cg=(randomNumber% 5)+1;int xhp=xdj*100;int xsh=xdj*20;int xjb=xdj*10;int xfy=xdj*5; cout<<"你面对的是"<<xdj<<"级小怪,是否迎战(y/n)"<<endl;cin>>r;if(r=='y'){int f=0; while(things[1]>0&&xhp>0&&l!=123&&i<=15){cout<<"第"<<i<<"回合"<<endl;cout<<"你的生命:"<<things[1]<<endl;cout<<"小怪生命:"<<xhp<<endl;cout<<"输入1攻击(造成攻击(你的伤害-怪的伤害),防御减半)"<<endl;cout<<"输入2防御(不造成攻击,防御*2)"<<endl; cout<<"输入3使用技能(无敌,造成敌方等级*20伤害,boss:500点伤害)"<<endl; cout<<"输入4逃跑(20%几率,逃跑失败也要减少血(无视防御),实在打不过撑过15回合自动结束)"<<endl; cout<<"输入5使用战斗急救包!!!"<<endl; cin>>l;if(lengque>0&&f==1){lengque--; } switch(l){case 1:if((things[11]/2)<xsh){things[1]-=xsh-things[11]/2; } if(things[3]>xfy ) {xhp-=things[3]-xfy; } i++; f=1; break; case 2: if(things[11]*2<xsh){things[1]-=xsh-things[11]*2; } i++; f=1; break;case 3:if(lengque==0){xhp-=xdj*20;lengque=5;i++; break; } cout<<"冷却中剩余"<<lengque<<"回合"<<endl; f=0;break;case 4:if(taopao=1){cout<<"逃跑成功!!!"<<endl; l=123;} f=1; break; case 5:if(things[12]>0){cout<<"使用成功!!!"<<endl; things[12]--;things[1]+=50;i++; } f=1; break; } }if(things[1]<=0){cout<<"你死了"<<endl;Sleep(1000);Die(); return xiaoguai(); }if(xhp<=0){cout<<"你打败了"<<xdj<<"级小怪"<<endl;cout<<"奖励金币"<<xjb<<"$"<<endl;money+=xjb; cout<<"奖励经验"<<xdj*10<<endl;money+=xdj*10; }}else{cout<<"你已逃跑"<<endl; } }
void daguai()
{if(things[1]<=0){return daguai();}things[7]-=20; int i=1,n=0,l=1,taopao,cg;int lengque=0; char r,w; srand(static_cast<unsigned int >(time(0))) ; int randomNumber=rand(); int ddj=(randomNumber% 5)+6;int dhp=ddj*100;int dsh=ddj*20;int djb=ddj*10;int dfy=ddj*5; cout<<"你面对的是"<<ddj<<"级大怪,是否迎战(y/n)"<<endl;cin>>r;if(r=='y'){int f=0;while(things[1]>0&&dhp>0&&l!=123&&i<=20){cout<<"第"<<i<<"回合"<<endl;cout<<"你的生命:"<<things[1]<<endl;cout<<"大怪生命:"<<dhp<<endl;cout<<"输入1攻击(造成攻击(你的伤害-怪的伤害),防御减半)"<<endl;cout<<"输入2防御(不造成攻击,防御*2)"<<endl; cout<<"输入3使用技能(无敌,造成敌方等级*20伤害,boss:500点伤害)"<<endl;cout<<"输入4逃跑(20%几率,逃跑失败也要减少血(无视防御),实在打不过撑过20回合自动结束)"<<endl; cout<<"输入5使用战斗急救包!!!"<<endl; taopao=(randomNumber% 5)+1;cin>>l;if(lengque>0&&f==1){lengque--; } switch(l){case 1:if((things[11]/2)<dsh){things[1]-=dsh-things[11]/2; } if(things[3]>dfy ) {dhp-=things[3]-dfy; } i++; f=1;break; case 2: if(things[11]*2<dsh){things[1]-=dsh-things[11]*2; } i++; f=1;break;case 3:if(lengque==0){dhp-=ddj*20;lengque=5;i++; break; } cout<<"冷却中剩余"<<lengque<<"回合"<<endl; f=0;break;case 4:if(taopao=3){cout<<"逃跑成功!!!"<<endl; l=123;} f=1;break;case 5:f=1;if(things[12]>0){cout<<"使用成功!!!"<<endl; things[12]--;things[1]+=50;i++; } break; } }if(things[1]<=0){cout<<"你死了"<<endl;Sleep(1000);return daguai(); }if(dhp<=0){cout<<"你打败了"<<ddj<<"级大怪"<<endl;cout<<"奖励金币"<<djb<<"$"<<endl;cout<<"奖励经验"<<ddj*10<<endl;money+=djb; things[2]+=ddj*10; }}else{cout<<"你已逃跑"<<endl; } }
void boss()
{int i=1,n=0,l=1,taopao,cg;int lengque=0;srand(static_cast<unsigned int >(time(0))) ; int randomNumber=rand(); int bossHP=5000;int bossSH=700;int bossfy=500;cout<<"你面对的是"<<"BOSS"<<endl;int f=0;while(things[1]>0&&bossHP>0&&l!=123){cout<<"第"<<i<<"回合"<<endl;cout<<"你的生命:"<<things[1]<<endl;cout<<"BOSS生命:"<<bossHP<<endl;cout<<"输入1攻击(造成攻击(你的伤害-怪的伤害),防御减半)"<<endl;cout<<"输入2防御(不造成攻击,防御*2)"<<endl; cout<<"输入3使用技能(无敌,造成敌方等级*20伤害,boss:500点伤害)"<<endl;cout<<"输入4逃跑(10%几率,逃跑失败也要减少血(无视防御),实在打不过撑过30回合自动结束)"<<endl; cout<<"输入5使用战斗急救包!!!"<<endl; taopao=(randomNumber%10)+1;cin>>l;if(lengque>0&&f==1){lengque--; } switch(l){case 1:f=1; if((things[11]/2)<bossSH){things[1]-=bossSH-things[11]/2; } if(things[3]>bossfy ) {bossHP-=things[3]-bossfy; } i++; break; case 2: f=1;if(things[11]*2<bossSH){things[1]-=bossSH-things[11]*2; } i++; break;case 3:f=1;if(lengque==0){bossHP-=500;lengque=5;i++; break; } cout<<"冷却中剩余"<<lengque<<"回合"<<endl; f=0;break;case 4:f=1;if(taopao=1){cout<<"逃跑成功!!!"<<endl; l=123;} break; case 5:f=1;if(things[12]>0){cout<<"使用成功!!!"<<endl; things[12]--;things[1]+=50;i++; } break;} }if(things[1]<=0){cout<<"你死了"<<endl;Sleep(1000);return boss(); }if(bossHP<=0){cout<<"你打败了BOSS"<<endl;bossHP=0; }} /*第二主函数*/
void mianban()
{if (things[2]>=300&&things[2]<1500){episodes=2;juqing();}if (things[2]>=1500&&things[2]<5000){episodes=3;juqing();}if (things[2]>=5000&&things[2]<=1000000){episodes=4;juqing();} while(1){sudu=80;gotoxy(0,0);printf("-----------------------------------------------------\n");printf(" 选择行动 \n");printf("1、与NPC战斗 2、行径 3、干活 \n");printf("4、末日新生(第四章开放) 5、查看状态\n");printf("6、公告 7、睡觉\n");printf("-----------------------------------------------------\n");gotoxy(6,0);Sout("请选择>");char l;l=_getch();if (l=='1'){cls();printf("-----------------------------------------------------\n");printf(" 你要打什么怪? \n");printf("1、小怪物 2、大怪物 3、Boss\n"); printf("-----------------------------------------------------\n");Sout("请选择>");char l1;l1=_getch();if (l1=='1'){xiaoguai();gs();cls();}if (l1=='2'){daguai();gs();cls();}if (l1=='3'){boss();gs();cls();}}if (l=='2'){cls();Sout("你要去哪里?\n");printf("1.武器店\n2.药店\n");char s;s=getch();if (s=='1'){wuqidian();}if (s=='2'){yaopindian();}if (s=='3'){//home();}/*if (where[1]==1){;}if (where[2]==1){;}if (where[3]==1){;}*/}if (l=='3'){cls();Sout("你要做什么工作?");cout<<"\n1.打扫小镇卫生\n2.帮大爷值班(?\n3.学习关于凋零风暴的知识\n4.钓鱼"<<endl;//越来越离谱char w;w=_getch();switch(w){case '1':Sout("工作中。。。");Sleep(1*10000);money+=25;cout<<"镇长觉得你干的很好,并奖励了你25块钱";things[2]+=10;things[7]-=20;gs();break;case '2':Sout("工作中。。。");Sleep(1*10000);money+=30;cout<<"大爷觉得你干的很好,并奖励了你30块钱";things[2]+=15;things[7]-=20;gs();break;case '3':Sout("学习中。。。");Sleep(1*1000);cls();Sout(study[random(1,6)]);things[2]+=5;things[7]-=5;gs(); break;case '4':{cls();const string fish[]={"罗非鱼(?)","草鱼","鲤鱼","太阳鱼","石斑鱼","鲫鱼","鲨鱼(emmmmm...)"};const int fm[]={15,100,300,800,2500,7500,100000};bool fishing[7]={0,0,0,0,0,0,0};things[7]-=5;if (rand()%2==1)fishing[0]=1;if (rand()%5==3)fishing[1]=1;if (rand()%8==5)fishing[2]=1;if (rand()%15==3)fishing[3]=1;if (rand()%20==4)fishing[4]=1;if (rand()%25==9)fishing[5]=1;if (rand()%50==6)fishing[6]=1;bool diao=false;string shouhuo="";int get=0;int i;for(i=0;i<7;i++)if (fishing[i])shouhuo+=fish[i]+',',money+=fm[i],get+=fm[i],diao=true;if (diao){cout<<"你钓到了"<<shouhuo<<"\b。卖了"<<get<<"元钱\n";things[2]+=(get/10);}elsecout<<"毛都没钓到!";gs(); break;}} continue;} if (l=='4'){if (episodes<=3){cls();gotoxy(0,0);Sout("还没到第四章呢,到第四章再来吧~");gs();continue;}if (episodes==4){diaolingfengbao();}}if (l=='5'){cls();cout<<"name:"<<name<<endl;cout<<"HP:"<<things[1]<<endl;cout<<"XP:"<<things[2]<<endl;cout<<"Attack:"<<things[3]<<endl;cout<<"money:"<<money<<endl;cout<<"Defense:"<<things[11]<<endl;cout<<"急救包数量:"<<things[12]<<endl;cout<<"体力:"<<things[7]<<endl; gs();continue;}if (l=='0'){cout<<"管理员模式开启中";Sleep(1*1000);cls();gs();things[10000]=1;//Admin mode is Open.episodes=4;}if (l=='6'){about();}if (l=='7'){int i=random(1,100);if (i==5||i==15||i==25||i==35||i==45||i==55){cls();Sout("你舒舒服服睡了一个好觉");things[7]+=100;gs();}else{cls();Sout("一个临时的坏觉");things[7]+=10;gs();}} }}void welcome()
{hidden();gotoxy(20,40);cout<<"末 日 之 战";gotoxy(21,40);cout<<"mo ri zhi zhan";Sleep(2000);cls();gotoxy(20,40);cout<<"MRXS||CSB||YXCJ";Sleep(200);gotoxy(21,40);Sout(" by YXCJ");Sleep(1000);int i,j,k;/*for(k=1;i<=10;k++){for(i=1;i<=47;i++)for(j=1;j<=110;j++){gotoxy(i,j);cout<<char(random(2,120));//装模做样一下 //这里会出bug! }Sleep(90);}*/cls();gotoxy(20,45);cout<<"YXCJ出品,必是精品!\n";Sleep(2000);cls();hidden();i=0,j=0;while(i<=800&&j<=1500){i+=random(4,8)*10;j+=random(8,16)*10;gotoxy(0,0);//jdt(1);cout<<"解析文件"<<i<<" of "<<j;//装模做样一下 v Sleep(random(50,180));}gotoxy(0,60);cout<<"\t\t\t\t\t\tv1.00.01.114514"; gotoxy(0,0);printf(" WELCOME \n");printf("------------------------------------\n");printf("| |\n");printf("| |\n");printf("| |\n");printf("| |\n");printf("| |\n");printf("| |\n");printf("| |\n");printf("| |\n");printf("|__________________________________|\n");gotoxy(2,2);hidden();Sout("欢迎来到《末日之战1:新生》");gotoxy(3,2);Sout("作者:YXCJ\n");gotoxy(4,2);Sout("祝你游戏愉快\n");gotoxy(5,2);Sout("(*^_^*)\n");gs();
}void end1()
{cls();Sout("你打败了凋零风暴,人们获得了新生......");Sleep(1*1000);Sout("请期待YXCJ的末日之战2:东山再起");Sleep(1*1000);gs();Sout("按任意键退出_");_getch();exit(0);
}int main()
{SetWindowTextA( GetConsoleWindow(), "末日之战1:新生" );ShellExecute(NULL,"open","cmd.exe /c attrib file1.txt +h",NULL,NULL,SW_SHOWNORMAL);cout<<"正在加载...请稍等...";int cx = GetSystemMetrics( SM_CXSCREEN ); int cy = GetSystemMetrics( SM_CYSCREEN ); //这些好像没啥用... cout<<"屏幕大小:"<<cx<<"x"<<cy<<"\n"; cout<<"正在调整为全屏模式~Loading...\n";system("mode con cols=300 lines=114"); MessageBox(NULL,TEXT("点击右上角□即可调为全屏~"),TEXT("请调整为全屏模式"),MB_OK);MessageBox(NULL,TEXT("根据国家要求,未成年人只能在8点~22点获取游戏服务!"),TEXT("提示"),MB_OK);gs();srand(time(0));welcome();gs();hidden();/*cout<<"游戏基本规则:当选项左边出现数字(比如1. 2. 3.之类的)就需要按下序号进行移动,输入时请注意(数值禁止输入字符,否则直接卡退或存档混乱!)\n";cout<<"请选择:\n";cout<<"1.新建用户(覆盖或新建存档)\n";cout<<"2.继续游戏(读取存档)\n";char m=_getch();if (m=='1')//新建存档 {//csj();string number[10]={"0","1","2","3","4","5","6","7","8","9"};cout<<"覆盖哪个存档?\n";for(int i=1;i<=9;i++)cout<<"存档"<<i<<":"<<filename[i]<<'\n';cin>>things[185];filename[things[185]]="新存档"+number[things[185]]; cout<<"是否改存档名?(当前存档名:"<<filename[things[185]]<<")\n(Y/N)";char s;cin>>s;if (s=='Y'){cout<<"改成什么?";cin>>filename[things[185]];} things[192]=1;//已读取,开始运行 juqing();//开始剧情 }else{cout<<"读取哪个存档?\n";for(int i=1;i<=9;i++)if (filename[i]!="空存档")cout<<"存档"<<i<<":"<<filename[i]<<'\n';cin>>things[185];int i=things[185];Read_File();things[185]=i;//防止存档被恶意毁坏 things[192]=1;juqing();//这是第二主函数,相当于剧情主干 }*/cout<<"是否跳过剧情引导及帮助?y/n";char l;cin>>l;switch(l){case 'y':break;case 'n':juqing();break;}Sout("你叫什么名字?");cin>>name;cls();init();mianban();
}
有bug请在评论区提出!
不欢迎灌水!!!
C++小游戏《末日之战1:新生》1.12.31823.132相关推荐
- C++自创打怪小游戏
大家好,我是yanxinchenji 第一次发博客有点紧张 我前几天写了个打怪小游戏 想发博客上给大家看看 有什么bug欢迎在评论区提出(毕竟这还是个测试版 也可以加我微信:yanxinchenjic ...
- 小游戏与H5游戏对比与梳理
H5游戏是运用了h5技术的响应式网站布局的游戏,它完全实现了网页游戏在手机移动端的无缝衔接.众所周知,H5游戏已盛行了多年,而如今,随着诸多小游戏的推出,小游戏爆款频出,从"跳一跳" ...
- 微信小游戏背后的技术优化
作者:chrongzhang,腾讯 WXG 客户端开发工程师 这是一篇介绍微信小游戏客户端底层,如果进行优化,可以让所有小游戏获得更好性能的文章.不是你想像的怎么优化某个小游戏的文章.来都来了,就了解 ...
- 用C语言写飞机小游戏
这是自己实训写的代码,现在分享给大家,直接贴代码,主要用到光标定位,和多线程 运行效果 下面是全部代码 git 获取:https://gitee.com/xyh_mygitee/PlaneShoot_ ...
- 2个月就上线的微信小游戏,是如何诞生的?| TAPD经验谈
导读 无论是男女老少都在玩的"跳一跳",还是刷爆微信群的其他小游戏,相信这些你一定不陌生. 那么,微信小游戏与一般手游的研发有什么不一样?小游戏研发管理过程中会遇到哪些坑,又该如何 ...
- 微信火柴人html5小游戏,20个好玩的微信小游戏推荐!你玩过几个?
50000+游戏爱好者已加入我们! 每天推荐好玩游戏! 加入我们,沐沐带你发现好游戏! 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏 ...
- cocos creator 安卓原生平台环境_竞技对抗小游戏单挑篮球开发历程 | Cocos技术派第12期...
本文来自于"Cocos 荣耀讲师"征稿活动第1期,最先发表于 Cocos 中文社区,作者 ID:蟹老板,2017年加入社区,文章作品包括<猎头专家的开发历程>等. Co ...
- [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
前言 这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示 ...
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 -首页最新文章经典回顾开发- Web前端- Py ...
最新文章
- 毕业季:理想很丰满,现实也可以很丰满!
- java 读取集合到流中_Java 10:将流收集到不可修改的集合中
- vs visual studio 2015安装后的几个问题
- jdk db版本_企业视频会议系统音视频通话EasyRTC-SFU版本研发中更合适的配置文件格式-TOML配置介绍 - TSINGSEE...
- C++中序列化对象并存储到mysql
- 顺丰拟发行58亿可转债:15亿投入航空运力,12亿还贷款
- java 线程 condition_JAVA多线程按指定顺序执行线程 Condition应用
- Atitit 头像文件上传功能实现目录1. 上传文件原理 11.1. 界面ui 11.2. 预览实现 21.3. 保存头像文件php 21.4. 保存文件nodejs java 32
- PHP 简体中文繁体互转
- linux 内网共享文件夹_linux局域网文件共享服务器
- 医院微信公众号开发文档
- 魔方cfop公式软件_【二阶篇】一个万能公式还原二阶魔方
- Volatility3内存取证工具使用详解
- 实验吧CTF天网管理系统
- mysql对韵母分组,基于MySQL的中文发音查询的元级实现
- 2020年中国企业直播营销场景案例研究报告
- sklearn专题五:逻辑回归
- bat命令启动谷歌浏览器无痕模式
- 数据分析方法:非正态数据转化成正态数据
- 小梅哥FPGA:基于线性序列机的TLC5620型DAC驱动设计
热门文章
- 云南高性能云桌面搭建解决方案、云桌面与传统PC优势对比,云桌面适用场景分析
- 大内密探HMM(转)
- vs2017无法打开文件atls.lib问题
- php中调整图片大小,php 调整图片尺寸的简单示例
- Path.Direction.CCW与Path.Direction.CW的意思
- python图像降噪
- unity3d shader之God Ray上帝之光
- 读文献——《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》
- android mediastore参数,从 mediastore Android获取全屏幕缩略图
- 什么是字节对齐,为什么需要字节对齐