最近,我因为没有时间没有发博文,但是粉丝们还是一直关注得我.所以,今天我决定给你们一些报答,请看下面的一些C++游戏(注意:以下所有游戏都请用英文输入法游玩!!!!!):
1.飞机大战小游戏
//一定要是英文输入法!!!!! #include<iostream> #include<windows.h> #include<conio.h> #include<time.h> #include<string> using namespace std; /*=============== all the structures ===============*/ typedef struct Frame { COORD position[2]; int flag; }Frame; /*=============== all the functions ===============*/ void SetPos(COORD a)// set cursor { HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(out, a); } void SetPos(int i, int j)// set cursor { COORD pos={i, j}; SetPos(pos); } void HideCursor() { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } //把第y行,[x1, x2) 之间的坐标填充为 ch void drawRow(int y, int x1, int x2, char ch) { SetPos(x1,y); for(int i = 0; i <= (x2-x1); i++) cout<<ch; } //在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch void drawRow(COORD a, COORD b, char ch) { if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch); else { SetPos(0, 25); cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等"; system("pause"); } } //把第x列,[y1, y2] 之间的坐标填充为 ch void drawCol(int x, int y1, int y2, char ch) { int y=y1; while(y!=y2+1) { SetPos(x, y); cout<<ch; y++; } } //在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch void drawCol(COORD a, COORD b, char ch) { if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch); else { SetPos(0, 25); cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等"; system("pause"); } } void drawFrame(COORD a, COORD b, char row, char col) { drawRow(a.Y, a.X+1, b.X-1, row); drawRow(b.Y, a.X+1, b.X-1, row); drawCol(a.X, a.Y+1, b.Y-1, col); drawCol(b.X, a.Y+1, b.Y-1, col); } void drawFrame(int x1, int y1, int x2, int y2, char row, char col) { COORD a={x1, y1}; COORD b={x2, y2}; drawFrame(a, b, row, col); } void drawFrame(Frame frame, char row, char col) { COORD a = frame.position[0]; COORD b = frame.position[1]; drawFrame(a, b, row, col); } void drawPlaying() { drawFrame(0, 0, 48, 24, '=', '|');// draw map frame; drawFrame(49, 0, 79, 4, '-', '|');// draw output frame drawFrame(49, 4, 79, 9, '-', '|');// draw score frame drawFrame(49, 9, 79, 20, '-', '|');// draw operate frame drawFrame(49, 20, 79, 24, '-', '|');// draw other message frame SetPos(52, 6); cout<<"得分:"; SetPos(52, 7); cout<<"称号:"; SetPos(52,10); cout<<"操作方式:"; SetPos(52,12); cout<<" a,s,d,w 控制战机移动。"; SetPos(52,14); cout<<" 空格 发射子弹"; SetPos(52,16); cout<<" p 暂停游戏。"; SetPos(52,18); cout<<" e 退出游戏。"; } //在[a, b)之间产生一个随机整数 int random(int a, int b) { int c=(rand() % (a-b))+ a; return c; } //在两个坐标包括的矩形框内随机产生一个坐标 COORD random(COORD a, COORD b) { int x=random(a.X, b.X); int y=random(a.Y, b.Y); COORD c={x, y}; return c; } bool judgeCoordInFrame(Frame frame, COORD spot) { if(spot.X>=frame.position[0].X) if(spot.X<=frame.position[1].X) if(spot.Y>=frame.position[0].Y) if(spot.Y<=frame.position[0].Y) return true; return false; } void printCoord(COORD a) { cout <<"( "<<a.X<<" , "<<a.Y<<" )"; } void printFrameCoord(Frame a) { printCoord(a.position[0]); cout <<" - "; printCoord(a.position[1]); } int drawMenu() { SetPos(30, 1); cout<<"P l a n e W a r"; drawRow(3, 0, 79, '-'); drawRow(5, 0, 79, '-'); SetPos(28, 4); cout<<"w 和 s 选择, k 确定"; SetPos(15, 11); cout<<"1. 简单的敌人"; SetPos(15, 13); cout<<"2. 冷酷的敌人"; drawRow(20, 0, 79, '-'); drawRow(22, 0, 79, '-'); SetPos(47, 11); cout<<"简单的敌人:"; SetPos(51, 13); cout<<"简单敌人有着较慢的移动速度。"; SetPos(24, 21); cout<<"制作:呦呦鹿鸣^_^"; int j=11; SetPos(12, j); cout<<">>"; //drawFrame(45, 9, 79, 17, '=', '|'); while(1) { if( _kbhit() ) { char x=_getch(); switch (x) { case 'w' : { if( j == 13) { SetPos(12, j); cout<<" "; j = 11; SetPos(12, j); cout<<">>"; SetPos(51, 13); cout<<" "; SetPos(47, 11); cout<<"简单的敌人:"; SetPos(51, 13); cout<<"简单敌人有着较慢的移动速度,容易对付。"; } break; } case 's' : { if( j == 11 ) { SetPos(12, j); cout<<" "; j = 13; SetPos(12, j); cout<<">>"; SetPos(51, 13); cout<<" "; SetPos(47, 11); cout<<"冷酷的敌人:"; SetPos(51, 13); cout<<"冷酷的敌人移动速度较快,难对付哟!!!"; } break; } case 'k' : { if (j == 8) return 1; else return 2; } } } } } /* DWORD WINAPI MusicFun(LPVOID lpParamte) { //DWORD OBJ; sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC); return 0; } */ /*================== the Game Class ==================*/ class Game { public: COORD position[10]; COORD bullet[10]; Frame enemy[8]; int score; int rank; int rankf; string title; int flag_rank; Game (); //初始化所有 void initPlane(); void initBullet(); void initEnemy(); //初始化其中一个 //void initThisBullet( COORD ); //void initThisEnemy( Frame ); void planeMove(char); void bulletMove(); void enemyMove(); //填充所有 void drawPlane(); void drawPlaneToNull(); void drawBullet(); void drawBulletToNull(); void drawEnemy(); void drawEnemyToNull(); //填充其中一个 void drawThisBulletToNull( COORD ); void drawThisEnemyToNull( Frame ); void Pause(); void Playing(); void judgePlane(); void judgeEnemy(); void Shoot(); void GameOver(); void printScore(); }; Game::Game() { initPlane(); initBullet(); initEnemy(); score = 0; rank = 25; rankf = 0; flag_rank = 0; } void Game::initPlane() { COORD centren={39, 22}; position[0].X=position[5].X=position[7].X=position[9].X=centren.X; position[1].X=centren.X-2; position[2].X=position[6].X=centren.X-1; position[3].X=position[8].X=centren.X+1; position[4].X=centren.X+2; for(int i=0; i<=4; i++) position[i].Y=centren.Y; for(int i=6; i<=8; i++) position[i].Y=centren.Y+1; position[5].Y=centren.Y-1; position[9].Y=centren.Y-2; } void Game::drawPlane() { for(int i=0; i<9; i++) { SetPos(position[i]); if(i!=5) cout<<"O"; else if(i==5) cout<<"|"; } } void Game::drawPlaneToNull() { for(int i=0; i<9; i++) { SetPos(position[i]); cout<<" "; } } void Game::initBullet() { for(int i=0; i<10; i++) bullet[i].Y = 30; } void Game::drawBullet() { for(int i=0; i<10; i++) { if( bullet[i].Y != 30) { SetPos(bullet[i]); cout<<"^"; } } } void Game::drawBulletToNull() { for(int i=0; i<10; i++) if( bullet[i].Y != 30 ) { COORD pos={bullet[i].X, bullet[i].Y+1}; SetPos(pos); cout<<" "; } } void Game::initEnemy() { COORD a={1, 1}; COORD b={45, 15}; for(int i=0; i<8; i++) { enemy[i].position[0] = random(a, b); enemy[i].position[1].X = enemy[i].position[0].X + 3; enemy[i].position[1].Y = enemy[i].position[0].Y + 2; } } void Game::drawEnemy() { for(int i=0; i<8; i++) drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|'); } void Game::drawEnemyToNull() { for(int i=0; i<8; i++) { drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' '); } } void Game::Pause() { SetPos(61,2); cout<<" "; SetPos(61,2); cout<<"暂停中..."; char c=_getch(); while(c!='p') c=_getch(); SetPos(61,2); cout<<" "; } void Game::planeMove(char x) { if(x == 'a') if(position[1].X != 1) for(int i=0; i<=9; i++) position[i].X -= 2; if(x == 's') if(position[7].Y != 23) for(int i=0; i<=9; i++) position[i].Y += 1; if(x == 'd') if(position[4].X != 47) for(int i=0; i<=9; i++) position[i].X += 2; if(x == 'w') if(position[5].Y != 3) for(int i=0; i<=9; i++) position[i].Y -= 1; } void Game::bulletMove() { for(int i=0; i<10; i++) { if( bullet[i].Y != 30) { bullet[i].Y -= 1; if( bullet[i].Y == 1 ) { COORD pos={bullet[i].X, bullet[i].Y+1}; drawThisBulletToNull( pos ); bullet[i].Y=30; } } } } void Game::enemyMove() { for(int i=0; i<8; i++) { for(int j=0; j<2; j++) enemy[i].position[j].Y++; if(24 == enemy[i].position[1].Y) { COORD a={1, 1}; COORD b={45, 3}; enemy[i].position[0] = random(a, b); enemy[i].position[1].X = enemy[i].position[0].X + 3; enemy[i].position[1].Y = enemy[i].position[0].Y + 2; } } } void Game::judgePlane() { for(int i = 0; i < 8; i++) for(int j=0; j<9; j++) if(judgeCoordInFrame(enemy[i], position[j])) { SetPos(62, 1); cout<<"坠毁"; drawFrame(enemy[i], '+', '+'); Sleep(1000); GameOver(); break; } } void Game::drawThisBulletToNull( COORD c) { SetPos(c); cout<<" "; } void Game::drawThisEnemyToNull( Frame f ) { drawFrame(f, ' ', ' '); } void Game::judgeEnemy() { for(int i = 0; i < 8; i++) for(int j = 0; j < 10; j++) if( judgeCoordInFrame(enemy[i], bullet[j]) ) { score += 5; drawThisEnemyToNull( enemy[i] ); COORD a={1, 1}; COORD b={45, 3}; enemy[i].position[0] = random(a, b); enemy[i].position[1].X = enemy[i].position[0].X + 3; enemy[i].position[1].Y = enemy[i].position[0].Y + 2; drawThisBulletToNull( bullet[j] ); bullet[j].Y = 30; } } void Game::Shoot() { for(int i=0; i<10; i++) if(bullet[i].Y == 30) { bullet[i].X = position[5].X; bullet[i].Y = position[5].Y-1; break; } } void Game::printScore() { if(score == 120 && flag_rank == 0) { rank -= 3; flag_rank = 1; } else if( score == 360 && flag_rank == 1) { rank -= 5; flag_rank = 2; } else if( score == 480 && flag_rank == 2) { rank -= 5; flag_rank = 3; } int x=rank/5; SetPos(60, 6); cout<<score; if( rank!=rankf ) { SetPos(60, 7); if( x == 5) title="初级飞行员"; else if( x == 4) title="中级飞行员"; else if( x == 3) title="高级飞行员"; else if( x == 2 ) title="王牌飞行员"; cout<<title; } rankf = rank; } void Game::Playing() { //HANDLE MFUN; //MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); drawEnemy(); drawPlane(); int flag_bullet = 0; int flag_enemy = 0; while(1) { Sleep(8); if(_kbhit()) { char x = _getch(); if ('a' == x || 's' == x || 'd' == x || 'w' == x) { drawPlaneToNull(); planeMove(x); drawPlane(); judgePlane(); } else if ('p' == x) Pause(); else if( ' ' == x) Shoot(); else if( 'e' == x) { //CloseHandle(MFUN); GameOver(); break; } } /* 处理子弹 */ if( 0 == flag_bullet ) { bulletMove(); drawBulletToNull(); drawBullet(); judgeEnemy(); } flag_bullet++; if( 5 == flag_bullet ) flag_bullet = 0; /* 处理敌人 */ if( 0 == flag_enemy ) { drawEnemyToNull(); enemyMove(); drawEnemy(); judgePlane(); } flag_enemy++; if( flag_enemy >= rank ) flag_enemy = 0; /* 输出得分 */ printScore(); } } void Game::GameOver() { system("cls"); COORD p1={28,9}; COORD p2={53,15}; drawFrame(p1, p2, '=', '|'); SetPos(36,12); string str="Game Over!"; for(int i=0; i<str.size(); i++) { Sleep(80); cout<<str[i]; } Sleep(1000); system("cls"); drawFrame(p1, p2, '=', '|'); SetPos(31, 11); cout<<"击落敌机:"<<score/5<<" 架"; SetPos(31, 12); cout<<"得 分:"<<score; SetPos(31, 13); cout<<"获得称号:"<<title; SetPos(30, 16); Sleep(1000); cout<<"继续? 是(y)| 否(n)制作:呦呦鹿鸣^_^"; as: char x=_getch(); if (x == 'n') exit(0); else if (x == 'y') { system("cls"); Game game; int a = drawMenu(); if(a == 2) game.rank = 20; system("cls"); drawPlaying(); game.Playing(); } else goto as; } /*================== the main function ==================*/ int main() { //游戏准备 srand((int)time(0)); //随机种子 HideCursor(); //隐藏光标 Game game; int a = drawMenu(); if(a == 2) game.rank = 20; system("cls"); drawPlaying(); game.Playing(); }
2.走迷宫小游戏
#include<bits/stdc++.h> #include<windows.h> #include<conio.h> using namespace std; const long long n=29,jg=25; string p=" *!|-=.<^>1234567890@$%?&_~"; long long r=1; char f='y'; void print(string a[n]) { system("cls"); for(long long i=0;i<n;i++) cout<<a[i]<<endl; } void tc() { system("cls"); cout<<"\n\n\n\n\n 欢迎下次再玩,拜拜!!!\n"; cout<<" 制作:呦呦鹿鸣\n"; cout<<" (按空格结束)"; long long ok='\0'; while(ok=getch(),ok!=' '); system("cls"); return ; } void hf() { char t='\0'; while(t!=' ') { system("cls"); cout<<"\n\n\n\n A D键换皮肤 空格确定\n\n"; cout<<"\n\n\n\n "<<p[r]<<"\n"; t=getch(); if(t=='a')r--; else if(t=='d')r++; if(r<1)r=jg; if(r>jg)r=1; } system("cls"); return ; } void sm() { system("cls"); cout<<"\n\n 说明:\n\n\n"; cout<<" 按空格开始游戏后\n"; cout<<" W\n"; cout<<" A S D\n"; cout<<" 移动\n"; cout<<" 按R键返回起点\n"; cout<<" 按P键返回主界面\n"; cout<<" #号为墙 \n"; cout<<" 你是*号 \n"; cout<<" +号处为终点\n\n\n"; cout<<" 按空格继续···"; long long ok='\0'; while(ok=getch(),ok!=' '); system("cls"); return ; } void hys() { system("cls"); cout<<"\n\n\n\n\n\n\n\n\n按1【日间色】\n"; cout<<"按2【夜间色】\n"; cout<<"按3【黑客】\n"; cout<<"按4【科幻】\n"; cout<<"按5【紫水晶】\n"; char s; s=getch(); while(s!='1'&&s!='2'&&s!='3'&&s!='4'&&s!='5')s=getch(); switch(s-'0') { case 1: system("color f0"); break; case 2: system("color 0f"); break; case 3: system("color 0a"); break; case 4: system("color 09"); break; case 5: system("color 01"); break; } system("cls"); return ; } int main(){ system("color f0"); while(1) { long long xx=1,yy=1; system("cls"); f='y'; cout<<"\n\n\n\n\n\n\n\n\n\n\n"; cout<<" 迷宫游戏\n"; cout<<" 按空格开始游戏\n"; cout<<" 按0退出游戏\n"; cout<<" 按1换皮肤\n"; cout<<" 按2游戏说明\n"; cout<<" 按3换颜色\n"; cout<<"\n\n\n\n\n\n\n"; long long ok=getch(); while(ok!='0'&&ok!='1'&&ok!='2'&&ok!=' '&&ok!='3'&&ok!='4')ok=getch(); switch(ok){ case ' ': break; case '0': tc(); return 0; break; case '1': hf(); f='n'; break; case '2': sm(); f='n'; break; case '3': hys(); f='n'; break; } while(f=='y') { system("cls"); string a[n]; long long x,y,qx,qy; long long ch; srand(time(0)); cout<<"输入迷宫序号(1~8):"; long long s; cin>>s; switch(s){ case 1: qx=1; qy=1; a[0]="###########"; a[1]="# # # #"; a[2]="# # # #"; a[3]="# ##### ###"; a[4]="# # ###+#"; a[5]="# # #"; a[6]="###########"; break; case 2: qx=8; qy=12; a[0]="####################"; a[1]="#+ # # #"; a[2]="# ## #### ### # #"; a[3]="# #### ##### #"; a[4]="### # # ## #"; a[5]="##### ########## # #"; a[6]="# ## ### ## #"; a[7]="## ### ### # ## ##"; a[8]="# # # #"; a[9]="####################"; break; case 3: qx=1; qy=1; a[0]="###################"; a[1]="# # # # # #"; a[2]="# # # # # # # # # #"; a[3]="# # # # # # # # # #"; a[4]="# # # # # # # # # #"; a[5]="# # # # # # # # # #"; a[6]="# # # # # # # # # #"; a[7]="# # # # # # # # # #"; a[8]="# # # # # # # # # #"; a[9]="# # # # # # # # # #"; a[10]="# # # # #+#"; a[11]="####################"; break; case 4: qx=1; qy=1; a[0]="########################################"; a[1]="# #"; a[2]="# #################################### #"; a[3]="# # # #"; a[4]="# # ###################### ##### #######"; a[5]="# # #+ # # # ### #"; a[6]="# # # # # ######### # #### ## #### ## #"; a[7]="# # # # # ## # ## ## # # #"; a[8]="# # # ### ## # # ########### ## ## # #"; a[9]="# # # # # # # # # # # # #"; a[10]="# # ### ###### ### # ######## ##### ## #"; a[11]="# # # # # # # #"; a[12]="# # # ######## ############## ##### # #"; a[13]="# # # # #"; a[14]="# # ################################## #"; a[15]="# # # #"; a[16]="# #################################### #"; a[17]="# #"; a[18]="########################################"; break; case 5: qx=1; qy=1; a[0]="########################################"; a[1]="# # #"; a[2]="# ########### ################# ###### #"; a[3]="# # # # # ## # #"; a[4]="# # # #### ## # ## # #### ##### ## # # #"; a[5]="# # # # # # # # # # # #"; a[6]="# # # #### ###### ############### # #"; a[7]="# # ## # # # # # #"; a[8]="# # #### ######## ################# # #"; a[9]="# ## # # # # ##### # # #"; a[10]="# ########## # # # ### # #"; a[11]="### # # # # ##### # # #"; a[12]="# ######################## # # # #"; a[13]="# # # # ## # ###"; a[14]="# ### #### ####### ########### #### ## #"; a[15]="# # # # +#"; a[16]="########################################"; break; case 6: qx=1; qy=1; a[0]="##################################################################################################################"; a[1]="# #"; a[2]="# # ############################################################################################################ #"; a[3]="# # ### ############# ### #"; a[4]="# ## ## ###### +# ######################################################################### # # ### # #"; a[5]="# ### # ################### # # # # # # # # # # #"; a[6]="# #### # ############################################################# # # # # # #"; a[7]="# ##################################### ################## ## # ##### # # #"; a[8]="# ###### # ##### ########## + ########################### ## ## # # #"; a[9]="# # ######### ############## ###### # ## # ##################### ############ ######### # #"; a[10]="# # ##### # ###### # # ####### ######## # ### # # #"; a[11]="# # # ###### # #### ##### ########## # # # ##### ############## ###################### # ###"; a[12]="# ##### # # ## # #### ## # ##### ############# ####### # # # # #"; a[13]="# # # # # ## # ## # ############ ## # # # # ############# ###### ################ # # #"; a[14]="# # # # ##### ## # ## ## # # # # ## # # # ###### # ######### # ############# ######## ### #"; a[15]="# # # # ## # # # # # # ##### # # # # ############### # # #"; a[16]="# ### ########## # # #################################### # ##################################### ############# #"; a[17]="# # # ## # #### #"; a[18]="# # ####################### ################################################################# ################## #"; a[19]="# # # +#"; a[20]="##################################################################################################################"; break; case 7: qx=1; qy=1; a[0]="#############################################################"; a[1]="# ###+# #+#"; a[2]="# # ###### ############################################## #"; a[3]="# # # # # # ###"; a[4]="# # # # # # # ########################################### #"; a[5]="# # # # # ##### # #"; a[6]="# # # # # # ######################################### #"; a[7]="# # # # ######### # #"; a[8]="# # # # ################################################ # #"; a[9]="# # # # #+++++++++++++++++++++++++++++++++++++++++++++++### #"; a[10]="# # # # #+++++++++++++++++++++++++++++++++++++++++++++++ # #"; a[11]="# # # # #+++++++++++++++++++++++++++++++++++++++++++++++# # #"; a[12]="# # # # ################################### ############# # #"; a[13]="# # # # # # ## # #"; a[14]="# # # # # ##### ################# #################### # #"; a[15]="# # # # # # ## # # # # # # # ### # #"; a[16]="# # # # # #+# # ############# # # # # # # # # #"; a[17]="# # # # # ####### # # # # # # ####################### #"; a[18]="# # #+# # # # #+# # #################### #"; a[19]="# # ### ####################### ########################### #"; a[20]="# #"; a[21]="#############################################################"; break; case 8: qx=1; qy=1; a[0]="##########################"; a[1]="# #"; a[2]="# ###################### #"; a[3]="# #+ # # # # # #"; a[4]="# # #+# # # # #"; a[5]="##########################"; break; } xx=x=qx,yy=y=qy; a[x][y]=p[r]; print(a); while(a[x][y]!='+'){ ch=getch(); if(ch=='q'){ xx=x; yy=y; } if(ch=='e'){ a[x][y]=' '; a[xx][yy]=p[r]; x=xx; y=yy; } if(ch=='r'){ a[x][y]=' '; a[qx][qy]=p[r]; x=qx; y=qy; } if(ch=='p'){ f='n'; break; } if((ch=='a'&&a[x][y-1]=='+')||(ch=='d'&&a[x][y+1]=='+')||(ch=='s'&&a[x+1][y]=='+')||(ch=='w'&&a[x-1][y]=='+')){ break; } if(ch==27)break; if(ch==97&&a[x][y-1]==' '||a[x][y-1]=='|') { a[x][y]=' '; y--; a[x][y]=p[r]; } if(ch==100&&a[x][y+1]==' '||a[x][y+1]=='|') { a[x][y]=' '; y++; a[x][y]=p[r]; } if(ch==115&&a[x+1][y]==' '||a[x+1][y]=='|') { a[x][y]=' '; x++; a[x][y]=p[r]; } if(ch==119&&a[x-1][y]==' '||a[x-1][y]=='|') { a[x][y]=' '; x--; a[x][y]=p[r]; } print(a); } system("cls"); if(f=='n')break; cout<<"you win!!!"<<endl; cout<<"按空格继续···"; ok='\0'; while(ok=getch(),ok!=' '); system("cls"); cout<<"是否继续(y/n)"; while(f=getch(),f!='y'&&f!='n'); } } return 0; }
3.愤怒的小鸟小游戏
#include<bits/stdc++.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<time.h> using namespace std; const double pi=3.1415926536; int toint(float a){return ((int)(a*10+5))/10;} void Color(int a) { if(a==0||a==14||a==20) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==1||a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE); if(a==4||a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); if(a==5||a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==15) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY); if(a==16) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN); if(a==17) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE); if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_RED|BACKGROUND_GREEN); } void SetPos(float x,float y){ int xx=toint(x),yy=toint(y); COORD pos;pos.X=yy*2,pos.Y=xx;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } struct node{ int W,W2,S,mS; float X,Y; float vx,vy; float ax,ay; bool go,boom; }blt[100001],pig[100001],boo[100001]; int T,yX,yY,Xy,put,K,K2,Sle,What; int Bot,Pit,Blt,Pig,Sco,pigk,scok; int m[41][41]; void Cout(int a,int x,int y) { if(a==1) SetPos(x,y),Color(5),cout<<put<<' '; if(y==202) { SetPos(pig[a].X,pig[a].Y);cout<<" "; if((pig[a].W==2||pig[a].W==3)&&pig[a].X>=2) SetPos(pig[a].X-2,pig[a].Y);cout<<" ",SetPos(pig[a].X-1,pig[a].Y);cout<<" "; if(pig[a].W==4) SetPos(pig[a].X,pig[a].Y-1),cout<<" "; if(pig[a].W==5) SetPos(pig[a].X-1,pig[a].Y),cout<<" ",SetPos(pig[a].X-1,pig[a].Y-1),cout<<" "; } if(a==2) for(int i=0;i<=40;i++) for(int j=0;j<=40;j++) { if(i<=18&&m[i][j]==1) SetPos(i,j),Color(7),cout<<"■"; if(m[i][j]>=2&&m[i][j]<=19) SetPos(i,j),Color(5),cout<<"█",m[i][j]++; if(m[i][j]>19&&m[i][j]<=29) SetPos(i,j),Color(0),cout<<"█",m[i][j]++; if(m[i][j]==30) SetPos(i,j),Color(0),cout<<" ",m[i][j]=0; if(m[i][j]>=31&&m[i][j]<=49) SetPos(i,j),Color(0),cout<<"■",m[i][j]++; if(m[i][j]==50) SetPos(i,j),Color(7),cout<<"■",m[i][j]=1; } if(y==666) { SetPos(blt[a].X,blt[a].Y); Color(10+blt[a].W),cout<<"●"; }Color(0); } void Go(int a) { SetPos(blt[a].X,blt[a].Y);cout<<" "; blt[a].X+=blt[a].vx/2;blt[a].Y+=blt[a].vy/2;blt[a].vx+=blt[a].ax/2;blt[a].vy+=blt[a].ay/2; if(blt[a].X>=20) blt[a].X=19; if(blt[a].X>20||blt[a].Y>38||blt[a].X<0||blt[a].Y<=0) blt[a].go=1; if(blt[a].W2==1&&blt[a].Y>=Xy) blt[a].go=1,Sle=0;//地跑鸟 if(blt[a].W2==0) { for(int i=0;i<=blt[a].vx/2+1;i++) { if(blt[a].vx>0&&m[toint(blt[a].X)+i][toint(blt[a].Y)]==1) //上反弹 { if(blt[a].W!=5) blt[a].boom=1; blt[a].X=toint(blt[a].X)+i-1,blt[a].Y+=blt[a].vy/2,blt[a].vx=-blt[a].vx*0.4,blt[a].vy=blt[a].vy*0.8; if(blt[a].W==3) blt[a].ax=0.5;if(blt[a].W==7) blt[a].vx*=2; if(blt[a].W==10) blt[a].go=1,Bot++,boo[Bot].X=blt[a].X,boo[Bot].Y=blt[a].Y,boo[Bot].S=1,boo[Bot].mS=4; } if(blt[a].vx<0&&m[toint(blt[a].X)-i][toint(blt[a].Y)]==1) //下反弹 { if(blt[a].W!=5) blt[a].boom=1; blt[a].X=toint(blt[a].X)+i+1,blt[a].Y+=blt[a].vy/2,blt[a].vx=-blt[a].vx,blt[a].vy=blt[a].vy*0.8; if(blt[a].W==3) blt[a].ax=0.5;if(blt[a].W==7) blt[a].vx*=2; if(blt[a].W==10) blt[a].go=1,Bot++,boo[Bot].X=blt[a].X,boo[Bot].Y=blt[a].Y,boo[Bot].S=1,boo[Bot].mS=4; } } if(abs(blt[a].vx)<=0.1&&abs(blt[a].vy)<=0.1&&abs(blt[a].ay)<=0.1) { blt[a].go=1; if(blt[a].W==5) Bot++,boo[Bot].X=blt[a].X,boo[Bot].Y=blt[a].Y,boo[Bot].S=1,boo[Bot].mS=4,blt[a].go=1; } } if(blt[a].go==0) Cout(a,0,666); } void Kill(int a) { if(pig[a].go==0&&pig[a].W!=2&&pig[a].W!=3&&pig[a].Y<16) Cout(a,202,202),pig[a].Y=16; if(pig[a].go==0&&pig[a].W==4&&pig[a].Y<20) pig[a].W=1; int R=rand()%50;Cout(a,202,202); //清除猪猪 pig[a].X+=pig[a].vx/2;pig[a].Y+=pig[a].vy/2;pig[a].vx+=pig[a].ax/2;pig[a].vy+=pig[a].ay/2; for(int i=-2;i<=pig[a].vx/2+1;i++) { if(m[toint(pig[a].X)+i][toint(pig[a].Y)]==1) //上反弹 pig[a].X=toint(pig[a].X)+i-1,pig[a].Y+=pig[a].vy/2,pig[a].vx=-pig[a].vx*0.5,pig[a].vy=pig[a].vy*0.8; } for(int i=Blt-10;i<=Blt;i++) { if(pig[a].W==5&&blt[i].go==0&&abs(pig[a].X-blt[i].X)<=1&&abs(pig[a].Y-blt[i].Y)<=1) {m[toint(pig[a].X)-1][toint(pig[a].Y)]=2,pig[a].W2++;Sco+=2;break;} if(pig[a].W==5&&m[toint(pig[a].X)][toint(pig[a].Y)]>=2&&m[toint(pig[a].X)][toint(pig[a].Y)]<30) {m[toint(pig[a].X)-1][toint(pig[a].Y)]=2,pig[a].W2++;Sco+=2;break;} if(blt[i].go==0&&abs(pig[a].X-blt[i].X)<=1&&abs(pig[a].Y-blt[i].Y)<=1) { if(pig[a].W==6) Bot++,boo[Bot].X=pig[a].X,boo[Bot].Y=pig[a].Y,boo[Bot].S=1,boo[Bot].mS=4,blt[i].go=1; m[toint(pig[a].X)][toint(pig[a].Y)]=2,pig[a].go=1,Pig--,Sco+=10;break; } if(m[toint(pig[a].X)][toint(pig[a].Y)]>=2&&m[toint(pig[a].X)][toint(pig[a].Y)]<30) { if(pig[a].W==6) Bot++,boo[Bot].X=pig[a].X,boo[Bot].Y=pig[a].Y,boo[Bot].S=1,boo[Bot].mS=4; pig[a].go=1,Pig--,Sco+=10;break; } if((pig[a].W==2||pig[a].W==3)&&blt[i].go==0&&abs(pig[a].X-2-blt[i].X)<=1&&abs(pig[a].Y-blt[i].Y)<=1) {m[toint(pig[a].X)][toint(pig[a].Y)]=2,pig[a].go=1,Pig--,Sco+=10;break;} if((pig[a].W==2||pig[a].W==3)&&m[toint(pig[a].X-2)][toint(pig[a].Y)]>=2&&m[toint(pig[a].X-2)][toint(pig[a].Y)]<30) {pig[a].go=1,Pig--,Sco+=10;break;} } //弄死猪猪 if(pig[a].go==0){ if(pig[a].go==0&&pig[a].W!=2&&pig[a].W!=3&&pig[a].Y<16) Cout(a,202,202),pig[a].Y=16; if(pig[a].go==0&&pig[a].W==4&&pig[a].Y<20) pig[a].W=1; int Xx=toint(pig[a].X),Xy=toint(pig[a].Y); if(pig[a].W==6) SetPos(pig[a].X,pig[a].Y),Color(9),cout<<"TN",Color(0); else{ SetPos(pig[a].X,pig[a].Y),Color(2),cout<<"●"; if((pig[a].W==2||pig[a].W==3)&&pig[a].X>=2) SetPos(pig[a].X-2,pig[a].Y),Color(0),cout<<"○",SetPos(pig[a].X-1,pig[a].Y),cout<<"|"; if(pig[a].W==4) SetPos(pig[a].X,pig[a].Y-1),Color(2),cout<<"﹃"; if(pig[a].W==5) { SetPos(pig[a].X-1,pig[a].Y),Color(8);SetPos(pig[a].X-1,pig[a].Y-1),cout<<"▁"; if(pig[a].W2==0)cout<<"▅";if(pig[a].W2==1)cout<<"▃";if(pig[a].W2==2)cout<<"▂";if(pig[a].W2==3) pig[a].W=1,pig[a].W2=0,SetPos(pig[a].X-1,pig[a].Y-1),cout<<" "; } } //输出猪猪 if(pig[a].W==2&&pig[a].X>pig[a].S) pig[a].W=3,pig[a].ax=-0.4,pig[a].vx=1.5; else if(pig[a].W==3&&pig[a].X<=pig[a].S) pig[a].W=2,pig[a].ax=0.4,pig[a].vx=-1.5; if((pig[a].W==2||pig[a].W==3)&&(pig[a].Y<=10||pig[a].Y>=38)) pig[a].vy*=-1; if(pig[a].W==4&&R==0&&pig[a].X==20) pig[a].vx=-((rand()%40)/10); if(pig[a].W==4) { int r=rand()%20; for(int i=Blt-10;i<=Blt;i++) if(r<=5&&blt[i].go==0&&pig[a].Y-blt[i].Y<=5&&abs(blt[i].X-pig[a].X)<=1.5&&r<5) r=0; if(r==0) { m[toint(pig[a].X)][toint(pig[a].Y)-2]=10;m[toint(pig[a].X)][toint(pig[a].Y)-3]=2; for(int j=toint(pig[a].Y)-1;j>=toint(pig[a].Y)-5;j--) { for(int i=Blt-10;i<=Blt;i++) if(blt[i].go==0&&!(blt[i].W==3&&blt[i].boom==1)&&blt[i].W2==0&&toint(blt[i].Y)==j&&abs(blt[i].X-pig[a].X)<=2) blt[i].vy=-2; for(int i=Pit-50;i<=Pit;i++) if(pig[i].go==0&&toint(pig[i].Y)==j&&abs(pig[i].X-pig[a].X)<=2) pig[i].vy=-1; } } } //移动猪猪 if(pig[a].go==0&&pig[a].W!=2&&pig[a].W!=3&&pig[a].Y<16) Cout(a,202,202),pig[a].Y=16; if(pig[a].go==0&&pig[a].W==4&&pig[a].Y<20) pig[a].W=1; if(pig[a].X>20||pig[a].Y>38||pig[a].X<0||pig[a].Y<=0) pig[a].go=1,Pig--,Cout(a,202,202); //清除猪猪 } } void Creat(int a,int p) { if(a==-1&&p==-1) { Blt++;blt[Blt].W=What;blt[Blt].W2=1; blt[Blt].vy=1;blt[Blt].X=19;blt[Blt].Y=0;blt[Blt].boom=1; } else if(a==0&&p==-1) { int u=rand()%7+1,U=rand()%30; if(u>=5) Pit++,pig[Pit].Y=rand()%15+20,pig[Pit].X=2,pig[Pit].ax=0.5,pig[Pit].W=1; if(u==1) Pit++,pig[Pit].Y=rand()%15+20,pig[Pit].X=2,pig[Pit].vy=0.5,pig[Pit].ax=0.5,pig[Pit].S=rand()%5+7,pig[Pit].W=2; if(u==2) Pit++,pig[Pit].Y=rand()%15+20,pig[Pit].X=2,pig[Pit].ax=0.5,pig[Pit].W=4; if(u==3) Pit++,pig[Pit].Y=rand()%15+20,pig[Pit].X=2,pig[Pit].ax=0.5,pig[Pit].W=5; if(u==4) Pit++,pig[Pit].Y=rand()%15+20,pig[Pit].X=2,pig[Pit].ax=0.5,pig[Pit].W=6; if(U==1) Bot++,boo[Bot].Y=rand()%13+15,boo[Bot].X=(rand()%4)*3+8,boo[Bot].S=0,boo[Bot].mS=rand()%2+2,boo[Bot].W2=1; } else { Blt++;blt[Blt].W=What; if(a==1) blt[Blt].X=yX;blt[Blt].Y=yY;blt[Blt].ax=0.5; //抛物线 blt[Blt].vx=-3.5*sin(p*pi/180); blt[Blt].vy=3*cos(p*pi/180); if(p<=45) blt[Blt].vy*=1+(0.33-0.01*(45-p)); if(p>=45) blt[Blt].vy*=1+(0.33-0.01*(p-45)); if(blt[Blt].W==6) blt[Blt].vy*=1.2,blt[Blt].ax=0.4; } } void Boom(int a) { if(boo[a].W2==0) { int ms=boo[a].mS,s=boo[a].S,x=boo[a].X,y=boo[a].Y; if(s==ms) return; for(int i=x-s;i<=x+s;i++) for(int j=y-s;j<=y+s;j++) { float k=(i-x)*(i-x)+(j-y)*(j-y)-s*s; if(k<=s&&k>=-s&&i<=20&&j<=38&&i>=0&&j>0&&m[i][j]!=1) m[i][j]=2; }boo[a].S++; } if(boo[a].W2==1) { int ms=boo[a].mS,s=boo[a].S,x=boo[a].X,y=boo[a].Y; if(s==ms) return; if(y-s>10) m[x][y-s]=31-31*(boo[a].W2-1); if(y+s<40) m[x][y+s]=31-31*(boo[a].W2-1); boo[a].S++; } } void Move(int a) { Color(5); if(a==-2) SetPos(17,Xy),cout<<" ",SetPos(18,Xy),cout<<" ",SetPos(19,Xy),cout<<" ",SetPos(20,Xy),cout<<" "; if(a==-1) SetPos(17,Xy),cout<<" ",SetPos(18,Xy),cout<<" ┃ ┃",SetPos(19,Xy),cout<<" ╰┳╯",SetPos(20,Xy),cout<<" ▏"; if(a==0) SetPos(18,Xy),cout<<" ┃",Color(What+10),cout<<"●",Color(5),cout<<"┃",SetPos(19,Xy),cout<<" ╰┳╯",SetPos(20,Xy),cout<<" ▏"; if(a==1) SetPos(18,Xy),cout<<" ",Color(What+10),cout<<"●",Color(5),cout<<" ┃",SetPos(19,Xy),cout<<" ╰┳╯",SetPos(20,Xy),cout<<" ▏"; if(a==2) SetPos(18,Xy),Color(What+10),cout<<"●",Color(5),cout<<"┃ ┃",SetPos(19,Xy),cout<<" ╰┳╯",SetPos(20,Xy),cout<<" ▏"; if(a==3) SetPos(18,Xy),cout<<" ┃ ┃",SetPos(19,Xy),Color(What+10),cout<<"●",Color(5),cout<<"╰┳╯",SetPos(20,Xy),cout<<" ▏"; if(a==4) SetPos(18,Xy),cout<<" ┃ ┃",SetPos(19,Xy),cout<<" ╰┳╯",SetPos(20,Xy),Color(What+10),cout<<"●",Color(5),cout<<" ▏"; if(a==5) SetPos(18,Xy),cout<<" ┃ ┃",SetPos(19,Xy),cout<<" ╰┳╯",SetPos(20,Xy),cout<<" ",Color(What+10),cout<<"●",Color(5),cout<<" ▏"; if(a==6) SetPos(18,Xy),cout<<" ┃ ┃",SetPos(19,Xy),cout<<" ╰┳╯",SetPos(20,Xy),cout<<" ",Color(What+10),cout<<"●",Color(5),cout<<" "; Color(0); } void Start(){ char g;Color(5);system("cls"); SetPos(1,1);cout<<"------- 愤 怒 的 小 鸟 -------";Color(0); SetPos(3,1);cout<<"空格瞄准,按X触发小胎技能,←→移动弹弓"; SetPos(5,1);cout<<"猪猪技能自动触发,空中会有墙出现。"; SetPos(7,1);cout<<"危险值由命中率,猪的存活时间计算!"; SetPos(9,1);cout<<"危险值点满后失败!1500分通关!"; SetPos(1,20);cout<<"-------- 小 鸟 技 能 --------"; SetPos(3,20);Color(11),cout<<"●",Color(0),cout<<":无技能"; SetPos(5,20);Color(12),cout<<"●",Color(0),cout<<":分身!不同分身初速度大小相同,"; SetPos(6,20);cout<<" 方向不同。"; SetPos(7,20);Color(13),cout<<"●",Color(0),cout<<":加速!以当前速度做匀速直线运动,"; SetPos(8,20);cout<<" 且免疫狙击猪的冲击。"; SetPos(9,20);Color(14),cout<<"●",Color(0),cout<<":投蛋!并获得向上速度做匀速直线"; SetPos(10,20);cout<<" 运动,快达可以穿墙。"; SetPos(11,20);Color(15),cout<<"●",Color(0),cout<<":爆炸!"; SetPos(13,20);Color(16),cout<<"●",Color(0),cout<<":回旋!开始做向左加速运动!发射"; SetPos(14,20);cout<<" 时获得双倍水平速度。"; SetPos(15,20);Color(17),cout<<"●",Color(0),cout<<":[被动] 弹跳力为普通鸟三倍。发射"; SetPos(16,20);cout<<" 时获得1.5倍水平、竖直速度。"; SetPos(11,1);cout<<"-------- 猪 猪 技 能 --------"; SetPos(13,2);Color(2),cout<<"●",Color(0),cout<<":无技能"; SetPos(14,1);Color(8),cout<<"▁▅"; SetPos(15,2);Color(2),cout<<"●",Color(0),cout<<":防御力为普通猪三倍"; SetPos(16,2);cout<<"○"; SetPos(17,2);cout<<"│:做空中简谐运动,受死范围"; SetPos(18,2);Color(2),cout<<"●",Color(0),cout<<" 为普通猪两倍。"; SetPos(19,2);cout<<" 有几率跳起或发射冲击波,冲"; SetPos(20,1);Color(2),cout<<"﹃●",Color(0),cout<<":炸开小鸟与同类,可以引爆TNT!"; SetPos(18,20);Color(5),cout<<"按 y 开始游戏!"; A:if(kbhit()) g=_getch(); if(g!='y') goto A; } int main(){ system("mode con cols=79 lines=22"); CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); srand((unsigned)time(NULL));St:Start();system("cls"); memset(blt,0,sizeof(blt));memset(pig,0,sizeof(pig)); memset(boo,0,sizeof(boo));memset(m,0,sizeof(m)); T=put=K=K2=Sle=What=Pig=Sco=0;pigk=scok=-1; Xy=4,yX=18,yY=6;Blt=20,Bot=20,Pit=60;Color(7); SetPos(19,14);cout<<"■"; SetPos(20,13);cout<<" █▍";m[19][14]=m[20][13]=m[20][14]=1; SetPos(21,0);for(int i=0;i<39;i++) cout<<"■",m[21][i]=1; Color(0);What=rand()%5+1; while(1) { if(Sco>=1500) break; T++;K=0;Color(0); if(Sco!=scok) SetPos(1,1),cout<<"分数:"<<Sco<<' '; if(Pig!=pigk){SetPos(3,1);cout<<"危险值:";int aa=min(Sco/100,10);Pig+=aa; SetPos(3,5);if(Pig<=2) Color(2);else if(Pig<=4) Color(16);else if(Pig<=6) Color(7);else if(Pig<=9) Color(6); else if(Pig<=12) Color(3);else if(Pig<=15) Color(17);else Color(11); for(int i=1;i<=Pig;i++) cout<<"■";Color(0);cout<<' '<<Pig;for(int i=1;i<=5;i++) cout<<" "; if(Pig>18) break;Pig-=aa;} scok=Sco;pigk=Pig; if(GetAsyncKeyState(VK_LEFT)&0x8000&&Xy>0) Move(-2),Xy--,K=1; if(GetAsyncKeyState(VK_RIGHT)&0x8000&&Xy<10) Move(-2),Xy++,K=1; if(K==1) { if(put==0&&Sle==0) Move(0); else Move(-1); } if(kbhit()) { char g=_getch(); if(g=='x'||g=='X') { for(int i=Blt-10;i<=Blt;i++) if(blt[i].go==0&&blt[i].boom==0&&blt[i].W!=1&&blt[i].W!=7) { blt[i].boom=1; if(blt[i].W==2) { Blt++;blt[Blt].W=2;blt[Blt].vy=blt[i].vy*1.2;blt[Blt].vx=blt[i].vx+1; blt[Blt].ax=blt[i].ax;blt[Blt].X=blt[i].X;blt[Blt].Y=blt[i].Y;blt[Blt].boom=1; Blt++;blt[Blt].W=2;blt[Blt].vy=blt[i].vy*0.7;blt[Blt].vx=blt[i].vx-1; blt[Blt].ax=blt[i].ax;blt[Blt].X=blt[i].X;blt[Blt].Y=blt[i].Y;blt[Blt].boom=1; } if(blt[i].W==3) blt[i].vy=fmax(blt[i].vy*1.5,2.5),blt[Blt].vx+=1,blt[i].ax=0; if(blt[i].W==4) { blt[i].vx=-3;blt[i].ax=0.1;Blt++;blt[Blt].boom=1;blt[Blt].W=10; blt[Blt].X=blt[i].X;blt[Blt].Y=blt[i].Y;blt[Blt].ax=blt[i].ax,blt[Blt].vx=1; } if(blt[i].W==5) Bot++,boo[Bot].X=blt[i].X,boo[Bot].Y=blt[i].Y,boo[Bot].S=1,boo[Bot].mS=5,blt[i].go=1; if(blt[i].W==6) blt[i].ay=-1,blt[i].ax=0.3,blt[i].vx=min(blt[i].vx/2,(float)0); break; } } } if(GetAsyncKeyState(' ')&0x8000&&K==0&&Sle==0) { if(put<=5) Move(1),yX=18,yY=Xy+1; else if(put<=20) Move(2),yX=18,yY=Xy; else if(put<=40) Move(3),yX=19,yY=Xy; else if(put<=60) Move(4),yX=20,yY=Xy; else if(put<=80) Move(5),yX=20,yY=Xy+1; else Move(6),yX=20,yY=Xy+2; if(put==0) K2=1;if(put==90) K2=-1; if(K2==1) put+=min(rand()%7+1,90-put); if(K2==-1) put-=min(rand()%7+1,put); Cout(1,17,Xy+2); } if((!(GetAsyncKeyState(' ')&0x8000)&&(put!=0))||(put!=0&&K==1)) Move(-1),Creat(1,put),put=0,yX=18,yY=5,Sle=1,What=rand()%7+1,Creat(-1,-1),Sco=max(Sco-5,0); for(int i=Blt-10;i<=Blt;i++) if(blt[i].go==0) Go(i); for(int i=Bot-10;i<=Bot;i++) if(boo[i].go==0) Boom(i),Cout(2,0,0); for(int i=Pit-50;i<=Pit;i++) if(pig[i].go==0) Kill(i); if(Sle!=0) Move(-1); else if(put==0) Move(0); if(T%300==0) system("cls"),pigk=scok=-1; if(T%100==0) { Color(7); for(int i=0;i<=18;i++) for(int j=0;j<=40;j++) if(m[i][j]==1&&T%100==0) SetPos(i,j),cout<<"■"; SetPos(19,14),cout<<"■",SetPos(20,13),cout<<" █▍"; SetPos(21,0);for(int i=0;i<39;i++) cout<<"■";Color(0); } if(T%min(50,(2000-Sco)/30)==0) Pig++,Creat(0,-1); Sleep(30); } if(Sco<1500) {SetPos(9,17);system("color 7F");Color(11);cout<<"YOU DIE !";} else {SetPos(9,17);system("color 6E");Color(5);cout<<"YOU WIN !";} SetPos(11,16);Sleep(1000);cout<<"play again? (y/n)";Sleep(1000);char g; A:if(kbhit()) g=_getch();SetPos(18,0); if(g=='n') return 0; else if(g!='y') goto A; else if(g=='y') goto St; }
4.贪吃蛇小游戏
/************************贪吃蛇***********************/ /**********************2012-11-20*********************/ #include <iostream> #include <cstdio> #include <cstdlib> #include <ctime> #include <conio.h> #include <cmath> #include <windows.h> using namespace std; HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE); COORD coord; void locate(int x,int y) { coord.X=y; coord.Y=x; SetConsoleCursorPosition(hout,coord); }; void hide() { CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(hout, &cursor_info); } double random(double start, double end) { return start+(end-start)*rand()/(RAND_MAX + 1.0); } int m,n; struct node{ int x,y; }snake[1000]; int snake_length,dir; node food; int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; void print_wall(){ cout << " "; for (int i=1;i<=n;i++) cout << "-"; cout << endl; for (int j=0;j<=m-1;j++) { cout << "|"; for (int i=1;i<=n;i++) cout << " "; cout << "|" << endl; } cout << " "; for (int i=1;i<=n;i++) cout << "-"; } void print_snake(){ locate(snake[0].x,snake[0].y); cout << "@"; for (int i=1;i<=snake_length-1;i++) { locate(snake[i].x,snake[i].y); cout << "*"; } } bool is_correct(){ if (snake[0].x==0 || snake[0].y==0 || snake[0].x==m+1 || snake[0].y==n+1) return false; for(int i=1;i<=snake_length-1;i++){ if (snake[0].x==snake[i].x && snake[0].y==snake[i].y) return false; } return true; } bool print_food() { srand((unsigned)time(0)); bool e; while (1) { e=true; int i=(int) random(0,m)+1,j=(int) random(0,n)+1; food.x=i;food.y=j; for (int k=0;k<=snake_length-1;k++) { if (snake[k].x==food.x && snake[k].y==food.y) { e=false;break; } } if (e) break; } locate(food.x,food.y); cout << "$"; return true; } bool go_ahead() { node temp; bool e=false; temp=snake[snake_length-1]; for (int i=snake_length-1;i>=1;i--) snake[i]=snake[i-1]; snake[0].x+=direct[dir][0]; snake[0].y+=direct[dir][1]; locate(snake[1].x,snake[1].y); cout << "*"; if (snake[0].x==food.x && snake[0].y==food.y) { snake_length++; e=true; snake[snake_length-1]=temp; } if (!e) { locate(temp.x,temp.y); cout << " "; } else print_food(); locate(snake[0].x,snake[0].y); cout << "@"; if (!is_correct()) { system("cls"); cout << "You lose!" << endl << "Length: " << snake_length << endl; return false; } return true; } int main(){ cout << RAND_MAX; cout << "--------------------贪吃蛇---------------------" << endl; cout << "请先输入两个数,表示地图大小.要求长宽均不小于10." << endl; cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl; cout << "再选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl; cout << "如果你碰到了墙,就会游戏失败,系统会清算你的长度." << endl; cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl; cout << "-----------------------------------------------" << endl; cin >> m >> n; if (m<10 || n<10 || m>25 || n>40) { cout << "ERROR" << endl; system("pause"); return 0; } int hard; cin >> hard; if (hard<=0 || hard>100) { cout << "ERROR" << endl; system("pause"); return 0; } snake_length=5; clock_t a,b; char ch; double hard_len; for (int i=0;i<=4;i++) { snake[i].x=1; snake[i].y=5-i; } dir=3; system("cls"); hide(); print_wall(); print_food(); print_snake(); locate(m+2,0); cout << "Now length: "; while (1) { /*** 难度随长度增加而提高 ***/ hard_len=(double)snake_length/(double) (m*n); /*** 调节时间,单位是ms ***/ a=clock(); while (1) { b=clock(); if (b-a>=(int)(400-30*hard)*(1-sqrt(hard_len))) break; } /*** 接受键盘输入的上下左右,并以此改变方向 ***/ if (kbhit()) { ch=getch(); if (ch==-32) { ch=getch(); switch(ch) { case 72: if (dir==2 || dir==3) dir=0; break; case 80: if (dir==2 || dir==3) dir=1; break; case 75: if (dir==0 || dir==1) dir=2; break; case 77: if (dir==0 || dir==1) dir=3; break; } } } /*** 前进 ***/ if (!go_ahead()) break; /*** 在最后输出此时长度 ***/ locate(m+2,12); cout << snake_length; } system("pause"); return 0; }
5.飞翔的小鸟简易版
#include<iostream> #include<cstdlib> #include<conio.h> #include<windows.h> using namespace std; int x=50; //边界的x和y int y=20; int birdx=x/5; int birdy=y/4; int speed=0;//控制速度 int speed2=0;//控制障碍物的来临速度 int xx=x/2;//障碍物的x坐标 int yy= rand()%(y/2); int count=0;//记录笨鸟的得分 void notin(); void in(); void gotoxy(int x,int y) { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x; pos.Y =y; SetConsoleCursorPosition(handle,pos); } void HideCursor() { CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); } void show()//开始的初始化(达到循环显示的目的) { gotoxy(0,0) ; HideCursor() ; for(int i=1;i<y;++i){ for(int j=1;j<x;++j){ if(j==birdx&&i==birdy){ cout<<"\b"<<"鸟"; //\b的作用是因为输出的汉字多占了一个大小的空间,\b删除之前一个位置的输出 } else if(j==xx&&(i>=1&&i<=yy)||j==xx&&(i>=yy+5&&i<=y)) cout<<"*" ; else cout<<" "; } cout<<endl; } cout<<"得分:"<<count/6<<endl; } void in() { if(kbhit()) { string ss; ss=getch(); if(ss==" ") { if(birdy>3)birdy-=3; } } } void notin() //改变小鸟的位置和障碍物的位置 { if (birdx==xx&& (birdy>=yy&&birdy<=yy+5)) count+=1; if(speed!=3) { speed++; } if(birdy!=y&&speed==3) { birdy+=1; speed=0; } if(speed2!=5) { speed2++; } else if(speed2==5) { if(xx>0) { xx--; } if(xx==0) { xx=x/2;//障碍物的x坐标 yy= rand()%(y/2); while(yy==0) { yy= rand()%(y/2); } } speed2=0; } } int main() { while(yy==0) { yy= rand()%(y/2); } while(1) { show(); notin(); in() ; if(birdx==xx&&(((birdy>1&&birdy<yy))||(birdy >yy+5&&birdy<y))) { cout<<"YOU ARE FILLED!!"<<endl; break; } } return 0; }
6.生化危机游戏
/* 游玩提示: 1.开局让输入1~7,输入8,可以开挂(可以拥有子弹和食物共20000000份). 2.假如没有开挂,让输入子弹,食物时,输入666666 5201314,可以开启秘籍(最多拥有999份子弹和999份食物). */ #include<bits/stdc++.h> #include<windows.h> #include<time.h> #include<conio.h> using namespace std; int mzhg,zd,swhm,qxs,swx,sn,mp,tongguan,sw1,zd1,sn1,mz1,mp1,zbbj,ccg,mzzd,mz,tongguan1,sw,x,s,cdd,jg,qiang,gun,by,vv,gjj[100],hjj[100],zjj[100],kg=0,ch; void Read() { ifstream in("丧尸危机存档.in"); in>>mzhg>>zd>>swhm>>qxs>>swx>>sn>>mp>>tongguan>>sw1>>zd1>>sn1>>mz1>>mp1>>zbbj>>ccg>>mzzd>>mz>>tongguan1>>sw>>x>>s>>cdd>>jg>>qiang>>gun>>by>>vv; for(int i=0; i<=99; i++) in>>gjj[i]; for(int i=0; i<=99; i++) in>>hjj[i]; for(int i=0; i<=99; i++) in>>zjj[i]; in.close(); } void Save() { ofstream out("丧尸危机存档.in"); out<<mzhg<<' '<<zd<<' '<<swhm<<' '<<qxs <<' '<<swx<<' '<<sn<<' '<<mp<<' '<<tongguan<<' '<<sw1<<' '<<zd1<<' '<<sn1<<' '<<mz1<<' '<<mp1<<' '<<zbbj<<' '<<ccg<<' '<<mzzd<<' '<<mz<<' '<<tongguan1<<' '<<sw<<' '<<x<<' '<<s<<' '<<cdd<<' '<<jg<<' '<<qiang<<' '<<gun<<' '<<by<<' '<<vv<<'\n'; for(int i=0; i<=99; i++) out<<' '<<gjj[i]; out<<'\n'; for(int i=0; i<=99; i++) out<<' '<<hjj[i]; out<<'\n'; for(int i=0; i<=99; i++) out<<' '<<zjj[i]; out<<'\n'; out.close(); } void Slowsay(string a) { int l=a.size(); for(int i=0; i<l; i++) { cout<<a[i]; Sleep(20); } printf("\n"); Sleep(100); } int read() { char ch=_getch(); while(ch>'9'||ch<'0') ch=_getch(); return ch-48; } void qp() { system("cls"); if(swx==2) Slowsay("王,"),zd=99999,sw=99999; Slowsay("当前你的状态是\n"); printf("子弹 %d,食物 %d\n",zd,sw); } int esl(){ system("cls"); Slowsay("你,饿死了。\n"); if(vv==0) ch=_getch(); hjj[1]=1; Slowsay("Bad End 1\n"); ch=_getch(); s++; return 0; } int mzd(){ hjj[2]=1; system("cls"); Slowsay("你,被丧尸咬死了。\n"); if(vv==0) ch=_getch(); Slowsay("Bad End 2\n"); ch=_getch(); s++; return 0; } int hd1(){ system("cls"); Slowsay("在某一天,你家门口响起了敲门声,你打开门,外面的发现让你欣喜若狂\n"); Slowsay("政府的救援部队已经消灭了这个城市的丧尸,\n他们在这个城市的各个角落搜索着可能存在的幸存者.\n"); Slowsay("Happy End-----苟到最后\n"); Sleep(1000); gjj[1]=1; return 0; } int hd2(){ system("cls"); Slowsay("在与妹子相处的这些时间里,你与她相爱了\n"); Slowsay("你们的生活是那样的幸福\n"); Slowsay("直到有一天......\n"); Slowsay("基地首领希望你去执行一个任务,你选择\n"); Slowsay("1.独自一人前往\n"); Slowsay("2.和妹子一起去\n"); while(true){ int x; x=read(); if(x<1||x>2){ Slowsay("请重新输入\n"); continue; } if(x==1){ Slowsay("当你完成任务回来的时候,发现——\n"); Slowsay("基地被丧尸攻破了\n"); Slowsay("这个基地的所有人都被丧尸杀了,一个人都没跑出来\n"); hjj[4]=1; Slowsay("Bad End 4"); s++; } if(x==2){ Slowsay("当你和妹子完成任务回来时,\n"); Slowsay("基地已经变成一片废墟了\n"); Slowsay("你和妹子没有办法,只能到处流浪\n"); Slowsay("不过,两个人总比一个人要好\n"); gjj[2]=1; Slowsay("Happy End------神仙眷侣"); } break; } Sleep(1000); return 0; } int hd3(){ system("cls"); Slowsay("你就这样平静的生活在这个基地里\n"); Slowsay("直到某一天,大量的丧尸进攻了这里\n"); if(zd>9){ Slowsay("每个人都在尽自己的努力去守卫基地\n"); Slowsay("每个人都做到了自己能做到的\n"); Slowsay("最后,奇迹出现了\n"); Slowsay("大家成功守住了基地\n"); Slowsay("而你,也因为在守卫过程中立下大功成为了这个基地的英雄\n"); Slowsay("顺便说一句,到死了你也没女朋友\n"); gjj[3]=1; Slowsay("Happy End-----英雄不朽"); return 0; } Slowsay("丧尸的数量实在太多了,\n"); Slowsay("尽管基地的大家都在尽全力防守\n"); Slowsay("可基地还是被攻破了\n"); Slowsay("而你,也死在了这里\n"); s++; hjj[5]=1; Slowsay("Bad End 5"); Sleep(1000); } int hd4(){ system("cls"); Slowsay("在于少年相处的这些时间里"); Slowsay("你尽力地保护着他"); Slowsay("而他也常常给你带来惊喜"); Slowsay("慢慢的,你开始认清你自己"); Slowsay("你是个gay"); Slowsay("于是,你就和少年性福快乐的生活在了一起"); Slowsay("Happy End-----认清自己"); gjj[4]=1; Sleep(1000); } int td(){ system("cls"); char ch; Slowsay("那箱饼干与你的枪一起发出了强光\n"); Slowsay("紧接着,他们融为了一体\n"); Slowsay("当光芒散去时,整个世界都发生了变化\n"); Slowsay("所有的丧尸都变回了人类\n"); Slowsay("伟大的勇士!丧尸危机终于解除了!!接下来,是普天同庆的大狂欢!!!\n"); Slowsay("True End-----拯救世界\n"); Sleep(1000); Slowsay("???????????????????????????????????"); Slowsay("......这是怎么回事......"); Slowsay("......为什么......"); Slowsay("......不是普通的......"); Slowsay("......从何而来......"); Sleep(1000); Slowsay("。 。 。 。 。 。是谁。 。 。 。 。 。"); Slowsay("你陷入沉思。"); if(zjj[1]!=1){ Slowsay("获得线索-----奇特的枪与饼干"); } zjj[1]=1; Sleep(1000); } int td2(){ system("cls"); char ch; Slowsay("你的变异已经开始了"); Slowsay("你开始疯狂的进食,直到把自己的胃撑破"); Slowsay("然后,就眼前一黑失去意识"); Slowsay("再次醒来时,你已经是一个丧尸了"); Slowsay("奇怪的是,你还保留着自己的意识"); Slowsay("你感觉到自己的力气变得更大,速度变得更快"); Slowsay("或许变成丧尸也不错————你这样想着"); Slowsay("True End-----认清!·本我"); if(zjj[2]!=1){ Sleep(2000); Slowsay("获得线索-----延迟变异!·少年"); } zjj[2]=1; Sleep(1000); } int bd8(){ Slowsay("坐在椅子上的是一个15岁左右的少年"); Slowsay("正在你因为他的年龄而惊讶时"); Slowsay("少年却站了起来,看向了你身后的妹子"); Slowsay("“差不多了吧”,妹子这样说道"); Slowsay("“可以了”,这是少年的回答"); Slowsay("然后,你就感到脖子一阵剧痛"); Sleep(1000); Slowsay("在你失去意识前,妹子一直没有松口。"); s++; Slowsay("Bad End 8"); if(hjj[8]==0){ Sleep(2000); Slowsay("获得线索-----早已变异!·妹子"); } hjj[8]=1; Sleep(1000); } int td3(){ system("cls"); Slowsay("你和妹子冲出了丧尸的围杀,"); Slowsay("可是当你们来到那个幸存者基地时"); Slowsay("却发现那个基地有一些不对"); Slowsay("所有人都死气沉沉的"); Slowsay("你们直接走向了首领的房间"); Sleep(1000); if(zjj[2]==1&&zjj[3]==1){ bd8(); return 0; } Slowsay("换完子弹的你想离开"); Slowsay("就在你快要离开的时候,妹子抓住了你的手"); Slowsay("“我喜欢你,别走”,她这样说"); Slowsay("于是,你留了下来"); Slowsay("你们的生活是那样的幸福"); Slowsay("直到有一天......"); Sleep(1000); Slowsay("基地首领希望你去执行一个任务,\n"); Slowsay("在执行任务的过程中"); Slowsay("妹子曾被丧尸咬到过一口"); Slowsay("她以为你没有发现"); Slowsay("而你却在远处看到了这一幕"); Slowsay("奇怪的是,她却并没有变异\n"); Slowsay("那一刹那你突然想起,"); Slowsay("你们的房间里,总是弥漫着一股血腥的味道......"); Sleep(1000); Slowsay("Happy End------神仙眷侣"); Sleep(1000); Slowsay("???????????????????????????????????"); Slowsay("True End------认清?·妹子"); if(zjj[3]==0){ Sleep(2000); Slowsay("获得线索-----不变异?·妹子"); } zjj[3]=1; Sleep(1000); } int td4(){ system("cls"); Slowsay("当丧尸危机爆发时,你正呆在家里\n"); char ch=_getch(); if(vv==0) ch=_getch(); system("cls"); Slowsay("当丧*#******丧尸危机*$*&*^&*机爆发时,**你正呆***&*爆发******#在家里**\n"); Sleep(1000); Slowsay("***检*#******测到*不**丧尸危**88机*$匹*$**机爆发时,**配***#在家里****\n"); Sleep(2000); Slowsay("L当****#OG****I危机*$N**E机爆***(RR*8%#404)**发时,**你O*****#在家R里!\n"); Sleep(2000); system("cls"); if(vv==0) ch=_getch(); Slowsay("有什么不对劲"); Slowsay("你这样想着"); Slowsay("过去了好多天,\n你还是一个人都没有遇到,\n除了丧尸就是丧尸"); Slowsay("为什么他们......不见了?"); Slowsay("\n"); Slowsay("True End------验证失败"); zjj[4]=1; if(zbbj==0) Slowsay("进阶线索-----乱码,废弃与失联"),zbbj=1; Sleep(1000); } int td5(){ system("cls"); Slowsay("当少年死去后,整个世界好像变得不同了"); Slowsay("所有的活人在一瞬间消失"); Slowsay("所有的丧尸当场去世"); Slowsay("你的眼前只剩下了黑暗"); Slowsay("不知道过去了多久,你死了"); Slowsay("Bad End......"); Sleep(1000); Slowsay("不,还没有结束"); Slowsay("虽然好像和往常死去之后的感觉一样"); Slowsay("但是。。。好像。。。"); Sleep(1000); Slowsay("有延迟?。。。"); Slowsay("。。。在这段时间里,你的思考一直没停。。。"); Slowsay("True End-----死亡姗姗来迟"); s++; if(zjj[5]==0) Slowsay("进阶线索-----少年之死"); zjj[5]=1; Sleep(1000); } int tg3(){ Slowsay("当你再次睁开眼时"); Slowsay("你发现自己躺在一个营养仓内"); Slowsay("你无比的确认这就是真实的世界"); Slowsay("脑中的一切开始明晰起来"); Slowsay("你认为自己知道了一切的真相"); Slowsay("去杀光人类吧!!!!"); Slowsay("你这样想着"); Slowsay("在身着白大褂的丧尸们的欢呼声中"); Slowsay("你打碎了玻璃,跑出了营养仓"); Slowsay("来到了外面这个被战争破坏得满目疮痍的世界"); Slowsay("战火硝烟,炮声隆隆"); Slowsay("你熟练的发出嘶吼,呼唤着周围的丧尸"); Slowsay("你指挥着他们,毁掉了一个又一个人类的基地"); Slowsay("最后,在这场世纪战争中,丧尸们艰难地取得了胜利"); Slowsay("作为它们的英雄,你自豪的统治着世界。"); Slowsay("虽然,其实,在那些你不知道的地方"); Slowsay("一个个一样的营养仓中,装着一个个一样的你。"); Slowsay("---------------游戏终极剧情通关-------------"); tongguan1=2; Save(); Sleep(1000); } int tg2(){ Slowsay("当你再次睁开眼时"); Slowsay("你发现自己躺在一个营养仓内"); Slowsay("你无比的确认这就是真实的世界"); Slowsay("可是你却发现自己没法操纵身体"); Slowsay("隔着玻璃,一个黑色的身影正在操作着"); Slowsay("你清晰的看见那个人的大脑裸露出来,与你的接在一起"); Slowsay("这时,又有一大波记忆涌入脑海。"); Slowsay("“少年与妹子......是以“成功者”“英雄”“神话传说”为原型创造的人物......”"); Slowsay("“游戏中的情节与场景......取材于现实世界真实案例......”"); Slowsay("再往后,你的脑中一片混乱。"); Slowsay("“...舍弃.........熟练..我....智慧..学习........获得.....”"); Slowsay("“.....种族...探索.......杀...进化.........帮助..需要.....”"); Slowsay("“...成熟....兵器.....无敌..下风.......战争...伟大.....英雄.....”"); Slowsay("激昂的声音一直回荡着。"); Slowsay("---------------游戏进阶剧情通关-------------"); tongguan1=1; Sleep(1000); } int td6(){ Slowsay("一天以后,少年回来了"); Slowsay("一起回来的还有妹子"); Slowsay("“找到了......”"); Slowsay("少年的手中拿着一个破损的铭牌"); Slowsay("铭牌上的字迹很诡异,但写着熟悉的内容:"); Slowsay("【22-08-03...】"); Slowsay("“你的......”"); Slowsay("妹子神色复杂的看了你一眼"); Slowsay("“我们是一类人......”"); Slowsay("“现在,让我把你带出去吧。”"); if(qxs==1&&swx==0) { tg2(); return 0; } else { Slowsay("一股强烈的撕扯感出现到了你身上"); if(swx==1) Slowsay("此时的你,是如此渴望着死亡与结局\n你大笑着张开双臂,迎接了死亡。"); else Slowsay("此时的你并不能接受如此巨大的伤害"),Slowsay("你死了。"); Slowsay("Bad End 14"); if(hjj[14]==0) Slowsay("进阶线索-----外面的世界"); hjj[14]=1; s++; } Sleep(1000); } int bd6(){ system("cls"); Slowsay("你感觉到自己正在变异,"); Slowsay("意识开始逐渐模糊起来"); Slowsay("你的肚子正无比渴望着食物,你啃噬着触及的一切!"); Slowsay("但是不够,你的身躯饿得干枯,你甚至开始食用自己的躯体!"); Slowsay("接着,你眼前一黑,再也没有醒来......"); s++; hjj[6]=1; Slowsay("Bad End 6"); Sleep(1000); } int bd3(){ system("cls"); char ch; Slowsay("长久的等待终于让你失去了理智,你疯了。\n"); Slowsay("Bad End 3\n"); hjj[3]=1; Sleep(1000); if(mp==-1){ Slowsay("当政府的救援队打开你家的门时,你嘶吼着扑了上去"); if(zd>0) Slowsay("他们试图将你击毙,却被你提前一枪击倒"); else{ Slowsay("你被他们击毙了"); Slowsay("Bad End 12"); s++; hjj[12]=1; return 0; } Slowsay("你如同一个熟练的猎手,狩猎着救援队"); Slowsay("当他们全部死去后,你开始享用起你的大餐"); Slowsay("Bad End 13"); if(by==0) Sleep(2000),Slowsay("进阶线索-----早已变异!·本我"),by=1; hjj[13]=1; return 0; } s++; } int bd7(){ s++; system("cls"); Slowsay("你,被狗咬死了"); Slowsay("Bad End 7"); hjj[7]=1; Sleep(1000); } int bd15(){ s++; Slowsay("你发现这笔迹有些不对"); Slowsay("就好像是新写上去的一样"); Slowsay("认字迹的话,好像还十分熟悉"); Sleep(1000); Slowsay("正当你想的入迷的时候,你的脖子被咬住了"); Slowsay("在死前,你隐约听到了少年的声音,“Again.”"); Slowsay("Bad End 15"); if(hjj[15]==0) { Sleep(2000); Slowsay("进阶线索-----伪造......"); } hjj[15]=1; Sleep(1000); } int tgg3(){ system("cls"); Slowsay("你杀掉了少年,并吃掉了他的尸体"); Slowsay("世界开始崩塌"); tg3(); Sleep(1000); } int bd9(){ s++; system("cls"); Slowsay("诡异的是,当你杀光了跟来的丧尸后,发现地下室里并没有丧尸"); Slowsay("这里有的,只是一个穿着白大褂的尸体"); Slowsay("在尸体的衣服口袋中,你找到了一个笔记本"); Slowsay("****(无法辨认)1号****进展*****永生**"); Slowsay("今********,*号诞生了,他比其*****更*"); Slowsay("有些不对,*****的发育*****太快***"); Slowsay("2号的**被***出有*****强感染性*****"); Slowsay("**********************************"); Slowsay("***瓶颈,或许我们**应该****活体样本"); Slowsay("**,**样本*****失去活性,*****但**在动\n"); if(mp==-1) { bd15(); return 0; } Slowsay("正当你看的入迷的时候,你的脖子被咬住了"); Slowsay("在死前,你隐约听到了少年的声音,“Again.”"); Slowsay("Bad End 9"); if(hjj[9]==0) { Sleep(2000); Slowsay("获得线索-----实验体·1号和2号"); } hjj[9]=1; Sleep(1000); } int tg(){ system("cls"); Slowsay("不知为何,当你走到这里时,感到世界在一瞬间发生了变化"); Slowsay("你不知道这个变化发生在那里,你只知道,现在的世界十分违和"); Slowsay("或许,这个世界不是真实的"); Slowsay("当你的脑中出现了这个的时候,你眼前的世界,蹦塌了"); Slowsay("于此同时,大量记忆冲进了你的脑海"); Slowsay("不,它们只是回来了,这本身就是你的记忆"); Slowsay("他们在一开始被一些虚假的记忆所替换"); Slowsay("从记忆中,你得知你此时正在玩一个vr游戏"); Slowsay("少年与妹子则是游戏的npc"); Slowsay("这款游戏号称有着超强的代入感"); Slowsay("你在发售当天就买来玩了"); Slowsay("“这游戏真是了不起啊”,你这样想着,“再玩一次吧”"); Slowsay("...是啊,没错,这一切只是游戏,游戏。............"); Sleep(1000); Slowsay("躺在仓中的你,自始至终,都没有睁开眼。"); Slowsay("---------------游戏基础剧情通关-------------"); cdd=0; tongguan=1; Sleep(1000); } int cg(){ system("cls"); Slowsay("你感觉到违和感在不断加深"); Slowsay("世界好像不再是真实的"); Slowsay("你现在脑中只有一种想法\n"); Sleep(1000); Slowsay("活下去!越久越好!!!"); Sleep(1000); } int cg2(){ system("cls"); system("Color C"); Slowsay("违和感在此时已经聚集到了顶峰\n"); Slowsay("你的脑中想清楚了一切\n"); Slowsay("1.那么,下一步是 杀光他们\n"); Slowsay("2.那么,下一步是 团结起来\n"); x=read(); if(x==1) Slowsay("已立起尸王线flag,接下来,去打通全 15 badend!"),swx=1,qxs=1; else Slowsay("“看来你还是没懂啊......”背后传来冷冷的声音\n\n“ A G A I N . ”"); system("Color F"); Sleep(1000); } int Swx(){ system("cls"); Slowsay("哈。。。哈。。。哈。。。。。。"); Slowsay("我。。。已经完成了。。。"); Slowsay("所有的死法。。。我都体验了一遍了。。。"); Slowsay("我。。。一直是只丧尸吧。。。"); Slowsay("无论被打倒多少次。。。我都会站起来继续。。。"); Slowsay("只要是我想通的结局。。。我便一定会通掉它。。。"); Slowsay("只要是我想杀的人。。。我便一定会杀死他。。。"); Slowsay("只要是我想知道的真相。。。我便一定会知晓它。"); Slowsay("我。。。已经不是以前的那个懦弱无能的我了。。。"); Slowsay("这一轮。。。我。。。要成为王!!!\n"); Slowsay("在实验室中,为首者发出低哑的嘶吼:"); Slowsay("所有人员一级戒备!实验,进入最后阶段!!"); Slowsay("------------终极剧情-尸王线开启!------------"); cdd=0; } int bd10(){ system("cls"); Slowsay("你发现了另一个基地"); Slowsay("弹尽粮绝的你选择加入了他们"); Slowsay("之后的每一天都十分单调"); Slowsay("外出寻找物资,然后天黑了回家睡觉"); Slowsay("应该是这样吗?"); Slowsay("也许吧"); Slowsay("Bad End 10"); hjj[10]=1; Sleep(1000); } int hd5(){ Slowsay("没关系的,一切都会过去的"); Slowsay("你这样说的"); Slowsay("他似乎感觉到了你的善意,一点一点向你靠近"); Slowsay("你紧紧的抱住了他"); Slowsay("我会保护好你的"); Sleep(1000); Slowsay("Happy End-----跨越物种的gay~"); Sleep(1000); } int sswj(){ Save(); system("cls"); int w=0; mp=0; if(tongguan==1&&zjj[4]==0) { Slowsay("检测到你已通关,是否领取特殊物品\n"); Slowsay("1.领取"); Slowsay("2.不领取"); while(true) { x=read(); if(x==1) mp=-1; if(x==2) { td4(); return 0; } break; } }else if(tongguan==1){ Slowsay("检测到你已通关,已领取特殊物品\n"); mp=-1; } char ch; if(cdd==1){ Slowsay("是否读取存档\n"); Slowsay("1.读取\n"); Slowsay("2.不读取\n"); x=read(); if(x==1){ sw=sw1; zd=zd1; sn=sn1; mz=mz1; mp=mp1; goto cddd1; } } system("cls"); Slowsay("当丧尸危机爆发时,你正呆在家里\n"); if(vv==0) ch=_getch(); if(kg==1){ Slowsay("你有200000000点物资可以分配到子弹和食物上"); }else{ Slowsay("你有10点物资可以分配到子弹和食物上"); } if(swx==2) Slowsay("...\n\n但是!不!我已经不会再惧怕食物短缺与丧尸小兵了!\n\n我,应当是世界的王!!\n"),zd=99999,sw=99999; else { if(vv==0) ch=_getch(); int x,y; qiang=0; gun=0; zd=0; sw=0; mz=0; mzzd=0; sn=0; mzhg=0; Slowsay("\n请输入你的选择(此次输入需键入回车,例:5 5 )\n"); //输入666666 5201314可以得到999份食物和999份子弹 while(true){ scanf("%d%d",&x,&y); zd=x; sw=y; if((kg==0? x+y!=10:x+y!=200000000)||x<0||y<0){ if(x==666666&&y==5201314){ Slowsay("启用秘籍\n"); Slowsay("请输入你真正需要的子弹数和食物数(上限:999 )\n"); scanf("%d%d",&x,&y); zd=min(x,999); sw=min(y,999); break; } Slowsay("请重新输入\n"); w++; if(w>5) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); Slowsay("行了行了,这只是第一个选择而已\n"), Slowsay("有必要这么皮吗\n"), Slowsay("自动分配食物3个子弹7个\n"); if(vv==0) ch=_getch(); sw=3,zd=7; break; } } else break; } } Slowsay("你的家里是个较为安全的地方,你可以选择搜索你家的物资或是去邻居家看看\n"); if(vv==0) ch=_getch(); Slowsay("1.留在家中\n"); Slowsay("2.前往邻居家\n"); while(true) { x=read(); if(x!=1&&x!=2) Slowsay("请重新输入\n"); else if(x==1) { if(swx==2) { Slowsay("饿啊!为什么我还呆在家里!!"); break; } else { Slowsay("在二楼,你发现了一些食物食物+3\n"); if(vv==0) ch=_getch(); Slowsay("在家里过了一夜,食物-1\n"); sw=sw+2; break; } } else { if(swx==2) { Slowsay("可恶!为什么邻居家里没有人!!"); break; } else { Slowsay("在前往邻居家的路上,你遇到了丧尸\n"); if(vv==0) ch=_getch(); if(zd<1) { Slowsay("你朝他开了一枪,不过枪里没有子弹,你被他咬死了\n"); if(vv==0) ch=_getch(); hjj[11]=1; Slowsay("Bad End 11\n"); s++; if(vv==0) ch=_getch(); Slowsay("另外在说一句,一个子弹都不带,还到处乱浪,你是真的作"); return 0; } else { Slowsay("你用你手中的枪结束了他的生命,子弹-1\n"); zd=zd-1; if(vv==0) ch=_getch(); Slowsay("邻居家里不知为何并没有人,你在仔细搜索后发现了一个弹夹,里面有4发子弹\n"); zd+=4; if(vv==0) ch=_getch(); Slowsay("在邻居家过了一夜后,食物-2\n"); sw=sw-2; if(sw<0) { esl(); return 0; } } break; } } } if(vv==0) ch=_getch(); qp(); Slowsay("你回想起这附近有一座商场,你决定\n"); if(vv==0) ch=_getch(); Slowsay("1.前往商场\n"); Slowsay("2.到处乱走\n"); Slowsay("3.留在屋子里\n"); while(true) { x=read(); if(x!=1&&x!=2&&x!=3) { Slowsay("请重新输入\n"); continue; } if(swx==2&&x==1) { system("cls"),Slowsay("你循着残存的记忆前往商场,找到了适合你膨胀体型的衣服,可以继续隐藏下去。\n\n"),mz=1; break; } else if(swx==2&&x==2) { system("cls"),Slowsay("你到处乱走,见人即杀,丧尸与人类的血混合着溅满了街道,\n惨叫连连,火光接天,如同末世一般。\n你站在尸山上狂笑,不屑于看那些渺小的灵魂。\n\n然而,你丝毫没有注意,一个娇小的身影远远的看到了你,捂着嘴逃之夭夭。\n\n"),mz=10086; break; } else if(swx==2&&x==3) { system("cls"); Slowsay("你如一名老练的猎手忍耐着饥饿,终于等来了敲门声。\n你得意洋洋的屠杀着这送上门来的大餐\n并跟踪着逃兵进入了幸存者基地。\n那一天,残阳似血,为浸染大地的红再镶上一道道金光。\n\n"); Sleep(1000); return 0; } else if(x==3) { if(sw<2) { esl(); return 0; } Slowsay("无聊正在逐渐消磨你的意志,但你还是坚持了下来。食物-2\n"); sw=sw-2; if(vv==0) ch=_getch(); Slowsay("之后的每一天你都是这样,独自一人在家中等待救援\n"); if(vv==0) ch=_getch(); Slowsay("在过了好久之后\n"); cout<<mp; if(sw<6) { esl(); return 0; } x=rand()%2; if(x==1&&mp==0) { hd1(); return 0; } else { bd3(); return 0; } } else if(x==2) { int xx=rand()%3; if(xx!=0) { Slowsay("在到处乱走的过程中,你遇到了来自世界各地的丧尸,子弹-2\n"); if(zd<2) { mzd(); return 0; } zd=zd-2; } else { Slowsay("在到处乱走的过程中,你走入了一处曾为战场的废墟\n"); if(vv==0) ch=_getch(); Slowsay("你循着硝烟味,终于找到了军队残留的弹药箱,子弹+6\n"); zd+=6; } break; } else if(x==1) { if(zd<4) { mzd(); return 0; } Slowsay("在前往商场的过程中,你遇到了丧尸,子弹-4\n"); zd=zd-4; if(vv==0) ch=_getch(); Slowsay("你在商场发现了食物与子弹,食物+3,子弹+2\n"); sw=sw+3; zd=zd+2; break; } } if(mz!=10086) { Slowsay("你在回家的路上发现了一个女幸存者\n"); if(vv==0) ch=_getch(); Slowsay("她试图向你讨要食物,你的选择是\n"); Slowsay("1.不给\n"); Slowsay("2.给她2份食物\n"); Slowsay("3.给她2份子弹\n"); Slowsay("4.给她一枪\n"); while(true) { x=read(); if(x<1||x>4) { Slowsay("请重新输入。\n"); continue; } if(x==1) { Slowsay("妹子生气的走了。\n"); if(vv==0) ch=_getch(); } if(x==2) { if(sw<2) { Slowsay("食物不足\n"); continue; } sw=sw-2; mzhg++; Slowsay("你的食物-2,妹子好感度+1\n"); if(vv==0) ch=_getch(); } if(x==3) { if(zd<2) { Slowsay("子弹不足\n"); continue; } mzzd=1; Slowsay("你给了妹子两份子弹,妹子离开了\n"),zd=zd-2; if(vv==0) ch=_getch(); } if(x==4) { if(zd<1) { Slowsay("子弹不足\n"); continue; } zd=zd-1; Slowsay("你一枪杀死了妹子,并从她的尸体上找到了4份食物\n"); sw=sw+4; mzhg=-1; if(swx==2) Slowsay("你吃掉了妹子的尸体,真是人间佳肴!\n"),mzhg=-10086; } if(swx==2&&x!=4) Slowsay("你看着妹子的背影在心中狂笑\n"),mzhg=10086; break; } } Slowsay("又过了一夜,你的食物-2\n"); if(vv==0) ch=_getch(); qp(); sw=sw-2; if(sw<0) { esl(); return 0; } if(mzhg==1) Slowsay("那个妹子又来找到了你,并邀请你加入他们的幸存者基地\n"); else Slowsay("你在附近发现了一个幸存者基地\n"); if(swx!=2) { Slowsay("在前往基地的途中,你遇到了丧尸\n"); Slowsay("你且战且退,大量丧尸把你逼进了一家商店\n"); Slowsay("门口的丧尸越来越多,你选择\n"); Slowsay("1.杀出去\n"); Slowsay("2.守在这\n"); while(true) { x=read(); if(x<1||x>2) { Slowsay("请重新输入\n"); continue; } if(x==1) { int res=0; if(mzhg>0) res=1; else res=3; if(zd<res) { mzd(); return 0; } zd=zd-res; printf("你消耗了一些子弹冲了出去,子弹-%d\n",res); if(mzzd==1&&mp==-1) { Slowsay("妹子在她杀死的丧尸的尸体上找到了许多物资,子弹+7,食物+3\n"); zd=zd+7; sw=sw+3; mz=1; break; } x=rand()%5; if(res==1&&x!=3) Slowsay("妹子为了帮你突围,被丧尸咬到,然后自杀了。\n"),mzhg=-1; if(x==3&&res==1) { td3(); return 0; } } else if(x==2) { if(zd<5) { mzd(); return 0; } zd=zd-5; Slowsay("你守在这家商店里直到杀死了所有找来的丧尸,子弹-5\n"); if(mzhg==1){ Slowsay("妹子在商店中发现了一把有很多子弹的废弃的枪,子弹+10086\n"); zd+=10086; if(vv==0) ch=_getch(); Slowsay("但是妹子在翻找货架的时候被沾了丧尸血的货架划伤\n"); Slowsay("妹子自杀了\n"); mzhg=-1; } } break; } } if(vv==0) ch=_getch(); qp(); Slowsay("你来到了这个幸存者基地\n"); if(mz==10086) { system("cls"); Slowsay("人们在一位年轻首领的带领下顽强的与你战斗\n每个人都在尽自己的努力去守卫基地\n哪怕战友们一个个倒下\n哪怕首领被你愤怒的捏爆脑袋\n没有一个人放弃战斗,没有一个人抛弃希望\n\n最后,奇迹出现了\n\n在基地的废墟中,你的尸体沉重的倒下。\n\n"); s++; Sleep(1000); return 0; } Slowsay("这个基地的首领表示可以用子弹交换你手中的食物\n"); printf("你还有%d份食物,%d份子弹\n",sw,zd); if(vv==0) ch=_getch(); Slowsay("请输入你需要的子弹数(0-9)\n"); while(true) { x=read(); if(x<0||x>sw) { Slowsay("请重新输入\n"); continue; } sw=sw-x; zd=zd+x; if(x>=1) { Slowsay("首领很开心你能提供稀缺的食物,多给了你1份子弹\n"); zd=zd+2; } break; } if(vv==0) ch=_getch(); qp(); Slowsay("又过了一天,食物-2"); sw=sw-2; if(sw<0) { esl(); return 0; } if(vv==0) ch=_getch(); system("cls"); Slowsay("基地首领希望你加入这个基地\n"); Sleep(500); Slowsay("你的选择是\n"); Sleep(500); system("Color C"); Slowsay("1.留在这"); Slowsay("2.离开"); while(true) { x=read(); if(x<1||x>2) { Slowsay("请重新输入\n"); continue; } system("Color F"); if(swx==2&&x==1) { system("cls"); Slowsay("在一个月黑风高的夜里,你终于忍不住袭击了营地。\n年轻首领被你梦中封喉。\n人们顽强的与你战斗\n每个人都在尽自己的努力去守卫基地\n没有一个人放弃战斗,没有一个人抛弃希望\n但是他们失败了。\n在基地的废墟中,英雄们的尸体沉重的倒下。\n\n而你狂笑着吞噬着一切。\n\n"); Sleep(1000); return 0; } else if(x==1) { if(mzhg>-1) hd2(); else hd3(); return 0; } else if(x==2) { Slowsay("你决定\n"); Slowsay("1.当天离开\n"); Slowsay("2.再停留一天\n"); while(true) { x=read(); if(x<1||x>2) { Slowsay("请重新输入\n"); continue; } if(x==1) break; if(x==2) { if(vv==0) ch=_getch(); qp(); Slowsay("这个基地的首领表示可以用子弹交换你手中的食物\n"); printf("你还有%d份食物,%d份子弹\n",sw,zd); if(vv==0) ch=_getch(); Slowsay("请输入你需要的子弹数\n"); while(true) { x=read(); if(x<0||x>sw) { Slowsay("请重新输入\n"); continue; } sw=sw-x; zd=zd+x; if(x>=3) { Slowsay("首领很开心你能提供稀缺的食物,多给了你3份子弹\n"); zd=zd+3; } break; } sw=sw-2; if(sw<0) { esl(); return 0; } Slowsay("又过了一夜,食物-2\n"); } break; } Slowsay("在你离开的时候,一个少年跑了过来。\n"); Slowsay("他说,他想要和你一起走\n"); Slowsay("1.带上他\n"); Slowsay("2.不带他\n"); while(true) { x=read(); if(x<1||x>2) { Slowsay("请重新输入\n"); continue; } if(x==2) { Slowsay("少年生气的离开了"); if(swx!=2) Slowsay(",当他走远了,你才发现\n\n在刚刚的接触中,他偷走了你所有的子弹\n"); else Slowsay("\n当你走远后,你才发现,少年一直冷笑着跟在你的身后\n"),sn=1; zd=0; } if(x==1) { Slowsay("你选择上少年一起走\n"); Slowsay("少年将他身上带着的一份食物交给了你\n"); sw=sw+1; Slowsay("食物消耗+1,少年入队\n"); sn=1; } break; } } break; } if(vv==0) ch=_getch(); qp(); printf("你在路边的一座没人的房子里过了一夜,食物-%d\n",2+sn); sw=sw-2-sn; if(vv==0) ch=_getch(); if(sn==1&&swx==2) { Slowsay("\n1.杀了少年,这时没人可以阻止你!\n"); Slowsay("2.我决定在少年面前一直隐瞒到底\n"); x=read(); if(x==1) { Slowsay("少年不见了,难道他发现了......\n\n你一回头,少年咯咯笑着咬住你的脖子\n\n你应该等我虚弱时再下手啊.....\n\n"); s++; return 0; } } if(sw<0) { esl(); return 0; } Slowsay("是否存档?\n"); Slowsay("1.存档(记录当前进度,只能有一个存档)\n"); Slowsay("2.不存\n"); x=read(); if(x==1) { cdd=1; sw1=sw; zd1=zd; mp1=mp; mz1=mz; sn1=sn; Slowsay("存档成功"); } cddd1: qp(); if(sn==1) { vv=0; Slowsay("今天一早你就被少年叫醒了,\n"); if(vv==0) ch=_getch(); Slowsay("他在床底下发现了一箱方便面,食物+8\n"); sw=sw+8; Slowsay("少年向你讨要武器,你决定\n"); Slowsay("1.把枪给他\n"); Slowsay("2.把捡到的水管给他\n"); Slowsay("3.什么都不给他\n"); while(true) { x=read(); if(x<1||x>3) { Slowsay("请重新输入\n"); continue; } if(x==1) gun=0,qiang=2; if(x==2) gun=2,qiang=1; if(x==3) gun=0,qiang=1; break; } } else { Slowsay("你在冰箱里发现了几包巧克力\n"); if(vv==0) ch=_getch(); Slowsay("希望它们还没过期吧,食物+3\n"); sw=sw+3; } if(vv==0) ch=_getch(); Slowsay("今天你们来到了一家大商场\n"); Slowsay("你决定\n"); Slowsay("1.独自探索1楼\n"); Slowsay("2.独自探索2楼\n"); if(sn==1) { Slowsay("3.和少年一起探索2楼"); } while(true) { x=read(); if(x<1||x>3) { Slowsay("请重新输入\n"); continue; } if(x==1) { Slowsay("你在一楼发现了一些子弹,子弹+3\n"); zd=zd+3; Slowsay("奇怪的是,一只丧尸都没有看到\n"); if(vv==0) ch=_getch(); if(sn>0) { if(qiang==2) { Slowsay("当你来到二楼时,发现了一地尸体\n"); Slowsay("少年就倒在这尸体中间,他死前手还紧紧握着枪\n"); Slowsay("你把枪拿了回来,并在少年的尸体下面发现了一箱压缩饼干\n"); Slowsay("食物+10086\n"); if(vv==0) ch=_getch(); sw+=10086; if(sw>10000&&zd>9000) { td(); return 0; } sn=0; qiang=1; } else { Slowsay("当你来到二楼时,发现了少年的尸体\n"); if(vv==0) ch=_getch(); sn=0; Slowsay("你紧紧握着手中的枪,猛地一回头\n"); Slowsay("四周大量的丧尸向你涌来\n"); if(vv==0) ch=_getch(); zd=zd-5; if(zd<0) { mzd(); return 0; } Slowsay("你杀光了这些丧尸,子弹-5\n"); if(vv==0) ch=_getch(); Slowsay("你在二楼找到了食物,食物+3\n"); sw+=3; } } } if(x==2) { Slowsay("你来到了二楼,数之不尽的丧尸忽然从阴影中窜出\n"); if(qiang==2) { Slowsay("尽管你没了枪也尽力抵抗,可丧尸的数量实在太多。\n"); mzd(); return 0; } if(vv==0) ch=_getch(); zd-=5; if(zd<0) { Slowsay("尽管你尽力抵抗,可丧尸的数量实在太多。\n"); mzd(); return 0; } Slowsay("你杀光了这些丧尸,子弹-5\n"); if(vv==0) ch=_getch(); Slowsay("你在二楼找到了食物,食物+3\n"); sw+=3; if(sn==1) { Slowsay("少年在一楼找到了子弹,子弹+3\n"); zd=zd+3; } } if(x==3&&sn==1) { system("cls"); Slowsay("你们来到了二楼\n"); if(vv==0) ch=_getch(); system("Color C"); Slowsay("数之不尽的丧尸从阴影中窜出"); Slowsay("尽管你们尽力抵抗,可丧尸的数量实在太多。"); if(gun!=2&&qiang!=2) { Slowsay("没有武器的少年被当场咬死。"); if(mp==-1&&mz==0){ td5(); return 0; } sn=0; } Slowsay("其中一只丧尸趁你不注意冲到了你的旁边"); if(gun==2) Slowsay("就在你要被咬死的时候,少年扔出了手中的水管\n,救下了你"); else if(qiang!=2) { zd=zd-3; if(zd<0) { mzd(); return 0; } Slowsay("你赶忙回头几枪补掉了这只丧尸,子弹-3"); } zd=zd-3; if(qiang==2||zd<0) { system("Color F"); mzd(); return 0; } system("Color F"); Slowsay("经过了一番苦战,你们终于战胜了所有丧尸,子弹-3"); if(vv==0) ch=_getch(); } break; } if(vv==0) ch=_getch(); qp(); if(vv==0) ch=_getch(); printf("又过了一夜,食物-%d\n",sn+2); sw=sw-2-sn; if(sw<0) { esl(); return 0; } qp(); Slowsay("今天在出门的时候\n"); Slowsay("你遇到了一条流浪狗\n"); Slowsay("1.用枪打死它\n"); Slowsay("2.用食物打发它\n"); while(true) { x=read(); if(x<1||x>2) { Slowsay("请重新输入\n"); continue; } if(x==1) { zd=zd-1; if(zd<0) { bd7(); return 0; } Slowsay("你一枪打死了这条狗,子弹-1\n"); if(sn==0) break; Slowsay("在打死了狗之后,你忽然发现少年的脸色不太好\n"); if(vv==0) ch=_getch(); Slowsay("原来,在昨天的商场中,少年早就被咬了一口"); Slowsay("他一直瞒着你,不敢说出来"); Slowsay("此时,他闻到了血腥味,看到了尸体,已经忍不住,濒临变异了!!"); Slowsay("你决定\n"); Slowsay("1.杀了他\n"); Slowsay("2.不杀他\n"); int a3=0; if(gjj[4]==1&&zd<4) { Slowsay("3.安抚他\n"); a3=1; } while(1) { x=read(); if(x<1||x>3||(x==3&&a3==0)) { Slowsay("请重新输入\n"); continue; } if(x==1) { if(swx==2) { if(mzhg<-1000) tgg3(); else Slowsay("\n“杀我还早的很呢......”\n\n少年咯咯笑着挡下了你所有的攻击\n\n“因为你还不是一个优秀的丧尸......”"),Sleep(1000),mzd(); return 0; } if(vv==0) ch=_getch(); if(mp==-1&&mz==0) { Slowsay("奇怪的是,你直接秒掉了他。\n"); Sleep(1000); sn=0; td5(); return 0; } else if(mp==-1&&mz!=0) { Slowsay("突然,妹子出现了。\n"); Slowsay("“放着我来!”,妹子与少年搏斗起来,妹子的力气极大,竟然真的压制住了少年!\n"); Slowsay("在你的惊恐目光下,少年的皮肤渐渐变淡,重新变回了“人”!\n"); Slowsay("这时,你才注意到少年的声音一直带着点沙哑,如同低吼一般\n"); Slowsay("“我没事。”他说。\n"); } else { system("Color C"); Slowsay("你试着向他开枪,子弹穿过了他的身体\n"); Slowsay("你十分惊恐,疯狂地倾泻着手中的弹药\n"); Slowsay("“没有用的。”少年咯咯笑着向你走进,\n"); Slowsay("而他的伤口却以肉眼可见的速度愈合!\n"); Slowsay("怎么可能!怎么可能,怎么可能......\n"); system("Color F"); mzd(); if(zjj[9]==0) { Slowsay("获得线索-----无敌变异!·少年\n"); Sleep(1000); zjj[9]=1; } return 0; } } if(x==2) { system("Color C"); Slowsay("你看着少年变异\n"); Slowsay("奇怪的是,他变异后并没有像其他的丧尸一样,向你扑过来\n"); Slowsay("而是躲在墙角瑟瑟发抖\n"); Slowsay("你慢慢的走过去\n"); Slowsay("就在你走近的时候,少年突然暴起\n"); Slowsay("狠狠地咬住了你的手臂\n"); Slowsay("你赶忙用枪打死他,可是为时已晚\n"); system("Color F"); sn=0; if(sw>=6) { td2(); return 0; } else { bd6(); return 0; } } break; } if(x==3&&gjj[4]==1) { gjj[5]=1; hd5(); return 0; } } if(x==2) { sw=sw-1; if(sw<0) { bd7(); return 0; } Slowsay("你用一份食物引开了这条狗,食物-1\n"); } break; } if(swx==2) { system("cls"); if(sn==1) Slowsay("少年的变异的很突然,但身为丧尸的你没有受到攻击\n你们结伴一起狩猎着人类\n只是,与少年相处的越久,你就越发感受到他的强大。\n你只好收起杀心跟在他后面。\n应该是这样吗?"),Sleep(1000),Slowsay("\n\n“我错过了机会”\n"); else Slowsay("少年死后,你无聊的屠杀着一切,\n在接下来的几天里,你轻松的杀掉了城中所有的生物\n之后,你只能天天游荡,无助的面对着这座死城\n应该是这样吗?\n"),Sleep(1000),Slowsay("\n“我走错了路。”"); Sleep(1000); return 0; } if(vv==0) ch=_getch(); if(sn==1&&sw>=4&&gun==2&&zd>5) { hd4(); return 0; } if(sn==1) { Slowsay("又过了一天,食物-2\n"); sw=sw-2; if(sw<0) { esl(); return 0; } if(vv==0) ch=_getch(); system("cls"); Slowsay("今天早上,你发现少年不见了\n"); Slowsay("你决定\n"); Slowsay("1.去寻找他\n"); Slowsay("2.不去找他\n"); while(true) { x=read(); if(x<1||x>2) { Slowsay("请重新输入\n"); continue; } if(x==1) { system("cls"); qp(); Slowsay("你通过蛛丝马迹一路追踪,来到了一座大厦前\n"); Slowsay("在路上,你遭遇了丧尸,子弹-2\n"); zd=zd-2; if(zd<0) { mzd(); return 0; } Slowsay("你决定\n"); system("Color C"); Slowsay("1.破门!冲入大厦\n"); Slowsay("2.悄悄开门,潜入大厦\n"); Slowsay("3.寻找其它的入口\n"); while(true){ x=read(); if(x<1||x>3) { Slowsay("请重新输入\n"); continue; } if(x==1) { int xx=rand()%4; Slowsay("你进入大厦才发现这里几乎充满了丧尸!"); Slowsay("丧尸似乎被你惊醒,如同海啸般向你涌来!"); system("Color F"); if(zd>6) Slowsay("怎么回事!!你一路且战且退来到了地下室"),zd-=6,bd9(); else if(xx==0) Slowsay("幸运的是,你退后的脚碰到了地下室的暗门,Thanks God!"),bd9(); else Sleep(1000),mzd(); return 0; } if(x==2) { int xx=rand()%6; Slowsay("你进入大厦才发现这里几乎充满了丧尸!"); system("Color F"); Slowsay("怎么回事!!你害怕得定在原地,奇怪的是它们并没有向你扑来,只是疲惫的看着你。"); Slowsay("定睛一看,丧尸们个个躯体畸形,断手断脚者不乏其数"); Slowsay("再一看,这些丧尸们被奇怪的机器束缚,不得踏出大厦一步。"); Slowsay("你大着胆子靠近一个丧尸,发现它的头上有着模糊的字迹"); Slowsay("【21.7.29,失败】"); Sleep(1000); Slowsay("瞬间,那个丧尸惊恐地捂住头上的字,发出奇怪的吼声!"); Slowsay("其它丧尸如同被激怒,海啸般向你涌来!"); if(zd>6) Slowsay("怎么回事!!你一路且战且退来到了地下室"),zd-=6,bd9(); else if(xx==0) Slowsay("幸运的是,你退后的脚碰到了地下室的暗门,Thanks God!"),bd9(); else Sleep(1000),mzd(); return 0; } if(x==3) { system("Color F"); Slowsay("你走入刚刚的大街,你的老相识开心地吐着舌头看着你"); Slowsay("......后面跟着它的一堆朋友......"); Slowsay("......你被讨食的狗狗们追着跑过了两条大街,不停地扔出食物来减缓它们的攻势......"); if(sw>5) Slowsay("终于,它们全部满足的趴倒在了地上。\n领头狗如同可以听懂人话一样,将你带到了一个隐蔽的地道口前......"),sw-=5,bd9(); else bd7(); return 0; } break; } } break; } } qp(); if(vv==0) ch=_getch(); if(mz==1&&sn==1&&swx==0) { td6(); return 0; } Slowsay("又过了一天,食物-2"); sw=sw-2; if(sw<0) { esl(); return 0; } Sleep(500); Slowsay("遭遇丧尸,子弹-3"); zd=zd-3; if(zd<0) { mzd(); return 0; } Sleep(500); Slowsay("又过了一天,食物-2"); sw=sw-2; if(sw<0) { esl(); return 0; } Sleep(500); Slowsay("遭遇丧尸,子弹-2"); zd=zd-2; if(zd<0) { mzd(); return 0; } Sleep(500); if(ccg==1) { tg(); return 0; } else { bd10(); return 0; } } int main() { srand(time(0)); Read(); int go=0; while(tongguan1!=2) { int v=0; char ch; mp=0; if(go==1) { Sleep(1000); if(vv==0) ch=_getch(); system("cls"); Save(); } go=1; Slowsay("1.进行游戏\n"); Slowsay("2.查看成就\n"); Slowsay("3.查看线索(获得全部线索后通关游戏)\n"); Slowsay("4.获得一条随机的提示\n"); Slowsay("5.游戏相关\n"); Slowsay("6.极速模式\n"); Slowsay("7.退出游戏\n"); x=read(); if(x==1) { sswj(); if(s>50&&swhm==0) { swhm=1; Slowsay("又死了啊......"); Slowsay("这已经是第几次了呢......"); Slowsay("一个柔和的声音从耳边传来"); Slowsay("或许早该放弃了"); Sleep(1000); Slowsay("获得线索-----计数者"); } } if(x==2) { int v1=0; system("cls"); if(tongguan1==2) Slowsay("\n已通关终极剧情\n"); if(tongguan1==1) Slowsay("\n已通关进阶剧情(进阶不重要!终极才是王道!)\n"); if(tongguan==1) Slowsay("\n已通关基础剧情\n"); int v=0; Slowsay("\nHappy Bnd 达成\n"); if(gjj[1]==1) Slowsay("苟到最后\n"); else Slowsay("未达成\n"); if(gjj[2]==1) Slowsay("神仙眷侣\n"); else Slowsay("未达成\n"); if(gjj[3]==1) Slowsay("英雄不朽\n"); else Slowsay("未达成\n"); if(gjj[4]==1) Slowsay("认清自己\n"); else Slowsay("未达成\n"); if(gjj[5]==1) Slowsay("跨越物种的gay\n"); else Slowsay("未达成\n"); Slowsay("\n"); Slowsay("Bad End 达成(共15个)\n"); for(int i=1; i<=17; i++) if(hjj[i]==1) printf("%d ",i),v1++; if(v1>=15&&swx==1) swx=2,cdd=0,Swx(); Slowsay("\n"); printf("当前死亡次数:%d",s); Slowsay("\n"); Slowsay("True End 达成\n"); if(zjj[1]==1) Slowsay("拯救世界\n"); else Slowsay("未达成\n"); if(zjj[3]==1) Slowsay("认清?·妹子\n"); else Slowsay("未达成\n"); if(zjj[2]==1) Slowsay("认清!·本我\n"); else Slowsay("未达成\n"); if(zjj[4]==1) Slowsay("验证失败\n"); else Slowsay("未达成\n"); if(zjj[5]==1) Slowsay("死亡姗姗来迟\n"); else Slowsay("未达成\n"); Slowsay("\n"); if(vv==0) char ch=_getch(); } if(x==3) { system("cls"); int v=0; Slowsay("基础线索\n"); if(zjj[1]==1) Slowsay(" 奇特的枪与饼干\n"),v++; else Slowsay(" ?????\n"); if(zjj[2]==1) Slowsay(" 延迟变异?·少年\n"),v++; else Slowsay(" ?????\n"); if(zjj[9]==1) Slowsay(" 无敌变异!·少年\n"),v++; else Slowsay(" ?????\n"); if(zjj[3]==1) Slowsay(" 不变异? ·妹子\n"),v++; else Slowsay(" ?????\n"); if(hjj[8]==1) Slowsay(" 早已变异!·妹子\n"),v++; else Slowsay(" ?????\n"); if(hjj[9]==1) Slowsay(" 实验体·1号和2号\n"),v++; else Slowsay(" ?????\n"); if(v>=6&&ccg==0) { Sleep(2000); cdd=0; cg(); ccg=1; } Slowsay("进阶线索\n"); if(swhm==1) Slowsay(" 计数者\n"),v++; else Slowsay(" ?????\n"); if(zbbj==1) Slowsay(" 乱码,废弃与失联\n"),v++; else Slowsay(" ?????\n"); if(by==1) Slowsay(" 早已变异!·本我\n"),v++; else Slowsay(" ?????\n"); if(hjj[15]==1) Slowsay(" 伪造......\n"),v++; else Slowsay(" ?????\n"); if(zjj[5]==1) Slowsay(" 少年之死\n"),v++; else Slowsay(" ?????\n"); if(hjj[14]==1) Slowsay(" 外面的世界\n"),v++; else Slowsay(" ?????\n"); if(v>=12&&qxs==0) { Sleep(2000); cg2(); cdd=0; Sleep(1000); Slowsay("-------- 游戏进阶结局已解锁(快前往达成吧)--------"); qxs=1; } if(vv==0) ch=_getch(); } if(x==4) { system("cls"); int y=rand()%3; if(y==0) { Slowsay("【稀有提示】"); x=rand()%14; if(x==0) Slowsay("【稀有结局提示】 试试 0 10 开局!"); else if(x==1) Slowsay("【稀有结局提示】 最好的爱总要先错过~"); else if(x==2) Slowsay("【剧情提示】 二周目:少年变异后有新剧情!"); else if(x==3) Slowsay("【剧情提示】 不变异的妹子总有一天会在营地暴露!再来一遍!"); else if(x==4) Slowsay("【剧情提示】 弹尽粮绝之时,变异的少年会记起上辈子的爱情!再来一遍!"); else if(x==5) Slowsay("【剧情提示】 第二天,和首领换更多子弹,他会更开心!"); else if(x==6) Slowsay("【剧情提示】 在家里等待疯掉?再来一遍!"); else if(x==7) Slowsay("【剧情提示】 二周目:再次进入实验室吧!"); else if(x==8) Slowsay("【剧情提示】 二周目:神枪手妹子..."); else if(x==9) Slowsay("【剧情提示】 二周目:不带子弹!等待救援!"); else if(x==10) Slowsay("【通关方式】 二周目:在获得所有线索后前往“外面的世界”。"); else if(x==11) Slowsay("【通关方式】 三周目:(都提示这么明显了)吃掉妹子,杀掉少年。"); else if(x==12) Slowsay("【线索提示】 死亡很多次后......(有个地方可以刷死亡次数)"); else Slowsay("【???】 666666,5201314(会错过一些线索与结局!)"); } else { x=rand()%14; if(x==0) Slowsay("加了好感后,妹子有几率不死"); else if(x==1) Slowsay("少年喜欢子弹"); else if(x==2) Slowsay("乱走有时可以获得子弹"); else if(x==3) Slowsay("冲进去活下来几率更大"); else if(x==4) Slowsay("分头探商店可以获得更多资源"); else if(x==5) Slowsay("有一些结局只能通关后触发"); else if(x==6) Slowsay("有一些结局要脸好才能触发"); else if(x==7) Slowsay("有一些结局要通其他结局后才能触发"); else if(x==8) Slowsay("大多数时候,你认为一个地方没有好结局只是因为你食物/子弹不够"); else if(x==9) Slowsay("绝大多数的线索来自结局"); else if(x==10) Slowsay("三大重叠剧情线路:普通,进阶,尸王线"); else if(x==11) Slowsay("本游戏是一个剧情严谨,人物丰满,细思极恐的好!游!戏!~"); else if(x==12) Slowsay("事实证明剧情游戏是最难调的!有Bug一定要去博客说出来啊!(luogu.com.cn/blog/z1e2k3i4/)"); else Slowsay("完成目标后,需要在线索,成就界面开启新剧情哦"); } if(vv==0) char ch=_getch(); continue; } if(x==5) { system("cls"); Slowsay("作者:小小小苗\n"); Slowsay("改错,调试,搬运,游玩:胎神大大(就是在游戏论坛翻到的宝藏而已emm......)\n"); } if(x==6) { system("cls"); if(vv==0) vv=1,Slowsay("已开启极速模式"); else vv=0,Slowsay("已关闭极速模式"); } if(x==7){ system("cls"); Slowsay("想退?死吧!!"); s++; } if(x==8){ if(kg==0) kg=1; else kg=0; } } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); Slowsay("Thanks for playing......"); Sleep(1000); Slowsay("您已通关,我亲爱的 终极丧尸,成功者,杀人机器,你还没杀够吗?......"); system("Color C"); }
7.2048小游戏
#include<iostream> #include<vector> #include<ctime> #include<cstdlib> using namespace std; class Game_2048{ public: Game_2048(); ~Game_2048(); void introduction(); bool judgeOver(); //判断游戏是否结束 void reSize(); void printBoard(); //打印函数 void getRand(); //随机在棋盘上生成2,4; void slide(); //滑动 private: int m=4, n=4; char op; //用户操作 vector< vector<int> > board; //棋盘 vector<int> row; bool judgeInsert(int x,int y); bool judgeSlide(); //判断是否能滑动,(未写完) void copyBoard(vector< vector<int> > &newBoard,vector< vector<int> > &board); void inputOp(); char getOp(); //返回操作符 bool judgeLeftSlide(bool mark=true); void leftSlide(); //左滑动 bool judgeRightSlide(bool mark = true); void rightSlide(); bool judgeUpSlide(bool mark = true); void upSlide(); bool judgeDownSlide(bool mark = true); void downSlide(); void reStart(); void enlarge(); }; int main(){ Game_2048 NB; NB.introduction(); NB.getRand(); NB.printBoard(); while (!NB.judgeOver()){ NB.slide(); NB.getRand(); NB.printBoard(); } cout << "游戏结束!!!\n"; system("pause"); return 0; } void Game_2048::introduction() { cout << "这是一个2048游戏,规则如下:\n"; cout << "上划:W;\n下滑:S;\n左划:A;\n右划:D;\n退出:Q;\n重新开始:R;\n请输入下次操作,\n"; } void Game_2048::slide() { inputOp(); switch (getOp()) { case 'a': case 'A': if (judgeLeftSlide()) do leftSlide(); while (judgeLeftSlide(false)); else { cout << "无法左滑动,请重试!!!\n"; slide(); } break; case 'd': case 'D': if (judgeRightSlide()) do rightSlide(); while (judgeRightSlide(false)); else { cout << "无法右滑动,请重试!!!\n"; slide(); } break; case 'w': case 'W': if(judgeUpSlide()) do upSlide(); while (judgeUpSlide(false)); else { cout << "无法上滑动,请重试!!!\n"; slide(); } break; case 's': case 'S': if(judgeDownSlide()) do downSlide(); while (judgeDownSlide(false)); else { cout << "无法下滑动,请重试!!!\n"; slide(); } break; case 'p': case 'P': enlarge(); break; case 'q': case 'Q': exit(0); break; case 'r': case 'R': reStart(); break; default: cout << "输入错误,作为惩罚,随机生成一个数!\n"; break; } } void Game_2048::reStart() { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { board[i][j] = 0; } } void Game_2048::enlarge() { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { board[i][j] *= 2; } } char Game_2048::getOp() { return op; } void Game_2048::upSlide() { for (int j = 0; j < n; j++) for (int i = m - 1; i > 0; i--) { //n-1!! if (board[i][j] != 0 && board[i - 1][j] == 0) //移动 { board[i - 1][j] = board[i][j]; board[i][j] = 0; } } for (int j = 0; j < n; j++) for (int i = m - 1; i > 0; i--) { if (board[i][j] != 0 && board[i-1][j] == board[i][j]) //覆盖 { board[i-1][j] += board[i][j]; board[i][j] = 0; } } } bool Game_2048::judgeUpSlide(bool mark) { if (mark) { for (int i = 0; i < m; i++) for (int j = n - 1; j > 0; j--) { if (board[i][j] == 0) return true; } } for (int j = 0; j < n; j++) for (int i = m - 1; i > 0; i--) { //n-1!! if (board[i][j] != 0 && board[i - 1][j] == 0) //移动 return true; if (board[i][j] != 0 && board[i - 1][j] == board[i][j]) //覆盖 return true; } return false; } bool Game_2048::judgeDownSlide(bool mark) { if (mark) { for (int i = 0; i < m; i++) for (int j = n - 1; j > 0; j--) { if (board[i][j] == 0) return true; } } for (int j = 0; j < n; j++) for (int i = 0; i < m - 1; i++) { //n-1!! if (board[i][j] != 0 && board[i + 1][j] == 0) //移动 return true; if (board[i][j] != 0 && board[i + 1][j] == board[i][j]) //覆盖 return true; } return false; } void Game_2048::downSlide() { for (int j = 0; j < n; j++) for (int i = 0; i < m - 1; i++) { if (board[i][j] != 0 && board[i + 1][j] == 0) //移动 { board[i + 1][j] = board[i][j]; board[i][j] = 0; } } for (int j = 0; j < n; j++) for (int i = 0; i < m - 1; i++) { if (board[i][j] != 0 && board[i + 1][j] == board[i][j]) //覆盖 { board[i + 1][j] += board[i][j]; board[i][j] = 0; } } } void Game_2048::rightSlide() { for (int i = 0; i < m; i++) for (int j = 0; j < n - 1; j++) { //n-1!! if (board[i][j] != 0 && board[i][j + 1] == 0) //移动 { board[i][j + 1] = board[i][j]; board[i][j] = 0; } } for (int i = 0; i < m; i++) for (int j = 0; j < n - 1; j++) { if (board[i][j] != 0 && board[i][j + 1] == board[i][j]) //覆盖 { board[i][j + 1] += board[i][j]; board[i][j] = 0; } } } bool Game_2048::judgeRightSlide(bool mark ) { if (mark) { for (int i = 0; i < m; i++) for (int j = n - 1; j > 0; j--) { if (board[i][j] == 0) return true; } } for (int i = 0; i < m; i++) for (int j = 0; j < n - 1; j++) { //n-1!! if (board[i][j] != 0 && board[i][j + 1] == board[i][j]) //覆盖 return true; if (board[i][j] != 0 && board[i][j + 1] == 0) return true; } return false; } void Game_2048::leftSlide() { for (int i = 0; i < m; i++) for (int j = 1; j < n; j++) { //n-1!! if (board[i][j] != 0 && board[i][j - 1] == 0) //移动 { board[i][j - 1] = board[i][j]; board[i][j] = 0; } } for (int i = 0; i < m; i++) for (int j = 1; j < n; j++) { if (board[i][j] != 0 && board[i][j - 1] == board[i][j]) //覆盖 { board[i][j - 1] += board[i][j]; board[i][j] = 0; } } } bool Game_2048::judgeLeftSlide(bool mark) { if (mark) { for (int i = 0; i < m; i++) for (int j = n - 1; j > 0; j--) { if (board[i][j] == 0) return true; } } for (int i = 0; i < m; i++) for (int j = n - 1; j > 0; j--) { //n-1!! if (board[i][j] != 0 && board[i][j - 1] == 0) //移动 return true; if (board[i][j] != 0 && board[i][j - 1] == board[i][j]) //覆盖 return true; } return false; } bool Game_2048::judgeOver() { if (op == 'q' || op == 'Q') return true; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { if (board[i][j] == 2048) { printBoard(); cout << "有数字达到了2048,恭喜!!!\n"; return true; } } for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { if (board[i][j] == 0) return false; } if (judgeSlide()) return false; else { cout << "无法再滑动\n"; return true; } } bool Game_2048::judgeSlide() { vector< vector<int> > copyBoard; //棋盘 vector<int> copyRow; for (int i = 0; i < n; i++) { copyRow.push_back(0); } for (int i = 0; i < m; i++) { copyBoard.push_back(copyRow); } copyBoard = board; upSlide(); downSlide(); leftSlide(); rightSlide(); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { if (board[i][j] == 0) { board = copyBoard; return true; } } return false; } void Game_2048::copyBoard(vector< vector<int> >& newBoard, vector< vector<int> >& board) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) newBoard[i][j] = board[i][j]; } bool Game_2048::judgeInsert(int x,int y) { if (board[x][y] == 0) return true; else return false; } void Game_2048::getRand() { srand(time(0)); int x, y,val; do { x = rand() % m; y = rand() % n; } while (!judgeInsert(x,y)); val = (rand() % 2 + 1)*2; board[x][y] = val; } void Game_2048::inputOp() { cin >> op; } void Game_2048::reSize() { cout << "请输入棋盘大小m*n\n"; cin >> m >> n; Game_2048(); } Game_2048::~Game_2048() { } Game_2048::Game_2048() { for (int i = 0; i < n; i++){ row.push_back(0); } for (int i = 0; i < m; i++){ board.push_back(row); } } void Game_2048::printBoard(){ cout << "\n--------------\n"; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << board[i][j]; if (j < n-1) { cout << "—"; } if (j == n-1 && i < m-1) { cout << endl; int count = 0; while (count++ < n-1) { cout << "| "; } cout << "|" << endl; } } } cout << "\n--------------\n" ; }
8.扫雷小游戏(无尽)
#include<cstdio> #include<cstring> #include<algorithm> #include<conio.h> #include<windows.h> #include<cstdlib> #include<ctime> using namespace std; #define MAXN 35 #define MIDX 10 #define MIDY 40 #define CG 25 #define CK 80 int G,K,Lnum,Wnum;//G为地图高,K为地图,Lnum为地图中的雷数,Wnum为剩余的小旗数 int nx,ny;//现在光标所在的位置 bool QR=0,Lose=0,is_flag_true[MAXN][MAXN];//QR为确认模式是否打开,Lose为是否输,第三个是这个位置上的旗是否放对 char map[MAXN][MAXN],tmap[MAXN][MAXN];//第一个是只有雷和空地的地图,第二个是玩家能看到的地图 int map1[MAXN][MAXN],mapc[MAXN][MAXN];//map1为数字的地图,其中0代表空地,-1为雷,1-8为周围雷的个数 //mapc为当前格子的颜色 int col[10]={240,249,242,252,241,244,243,240,248};//col[i]表示windows扫雷中i的颜色,col[0]为空格的颜色 int d[10][4]={{0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};//8个方向 bool ZB;//作弊是否打开 /*各种函数*/ void color(int);//颜色 void gto(int,int);//光标位置 void make();//制作随机地图 void print();//打印地图等 bool check(int,int);//判断坐标是否合法 bool is_win();//判断是否赢 bool is_lose();//是否输 void dfs(int,int);//用深搜来打开方块 void st(int,int);//试探,即windows扫雷中的左右键同时按 void flag(int,int);//小旗 void bj(int,int);//标记 void swt();//确认模式 void again();//重新开始 void zb();//作弊模式 void mainmain();//主函数 void print_real_map();//打印最终的地图 void begin();//各种操作 int main() { mainmain(); } void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);} void gto(int x,int y) { COORD pos;pos.X=y;pos.Y=x; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } void make() { for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) map[i][j]='#';//初始化 for(int i=1;i<=Lnum;i++) { int x=rand()%G+1,y=rand()%K+1; while(map[x][y]=='O') x=rand()%G+1,y=rand()%K+1; map[x][y]='O'; }//随机放雷 for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) { if(map[i][j]=='O')map1[i][j]=-1,mapc[i][j]=240;//如果是雷 else { for(int k=1;k<=8;k++) if(map[i+d[k][0]][j+d[k][1]]=='O') map1[i][j]++;//计算周围雷的个数 mapc[i][j]=col[map1[i][j]];//根据格子上的数设置颜色 } } for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) if(mapc[i][j]==0)//空地 mapc[i][j]=240; } void print() { system("cls"); gto(0,MIDY-4); color(233); printf("扫雷 cyh"); color(240); gto(1,MIDY); for(int i=2;i<=G+1;i++) { gto(i,0); for(int j=1;j<=K;j++) printf("#"),tmap[i-1][j]='#';//初始化玩家所看到的地图 } gto(2,0); nx=2,ny=0; color(15); printf("@"); color(15); gto(2,2*K+5);printf("-----规则-----"); gto(3,2*K+5);printf("wasd:选择位置"); gto(4,2*K+5);printf("空格:打开"); gto(5,2*K+5);printf("1键:试探周围8个方块,如果其中有雷则不会打开,无"); gto(6,2*K+5);printf(" 雷或旗帜标对了则会将周围无雷的位置打开,"); gto(7,2*K+5);printf(" 如果试探时周围有标错的旗帜,则会游戏失败"); gto(8,2*K+5);printf(" 必须额外确认一次,以便查看周围被试探的区域"); gto(9,2*K+5);printf("2键:放置/取消小旗(F)"); gto(10,2*K+5);printf("3键:放置/取消标记(?)"); gto(11,2*K+5);printf("4键:打开/关闭确认模式,即每次操作需再按一次确认"); gto(12,2*K+5);printf("5键:打开/关闭作弊模式,即显示原本地图"); gto(13,2*K+5);printf("0键:重新开始"); gto(14,2*K+5);printf("作弊地图中黑色0是雷"); gto(G+4,0);printf("-----操作提示-----\n"); printf("请选择方块进行操作"); gto(1,2*K+10);color(12);printf("剩余小旗数:%d",Wnum=Lnum); } bool check(int x,int y){return y>=0&&y<K&&x>=2&&x<G+2;} //因为地图是从2行0列开始打的,而地图是从1行1列开始存的,所以gto(x,y)走到的是map[x-1][y+1] bool is_win() { int cnt=0; for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) if(map[i][j]=='#'&&map1[i][j]==-1) cnt++; if(cnt==Lnum) return 1; //所有没被打开的方块都是雷=>胜利 for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) if((tmap[i][j]!='F'&&map1[i][j]==-1)||(tmap[i][j]=='F'&&map1[i][j]!=-1)) return 0; return 1; //所有雷都标有旗 } bool is_lose(){return Lose;} void dfs(int x,int y) { if(map1[x-1][y+1]>0)//只要边界全部是数字就return { gto(x,y),color(mapc[x-1][y+1]),printf("%d",map1[x-1][y+1]); tmap[x-1][y+1]=map1[x-1][y+1]+'0'; return; } gto(x,y);color(255); tmap[x-1][y+1]=' '; printf(" ");//因为下面判断了雷,上面判断了数字,这里就一定是空地 for(int i=1;i<=8;i++) { int xx=x+d[i][0]-1,yy=y+d[i][1]+1;//这里的xx和yy是在map中的,而不是gto中的 if(check(xx+1,yy-1)&&tmap[xx][yy]=='#'&&map1[xx][yy]!=-1)//所以check和dfs的参数要变化 dfs(xx+1,yy-1); } } void st(int x,int y) { for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)) { gto(xx,yy); if(tmap[xx-1][yy+1]!='#') color(mapc[xx-1][yy+1]-128);//减去128使周围的8个格子的背景颜色变为灰色 else color(112);//这里特判一下'#',应该可以不用 printf("%c",tmap[xx-1][yy+1]); } } gto(G+5,0),color(15),printf("请确认 "); //试探必须额外确认一次,规则上有说 char c=getch(); if(c=='1') { for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)) if(tmap[xx-1][yy+1]=='F'&&map1[xx-1][yy+1]!=-1)//试探时有格子的小旗标错了=>失败 { Lose=1; return; } } for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)) if(map1[xx-1][yy+1]==-1&&tmap[xx-1][yy+1]!='F')//试探是有格子为雷=>取消打开 return; } for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)&&tmap[xx-1][yy+1]=='#')//打开周围8个格子 dfs(xx,yy); } } } void flag(int x,int y) { x-=1,y+=1; if(tmap[x][y]=='F')//原本为小旗=>取消小旗 { tmap[x][y]='#';mapc[x][y]=240; gto(x+1,y-1),color(240),printf("#"); Wnum++;//更新小旗数 } else//否则就放置小旗 { is_flag_true[x][y]=map1[x][y]==-1;//判断小旗是否放对 tmap[x][y]='F';mapc[x][y]=253; gto(x+1,y-1),color(253),printf("F"); Wnum--;//更新小旗数 } gto(1,2*K+10);color(12);printf("剩余小旗数: "); gto(1,2*K+22);printf("%d",Wnum);//更新小旗数 } void bj(int x,int y)//和放小旗差不多,只是不用更新is_flag_true { x-=1,y+=1; if(tmap[x][y]=='?') { gto(x+1,y-1),color(240),printf("#"); tmap[x][y]='#';mapc[x][y]=240; } else { if(tmap[x][y]=='F')//如果原本这个位置上是小旗,而你把它变为了标记,就要更新小旗数 { Wnum++; gto(1,2*K+10);color(12);printf("剩余小旗数: "); gto(1,2*K+22);printf("%d",Wnum); } gto(x+1,y-1),color(240),printf("?"); tmap[x][y]='?';mapc[x][y]=240; } } void swt(){QR=!QR;} void zb() { if(ZB)//如果本来作弊打开了就把作弊地图清除 { for(int i=1;i<=G;i++) { gto(i+1,K+2); for(int j=1;j<=K;j++) color(15),printf(" "); } ZB=0; } else//否则打印作弊地图 { for(int i=1;i<=G;i++) { gto(i+1,K+2); for(int j=1;j<=K;j++) { color(mapc[i][j]); if(map1[i][j]==-1) printf("O"); else if(map1[i][j]>0) printf("%d",map1[i][j]); else printf(" "); } } ZB=1; } } void again() { G=K=Lnum=nx=ny=Lose=ZB=0; QR=0; memset(is_flag_true,0,sizeof(is_flag_true)); memset(map,0,sizeof(map)); memset(tmap,0,sizeof(tmap)); memset(map1,0,sizeof(map1)); memset(mapc,0,sizeof(mapc)); color(15); system("cls");//初始化 mainmain(); } void begin()//各种操作 { char c=getch(); gto(G+5,0),color(15),printf("请选择方块进行操作"); color(240); if(c=='w'&&check(nx-1,ny)) { gto(nx,ny); if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ') color(mapc[nx-1][ny+1]); printf("%c",tmap[nx-1][ny+1]); gto(nx-=1,ny);color(15);printf("@"); } else if(c=='s'&&check(nx+1,ny)) { gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]); gto(nx+=1,ny);color(15);printf("@"); } else if(c=='a'&&check(nx,ny-1)) { gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]); gto(nx,ny-=1);color(15);printf("@"); } else if(c=='d'&&check(nx,ny+1)) { gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]); gto(nx,ny+=1);color(15);printf("@"); } //上下左右移动 else { if(c==' '&&(!(tmap[nx-1][ny+1]<='9'&&tmap[nx-1][ny+1]>='0'))&&tmap[nx-1][ny+1]!='F') { mapc[nx-1][ny+1]=col[map1[nx-1][ny+1]];//如果本来放了标记,mapc[nx-1][ny+1]的颜色为黑色,在打开时里面的颜色却不一定是黑色 if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()==' ') { if(map1[nx-1][ny+1]==-1) {Lose=1;return;} dfs(nx,ny); } } else { if(map1[nx-1][ny+1]==-1) {Lose=1;return;} dfs(nx,ny); } } else if(c=='1') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()=='1') st(nx,ny); } else st(nx,ny); for(int i=1;i<=8;i++) { int xx=nx+d[i][0],yy=ny+d[i][1]; if(check(xx,yy)) { gto(xx,yy); if(tmap[xx-1][yy+1]!='#') color(mapc[xx-1][yy+1]); else color(240); printf("%c",tmap[xx-1][yy+1]); } } } else if(c=='2'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1')) { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()=='2') flag(nx,ny); } else flag(nx,ny); } else if(c=='3'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1')) { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()=='3') bj(nx,ny); } else bj(nx,ny); } else if(c=='4') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()=='4') swt(); } else swt(); } else if(c=='5') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()=='5') zb(); } else zb(); } else if(c=='0') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()=='0') again(); } else again(); } } } void mainmain() { system("mode con cols=120 lines=35");//设置窗口大小 srand((unsigned)time(NULL)); int mode; printf("1.初级\n2.中级\n3.高级\n4.自定义\n"); scanf("%d",&mode);if(mode>4) mode=4; if(mode==1) G=9,K=9,Lnum=10; else if(mode==2) G=16,K=16,Lnum=40; else if(mode==3) G=16,K=30,Lnum=99;//三种等级的参数 else { printf("请输入雷区高度:");scanf("%d",&G); printf("请输入雷区宽度:");scanf("%d",&K); printf("请输入雷个数(建议不超过总大小的三分之一):");scanf("%d",&Lnum); if(G>24) G=24;if(K>30) K=30; if(G<9) G=9;if(K<9) K=9; if(Lnum<10) Lnum=10;if(Lnum>G*K*9/10) Lnum=G*K*9/10; //控制参数的范围,最后一个if是雷的数量不超过地图大小的9/10 } make(); print(); while(1) { begin(); bool f1=is_win(),f2=is_lose(); if(f1||f2) { gto(0,0); if(f1) color(202),gto(0,0),printf("你 赢 了!!是否重来?(y/n)"); if(f2) color(137),gto(0,0),printf("你 输 了!!是否重来?(y/n)");//输赢 print_real_map(); char c=getch(); if(c=='y'||c=='Y') again(); else { color(15); system("cls"); gto(MIDX,MIDY-5); printf("欢迎下次再来"); return; } } } } void print_real_map() { color(240); for(int i=1;i<=G;i++) { gto(i+1,0); for(int j=1;j<=K;j++) { if(tmap[i][j]=='F'&&is_flag_true[i][j]==0)//如果旗标错了显示红色的X color(252),printf("X"); else if(map1[i][j]==-1)//雷为黑色O color(240),printf("O"); else if(map1[i][j]==0)//空 color(240),printf(" "); else//数字 color(mapc[i][j]),printf("%d",map1[i][j]); } } }
9.俄罗斯方块小游戏
#include<iostream> #include<string> #include<ctime> #include<cstdlib> #include<windows.h> #include<conio.h> using namespace std; int block00[4][4] = { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } }; int block01[4][4] = { { 11,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 } }; int block02[4][4] = { { 12,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,1,0,0 } }; int block03[4][4] = { { 13,0,0,0 },{ 0,1,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } }; int block04[4][4] = { { 14,0,0,0 },{ 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 } }; int block05[4][4] = { { 15,0,0,0 },{ 0,1,0,0 },{ 0,1,1,0 },{ 0,1,0,0 } }; int block06[4][4] = { { 16,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 1,0,0,0 } }; int block07[4][4] = { { 17,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 },{ 0,1,0,0 } }; int block08[4][4] = { { 18,0,0,0 },{ 0,0,0,0 },{ 0,0,1,0 },{ 1,1,1,0 } }; int block09[4][4] = { { 19,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,1,1,0 } }; int block10[4][4] = { { 20,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,0,1,0 } }; int block11[4][4] = { { 21,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 1,1,0,0 } }; int block12[4][4] = { { 22,0,0,0 },{ 0,0,0,0 },{ 1,0,0,0 },{ 1,1,1,0 } }; int block13[4][4] = { { 23,0,0,0 },{ 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 } }; int block14[4][4] = { { 24,0,0,0 },{ 0,0,0,0 },{ 0,1,1,0 },{ 1,1,0,0 } }; int block15[4][4] = { { 25,0,0,0 },{ 1,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } }; int block16[4][4] = { { 26,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 } }; int block17[4][4] = { { 27,0,0,0 },{ 0,0,1,0 },{ 0,1,1,0 },{ 0,1,0,0 } }; int block18[4][4] = { { 28,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 1,1,0,0 } }; void initialWindow(HANDLE hOut);//初始化窗口 void initialPrint(HANDLE hOut);//初始化界面 void gotoXY(HANDLE hOut, int x, int y);//移动光标 void roundBlock(HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置 bool collisionDetection(int block[4][4], int map[21][12], int x, int y);//检测碰撞 void printBlock(HANDLE hOut, int block[4][4], int x, int y);//打印方块 void clearBlock(HANDLE hOut, int block[4][4], int x, int y);//消除方块 void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移 void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移 void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度 int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落 void myStop(HANDLE hOut, int block[4][4]);//游戏暂停 void gameOver(HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束 void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);//判断是否能消行并更新分值 int main() { int map[21][12]; int blockA[4][4];//候选区的方块 int blockB[4][4];//下落中的方块 int positionX, positionY;//方块左上角的坐标 bool check;//检查方块还能不能下落 char key;//用来存储按键 int val;//用来控制下落速度 int fraction;//用来存储得分 int checkpoint;//用来存储关卡 int times; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄 initialWindow(hOut); initial: gotoXY(hOut, 0, 0); initialPrint(hOut); check = true; val = 50; fraction = 0; checkpoint = 1; times = val; for (int i = 0; i < 20; ++i) { for (int j = 1; j < 11; ++j) { map[i][j] = 0; } } for (int i = 0; i < 20; ++i) { map[i][0] = map[i][11] = 1; } for (int i = 0; i < 12; ++i) { map[20][i] = 1; } srand((unsigned)time(NULL)); roundBlock(hOut, blockA); while (true) { if (check) { eliminateRow(hOut, map, val, fraction, checkpoint); check = false; positionX = -3; positionY = 4; if (collisionDetection(blockA, map, positionX, positionY)) { for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { blockB[i][j] = blockA[i][j]; } } roundBlock(hOut, blockA); } else { gameOver(hOut, blockA, map); goto initial; } } printBlock(hOut, blockB, positionX, positionY); if (_kbhit()) { key = _getch(); switch (key) { case 72: myUp(hOut, blockB, map, positionX, positionY); break; case 75: myLeft(hOut, blockB, map, positionX, positionY); break; case 77: myRight(hOut, blockB, map, positionX, positionY); break; case 80: switch (myDown(hOut, blockB, map, positionX, positionY)) { case 0: check = false; break; case 1: check = true; break; case 2: gameOver(hOut, blockB, map); goto initial; default: break; } break; case 32: myStop(hOut, blockA); break; case 27: exit(0); default: break; } } Sleep(20); if (0 == --times) { switch (myDown(hOut, blockB, map, positionX, positionY)) { case 0: check = false; break; case 1: check = true; break; case 2: gameOver(hOut, blockB, map); goto initial; default: break; } times = val; } } cin.get(); return 0; } void initialWindow(HANDLE hOut) { SetConsoleTitle("俄罗斯方块"); COORD size = { 80, 25 }; SetConsoleScreenBufferSize(hOut, size); SMALL_RECT rc = { 0, 0, 79, 24 }; SetConsoleWindowInfo(hOut, true, &rc); CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; SetConsoleCursorInfo(hOut, &cursor_info); } void initialPrint(HANDLE hOut) { SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); for (int i = 0; i < 20; ++i) { cout << "■ ■☆ ☆" << endl; } gotoXY(hOut, 26, 0); cout << "☆☆☆☆☆☆☆☆☆☆☆"; gotoXY(hOut, 0, 20); cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆"; gotoXY(hOut, 26, 1); cout << "分 数: "; gotoXY(hOut, 26, 2); cout << "关 卡: "; gotoXY(hOut, 26, 4); cout << "下一方块:"; gotoXY(hOut, 26, 9); cout << "操作方法:"; gotoXY(hOut, 30, 11); cout << "↑:旋转 ↓:速降"; gotoXY(hOut, 30, 12); cout << "→:右移 ←:左移"; gotoXY(hOut, 30, 13); cout << "空格键:开始/暂停"; gotoXY(hOut, 30, 14); cout << "Esc 键:退出"; gotoXY(hOut, 26, 16); cout << "关 于:"; gotoXY(hOut, 30, 18); cout << "俄罗斯方块V1.0"; gotoXY(hOut, 35, 19); } void gotoXY(HANDLE hOut, int x, int y) { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(hOut, pos); } void roundBlock(HANDLE hOut, int block[4][4]) { clearBlock(hOut, block, 5, 15); switch (rand() % 19) { case 0: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block00[i][j]; } } break; case 1: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block01[i][j]; } } break; case 2: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block02[i][j]; } } break; case 3: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block03[i][j]; } } break; case 4: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block04[i][j]; } } break; case 5: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block05[i][j]; } } break; case 6: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block06[i][j]; } } break; case 7: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block07[i][j]; } } break; case 8: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block08[i][j]; } } break; case 9: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block09[i][j]; } } break; case 10: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block10[i][j]; } } break; case 11: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block11[i][j]; } } break; case 12: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block12[i][j]; } } break; case 13: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block13[i][j]; } } break; case 14: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block14[i][j]; } } break; case 15: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block15[i][j]; } } break; case 16: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block16[i][j]; } } break; case 17: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block17[i][j]; } } break; case 18: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block18[i][j]; } } break; default: break; } printBlock(hOut, block, 5, 15); } bool collisionDetection(int block[4][4], int map[21][12], int x, int y) { for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1) { return false; } } } return true; } void printBlock(HANDLE hOut, int block[4][4], int x, int y) { switch (block[0][0]) { case 10: case 11: SetConsoleTextAttribute(hOut, FOREGROUND_GREEN); break; case 12: case 13: case 14: case 15: SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY); break; case 16: case 17: case 18: case 19: SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); break; case 20: case 21: case 22: case 23: SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY); break; case 24: case 25: SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY); break; case 26: case 27: SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY); break; case 28: SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY); break; default: break; } for (int i = 0; i < 4; ++i) { if (i + x >= 0) { for (int j = 0; j < 4; ++j) { if (block[i][j] == 1) { gotoXY(hOut, 2 * (y + j), x + i); cout << "■"; } } } } } void clearBlock(HANDLE hOut, int block[4][4], int x, int y) { for (int i = 0; i < 4; ++i) { if (i + x >= 0) { for (int j = 0; j < 4; ++j) { if (block[i][j] == 1) { gotoXY(hOut, 2 * (y + j), x + i); cout << " "; } } } } } void gameOver(HANDLE hOut, int block[4][4], int map[21][12]) { SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY); gotoXY(hOut, 9, 8); cout << "GAME OVER"; gotoXY(hOut, 8, 9); cout << "空格键:重来"; gotoXY(hOut, 8, 10); cout << "ESC键:退出"; char key; while (true) { key = _getch(); if (key == 32) { return; } if (key == 27) { exit(0); } } } int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y) { if (collisionDetection(block, map, x + 1, y)) { clearBlock(hOut, block, x, y); ++x; return 0; } if (x < 0) { return 2; } for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { if (block[i][j] == 1) { map[x + i][y + j] = 1; SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); gotoXY(hOut, 2 * (y + j), x + i); cout << "■"; } } } return 1; } void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) { if (collisionDetection(block, map, x, y - 1)) { clearBlock(hOut, block, x, y); --y; } } void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) { if (collisionDetection(block, map, x, y + 1)) { clearBlock(hOut, block, x, y); ++y; } } void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) { switch (block[0][0]) { case 10: if (collisionDetection(block01, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block01[i][j]; } } } break; case 11: if (collisionDetection(block00, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block00[i][j]; } } } else if (collisionDetection(block00, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block00[i][j]; } } --y; } else if (collisionDetection(block00, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block00[i][j]; } } ++y; } else if (collisionDetection(block00, map, x, y - 2)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block00[i][j]; } } y = y - 2; } else if (collisionDetection(block00, map, x, y + 2)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block00[i][j]; } } y = y + 2; } break; case 12: if (collisionDetection(block03, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block03[i][j]; } } } else if (collisionDetection(block03, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block03[i][j]; } } --y; } else if (collisionDetection(block03, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block03[i][j]; } } ++y; } break; case 13: if (collisionDetection(block04, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block04[i][j]; } } } else if (collisionDetection(block04, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block04[i][j]; } } --y; } else if (collisionDetection(block04, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block04[i][j]; } } ++y; } break; case 14: if (collisionDetection(block05, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block05[i][j]; } } } else if (collisionDetection(block05, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block05[i][j]; } } --y; } else if (collisionDetection(block05, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block05[i][j]; } } ++y; } break; case 15: if (collisionDetection(block02, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block02[i][j]; } } } else if (collisionDetection(block02, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block02[i][j]; } } --y; } else if (collisionDetection(block02, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block02[i][j]; } } ++y; } break; case 16: if (collisionDetection(block07, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block07[i][j]; } } } else if (collisionDetection(block07, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block07[i][j]; } } --y; } else if (collisionDetection(block07, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block07[i][j]; } } ++y; } break; case 17: if (collisionDetection(block08, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block08[i][j]; } } } else if (collisionDetection(block08, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block08[i][j]; } } --y; } else if (collisionDetection(block08, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block08[i][j]; } } ++y; } break; case 18: if (collisionDetection(block09, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block09[i][j]; } } } else if (collisionDetection(block09, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block09[i][j]; } } --y; } else if (collisionDetection(block09, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block09[i][j]; } } ++y; } break; case 19: if (collisionDetection(block06, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block06[i][j]; } } } else if (collisionDetection(block06, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block06[i][j]; } } --y; } else if (collisionDetection(block06, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block06[i][j]; } } ++y; } break; case 20: if (collisionDetection(block11, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block11[i][j]; } } } else if (collisionDetection(block11, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block11[i][j]; } } --y; } else if (collisionDetection(block11, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block11[i][j]; } } ++y; } break; case 21: if (collisionDetection(block12, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block12[i][j]; } } } else if (collisionDetection(block12, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block12[i][j]; } } --y; } else if (collisionDetection(block12, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block12[i][j]; } } ++y; } break; case 22: if (collisionDetection(block13, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block13[i][j]; } } } else if (collisionDetection(block13, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block13[i][j]; } } --y; } else if (collisionDetection(block13, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block13[i][j]; } } ++y; } break; case 23: if (collisionDetection(block10, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block10[i][j]; } } } else if (collisionDetection(block10, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block10[i][j]; } } --y; } else if (collisionDetection(block10, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block10[i][j]; } } ++y; } break; case 24: if (collisionDetection(block15, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block15[i][j]; } } } else if (collisionDetection(block15, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block15[i][j]; } } --y; } else if (collisionDetection(block15, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block15[i][j]; } } ++y; } break; case 25: if (collisionDetection(block14, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block14[i][j]; } } } else if (collisionDetection(block14, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block14[i][j]; } } --y; } else if (collisionDetection(block14, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block14[i][j]; } } ++y; } break; case 26: if (collisionDetection(block17, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block17[i][j]; } } } else if (collisionDetection(block17, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block17[i][j]; } } --y; } else if (collisionDetection(block17, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block17[i][j]; } } ++y; } break; case 27: if (collisionDetection(block16, map, x, y)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block16[i][j]; } } } else if (collisionDetection(block16, map, x, y - 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block16[i][j]; } } --y; } else if (collisionDetection(block16, map, x, y + 1)) { clearBlock(hOut, block, x, y); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { block[i][j] = block16[i][j]; } } ++y; } break; default: break; } } void myStop(HANDLE hOut, int block[4][4]) { clearBlock(hOut, block, 5, 15); SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY); gotoXY(hOut, 30, 7); cout << "游戏暂停"; char key; while (true) { key = _getch(); if (key == 32) { gotoXY(hOut, 30, 7); cout << " "; printBlock(hOut, block, 5, 15); return; } if (key == 27) { exit(0); } } } void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint) { SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); for (int i = 19; i >= 0; --i) { int x = 0; for (int j = 1; j < 11; ++j) { x += map[i][j]; } if (x == 10) { fraction += 100; if (val > 1 && fraction / 1000 + 1 != checkpoint) { checkpoint = fraction / 1000 + 1; val -= 5; } for (int m = i; m > 0; --m) { for (int n = 1; n < 11; ++n) { map[m][n] = map[m - 1][n]; gotoXY(hOut, 2 * n, m); if (map[m][n] == 1) { cout << "■"; } else { cout << " "; } } } ++i; } } gotoXY(hOut, 36, 1); cout << fraction; gotoXY(hOut, 36, 2); cout << checkpoint; }
10.狼人杀小游戏
#include<bits/stdc++.h> #include<windows.h> #define /*白色*/white SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); #define /*初始色*/original SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); #define /*红色*/red SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED); #define /*绿色*/green SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN); #define /*蓝色*/blue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE); #define /*黄色*/yellow SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED |FOREGROUND_GREEN); #define /*粉色*/pink SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED |FOREGROUND_BLUE); #define /*淡蓝*/lightblue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN |FOREGROUND_BLUE); using namespace std; void Slowsay(string a){ for(int i=0;i<a.size();i++){ cout<<a[i]; Sleep(20); } Sleep(100); } int life[7]={1,1,1,1,1,1}; int potions[5]={-1,1}; int vote[7]={0}; string name[7]={"预言家","女巫","平民","平民","狼人","狼人"}; int seer(int x,int y,int n,int p1,int p2,int l1,int l2) { int rescued; int die; int die_potions; bool gameover=false; while(gameover==false){ Slowsay("\n下一天:----------------------------\n"); for(int i=1;i<=4;i++){ if(i==1&&(life[l1]>=0 or life[l2]>=0)){ Slowsay("狼人"); srand((unsigned)time(NULL)); die=rand()%6; while(name[die]=="狼人"||life[die]==-1) die=rand()%6; life[die]--; Slowsay("狼人杀了"); Slowsay(name[die]); cout<<'\n'; } if(i==2&&life[x]>=0){ Slowsay("预言家:\n"); Slowsay("你是预言家,请输入0~5的编号(代表相应的人)(除了"); cout<<x; Slowsay("号)来预言\n"); int res; cin>>res; if(name[res]=="平民"||name[res]=="女巫"||name[res]=="预言家") cout<<"好人"<<endl; if(name[res]=="狼人") cout<<"坏人"<<endl; } if(i==3&&life[n]>=0){ Slowsay("女巫:"); int dor; srand((unsigned)time(NULL)); dor=rand()%3; if(dor==0){ die_potions=rand()%6; while(name[die_potions]=="女巫"||life[die_potions]<=0) die_potions=rand()%6; life[die_potions]--; potions[dor]++; Slowsay("女巫杀了"); Slowsay(name[die_potions]); cout<<endl; } if(dor==1){ int help; for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i; potions[dor]--; Slowsay("女巫救了"); Slowsay(name[help]); cout<<endl; } if(dor==2){ Slowsay("没用药"); } } if(i==4) { int sum_die=0; Slowsay("今晚"); for(int j=0;j<6;j++) { if(life[j]==0) { sum_die++; life[j]--; cout<<j; Slowsay("号"); Slowsay(name[j]); Slowsay("死了"); } } if(sum_die==0) Slowsay("是平安夜"); int fl=0,fp=0; for(int j=0;j<6;j++) { if(life[j]==1) { if(name[j]=="狼人") fl++; else fp++; } } if(fl==0){ Slowsay("\n平民赢了\n"); gameover=true; continue; } if(fp==0){ Slowsay("\n狼人赢了\n"); gameover=true; continue; } Slowsay("\n投票\n"); int a[7]={0,0,0,0,0,0}; for(int j=0;j<6;j++){ if(j==x&&life[x]==1){ Slowsay("请投0~5号你认为是狼人的"); int ps; cin>>ps; a[ps]++; } else if(life[j]==1){ srand((unsigned)time(NULL)); int cs; cs=rand()%6; while(life[cs]!=1||cs==j) cs=rand()%6; a[cs]++; } } Slowsay("投票结果:\n0 1 2 3 4 5\n"); for(int j=0;j<6;j++) cout<<a[j]<<" "; cout<<endl; int max=-1,mp; for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j; cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl; life[mp]=-1; int good=0,bad=0; for(int j=0;j<6;j++){ if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++; if(life[j]==1&&name[j]=="狼人") bad++; } if(bad==0){ Slowsay("平民赢了\n"); gameover=true; } if(good==0){ Slowsay("狼人赢了\n"); gameover=true; } } } system("pause"); } return 0; } int Lycan(int x,int y,int n,int p1,int p2,int l1,int l2) { int rescued; int die; int die_potions; bool gameover=false; while(gameover==false){ Slowsay("\n下一天:----------------------------\n"); for(int i=1;i<=4;i++){ if(i==1&&life[x]>=0){ Slowsay("狼人:\n你是狼人,请输入0~5的编号(代表相应的人)(除了"); cout<<x<<'和'<<l1+l2-x; Slowsay("号)来杀死\n"); cin>>die; life[die]--; Slowsay("狼人杀了"); cout<<name[die]<<endl; } if(i==1&&life[x]==-1&&life[l1+l2-x]>=0){ Slowsay("狼人:\n"); srand((unsigned)time(NULL)); die=rand()%6; while(name[die]=="狼人"||life[die]==-1) die=rand()%6; life[die]--; Slowsay("狼人杀了"); cout<<name[die]<<endl; } if(i==2&&life[y]>=0){ Slowsay("预言家:\n预言完毕"); } if(i==3&&life[n]>=0){ Slowsay("女巫:\n"); int dor; srand((unsigned)time(NULL)); dor=rand()%3; if(dor==0){ die_potions=rand()%6; while(name[die_potions]=="女巫"||life[die_potions]<=0) die_potions=rand()%6; life[die_potions]--; potions[dor]++; Slowsay("女巫杀了"); Slowsay(name[die_potions]); cout<<endl; } if(dor==1){ int help; for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i; potions[dor]--; Slowsay("女巫救了"); Slowsay(name[help]); cout<<endl; } if(dor==2){ Slowsay("没用药\n"); } } if(i==4){ int sum_die=0; Slowsay("今晚"); for(int j=0;j<6;j++) { if(life[j]==0) { sum_die++; life[j]--; cout<<j; Slowsay("号"); Slowsay(name[j]); Slowsay("死了"); } } if(sum_die==0) Slowsay("是平安夜"); int fl=0,fp=0; for(int j=0;j<6;j++){ if(life[j]==1){ if(name[j]=="狼人") fl++; else fp++; } } if(fl==0){ Slowsay("\n平民赢了\n"); gameover=true; continue; } if(fp==0){ Slowsay("狼人赢了"); gameover=true; continue; } Slowsay("\n投票\n"); int a[7]={0,0,0,0,0,0}; for(int j=0;j<6;j++){ if(j==x&&life[x]==1){ Slowsay("请投0~5号你认为是狼人的"); int ps; cin>>ps; a[ps]++; } else if(life[j]==1){ srand((unsigned)time(NULL)); int cs; cs=rand()%6; while(life[cs]!=1||cs==j) cs=rand()%6; a[cs]++; } } Slowsay("投票结果:\n0 1 2 3 4 5"); for(int j=0;j<6;j++) cout<<a[j]<<" "; cout<<endl; int max=-1,mp; for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j; cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl; life[mp]=-1; int good=0,bad=0; for(int j=0;j<6;j++) { if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++; if(life[j]==1&&name[j]=="狼人") bad++; } if(bad==0){ Slowsay("平民赢了"); gameover=true; } if(good==0){ Slowsay("狼人赢了"); gameover=true; } } } system("pause"); } return 0; } int witch(int x,int y,int n,int p1,int p2,int l1,int l2) { int rescued; int die; int die_potions; bool gameover=false; while(gameover==false){ Slowsay("\n下一天:----------------------------\n"); for(int i=1;i<=4;i++){ if(i==1&&(life[l1]>=0 or life[l2]>=0)){ Slowsay("狼人:"); srand((unsigned)time(NULL)); die=rand()%6; while(name[die]=="狼人"||life[die]==-1) die=rand()%6; life[die]--; Slowsay("狼人杀了"); Slowsay(name[die]); cout<<endl; } if(i==2&&life[y]>=0){ Slowsay("预言家:\n预言完毕"); } if(i==3&&life[n]>=0){ Slowsay("女巫:\你是女巫,请输入d、r、n。d代表要杀、r代表要救,n代表不用药n"); char dor; cin>>dor; if(dor=='d'){ Slowsay("请输入0~5号你要杀的人(除了"); cout<<n; Slowsay("号)\n"); cin>>die_potions; life[die_potions]--; potions[0]++; Slowsay("女巫杀了"); Slowsay(name[die_potions]); cout<<endl; } if(dor=='r'){ int help; for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i; potions[1]--; Slowsay("女巫救了"); Slowsay(name[help]); } if(dor=='n'){ Slowsay("没用药\n"); } } if(i==4){ int sum_die=0; Slowsay("今晚"); cout<<""; for(int j=0;j<6;j++) { if(life[j]==0) { sum_die++; life[j]--; cout<<j; Slowsay("号"); Slowsay(name[j]); Slowsay("死了"); } } if(sum_die==0) Slowsay("是平安夜"); int fl=0,fp=0; for(int j=0;j<6;j++) { if(life[j]==1) { if(name[j]=="狼人") fl++; else fp++; } } if(fl==0){ Slowsay("\n平民赢了\n"); gameover=true; continue; } if(fp==0){ Slowsay("\n狼人赢了\n"); gameover=true; continue; } Slowsay("\n投票\n"); cout<<endl<<""<<endl; int a[7]={0,0,0,0,0,0}; for(int j=0;j<6;j++){ if(j==x&&life[x]==1){ Slowsay("请投0~5号你认为是狼人的"); int ps; cin>>ps; a[ps]++; } else if(life[j]==1){ srand((unsigned)time(NULL)); int cs; cs=rand()%6; while(life[cs]!=1||cs==j) cs=rand()%6; a[cs]++; } } Slowsay("投票结果:\n0 1 2 3 4 5\n"); for(int j=0;j<6;j++) cout<<a[j]<<" "; cout<<endl; int max=-1,mp; for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j; cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl; life[mp]=-1; int good=0,bad=0; for(int j=0;j<6;j++) { if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++; if(life[j]==1&&name[j]=="狼人") bad++; } if(bad==0){ Slowsay("平民赢了\n"); gameover=true; } if(good==0){ Slowsay("狼人赢了\n"); cout<<""<<endl; gameover=true; } } } system("pause"); } return 0; } int commoner(int x,int y,int n,int p1,int p2,int l1,int l2){ int rescued; int die; int die_potions; bool gameover=false; while(gameover==false){ Slowsay("\n下一天:----------------------------\n"); for(int i=1;i<=4;i++){ if(i==1&&(life[l1]>=0 or life[l2]>=0)){ Slowsay("狼人:\n"); srand((unsigned)time(NULL)); die=rand()%6; while(name[die]=="狼人"||life[die]==-1) die=rand()%6; life[die]--; Slowsay("狼人杀了"); Slowsay(name[die]); cout<<endl; } if(i==2&&life[y]>=0){ Slowsay("预言家:\n预言完毕\n"); } if(i==3&&life[n]>=0){ Slowsay("女巫:\n"); int dor; srand((unsigned)time(NULL)); dor=rand()%3; if(dor==0){ die_potions=rand()%6; while(name[die_potions]=="女巫"||life[die_potions]<=0) die_potions=rand()%6; life[die_potions]--; potions[dor]++; Slowsay("女巫杀了"); Slowsay(name[die_potions]); cout<<endl; } if(dor==1){ int help; for(int i=0;i<6;i++) if(life[i]==0) life[i]++,help=i; potions[dor]--; Slowsay("女巫救了"); Slowsay(name[help]); cout<<endl; } if(dor==2){ Slowsay("没用药"); } } if(i==4){ int sum_die=0; Slowsay("今晚"); for(int j=0;j<6;j++){ if(life[j]==0){ sum_die++; life[j]--; cout<<j; Slowsay("号"); Slowsay(name[j]); Slowsay("死了"); } } if(sum_die==0) Slowsay("是平安夜"); int fl=0,fp=0; for(int j=0;j<6;j++) { if(life[j]==1) { if(name[j]=="狼人") fl++; else fp++; } } if(fl==0) { cout<<endl<<"平民赢了"<<endl; gameover=true; continue; } if(fp==0) { cout<<endl<<"狼人赢了"<<endl; gameover=true; continue; } cout<<endl<<"投票"<<endl; int a[7]={0,0,0,0,0,0}; for(int j=0;j<6;j++) { if(j==x&&life[x]==1) { cout<<"请投0~5号你认为是狼人的"; int ps; cin>>ps; a[ps]++; } else if(life[j]==1) { srand((unsigned)time(NULL)); int cs; cs=rand()%6; while(life[cs]!=1||cs==j) cs=rand()%6; a[cs]++; } } cout<<"投票结果:"<<endl; cout<<"0 1 2 3 4 5"<<endl; for(int j=0;j<6;j++) cout<<a[j]<<" "; cout<<endl; int max=-1,mp; for(int j=0;j<6;j++) if(a[j]>=max) max=a[j],mp=j; cout<<mp<<"号"<<name[mp]<<"出局"<<endl<<endl; life[mp]=-1; int good=0,bad=0; for(int j=0;j<6;j++) { if(life[j]==1&&(name[j]=="平民"||name[j]=="女巫"||name[j]=="预言家")) good++; if(life[j]==1&&name[j]=="狼人") bad++; } if(bad==0) { cout<<"平民赢了"<<endl; gameover=true; } if(good==0) { cout<<"狼人赢了"<<endl; gameover=true; } } } system("pause"); } return 0; } int main() { begin: white cout<<" 狼人杀"<<endl; yellow cout<<"1个预言家 "; yellow cout<<"1个女巫 " ; yellow cout<<"2个平民 "; green cout<<" 2个狼人"<<endl; original Sleep(1000); srand((unsigned)time(NULL)); for(int i=1;i<=1000;i++) { int x=rand()%6; int y=rand()%6; swap(name[x],name[y]); } int player=rand()%6; cout<<"你是"; red cout<<name[player]<<endl; original cout<<"您的编号是"<<player<<endl<<endl; Sleep(2000); int l1,l2,l=1; int y; int n; int p1,p2,p=1; for(int i=0;i<6;i++) { if(name[i]=="狼人"&&l==1) { l1=i; l++; continue; } if(name[i]=="狼人"&&l==2) l2=i,l++; if(name[i]=="预言家") y=i; if(name[i]=="女巫") n=i; if(name[i]=="平民"&&p==1) { p1=i; p++; continue; } if(name[i]=="平民"&&p==2) p2=i,p++; } if(player==y) seer(player,y,n,p1,p2,l1,l2); if(player==l1 or player==l2) Lycan(player,y,n,p1,p2,l1,l2); if(player==n) witch(player,y,n,p1,p2,l1,l2); if(player==p1 or player==p2) commoner(player,y,n,p1,p2,l1,l2); else return 0; }