2 条题解
-
0
好长啊,下一个,贪吃蛇:
#include #include #include #include #include <conio.h> #include #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 << "-"; }
/*** 首次输出蛇,其中snake[0]代表头 **/ 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].x0 || snake[0].y0 || snake[0].xm+1 || snake[0].yn+1) return false; for (int i=1;i<=snake_length-1;i++) { if (snake[0].xsnake[i].x && snake[0].ysnake[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].xfood.x && snake[k].yfood.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].xfood.x && snake[0].yfood.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 << "--------------------贪吃蛇---------------------" << endl; cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl; cout << "先选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl; cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl; cout << "-----------------------------------------------" << endl; m=25; n=40; 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) (mn); /* 调节时间,单位是ms / a=clock(); while (1) { b=clock(); if (b-a>=(int)(400-30hard)(1-sqrt(hard_len))) break; } /** 接受键盘输入的上下左右,并以此改变方向 / if (kbhit()) { ch=getch(); if (ch==-32) { ch=getch(); switch(ch) { case 72: if (dir2 || dir3) dir=0; break; case 80: if (dir2 || dir3) dir=1; break; case 75: if (dir0 || dir1) dir=2; break; case 77: if (dir0 || dir1) dir=3; break; } } } / 前进 / if (!go_ahead()) break; / 在最后输出此时长度 ***/ locate(m+2,12); cout << snake_length; } system("pause"); return 0; }
下一个,著名的2048:
#include #include #include #include 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 > board; //棋盘 vector row; bool judgeInsert(int x,int y); bool judgeSlide(); //判断是否能滑动,(未写完) void copyBoard(vector< vector > &newBoard,vector< vector > &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 > copyBoard; //棋盘 vector 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 >& newBoard, vector< vector >& 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" ;
}
-
0
是不是很简单?下一个,飞机大战:
#include #include<windows.h> #include<conio.h> #include<time.h> #include 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"); } }
//左上角坐标、右下角坐标、用row填充行、用col填充列 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<<" p 暂停游戏。"; SetPos(52,16); 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<<"制作:LJF神犇"; 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( 'k' == 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)制作:最牛的LJF"; 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();
}
- 1
信息
- ID
- 3
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 2
- 标签
- 递交数
- 445
- 已通过
- 260
- 上传者