2 条题解

  • 0
    @ 2024-5-25 11:50:54

    好长啊,下一个,贪吃蛇:

    #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
      @ 2024-5-25 11:46:53

      是不是很简单?下一个,飞机大战:

      #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
      上传者