zoukankan      html  css  js  c++  java
  • 飞机大战

    此作业的要求:[https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11577]

    一、功能和截图

    GUI版本:

     
    玩家操作说明:通过键盘的“w”向上移动,“s”向下移动,“a”向左移动,“d”向右移动,“ ”(空格)来发射子弹。击中敌机得一分,五分敌机速度提高一档,共4档。飞机共有5血量,敌机撞击一次减少一滴血,5滴血消耗完后游戏结束。
    二、代码

    #include <graphics.h>
    #include <conio.h>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #pragma comment(lib,"Winmm.lib")
    #define Width  400
    #define High 700
    IMAGE img_bk;
    IMAGE im_planeNormal_1, im_planeNormal_2;
    IMAGE im_bullet1, im_bullet2;
    IMAGE im_enemyPlane1, im_enemyPlane2;
    IMAGE img_planeExplode1, img_planeExplode2;
    int position_x; //飞机的初始位置 
    int position_y; //飞机的初始位置
    int bullet_x, bullet_y; //子弹的位置 
    int em_x, em_y;         //敌机位置 
    int speed;               //敌机下落速度
    int sum=0;                //得分
    int isBoo=0;            //飞机是否爆炸
    int HP = 5;                //血量
    char tmp;
    
    
    void starup() {                    //初始化数据 
        
        sum = 0;
        speed = 10;
        position_x = Width / 2;
        position_y = High / 2;
        bullet_x =0;
        bullet_y =-50;
        em_y = 0;
        em_x = 0;
        initgraph(Width, High);
    
        loadimage(&im_enemyPlane1, L"D:\c\enemyPlane1.jpg");
        loadimage(&im_enemyPlane2, L"D:\c\enemyPlane2.jpg");
        loadimage(&im_bullet1, L"D:\c\bullet2.jpg");
        loadimage(&im_bullet2, L"D:\c\bullet1.jpg");
        loadimage(&img_bk,L"D:\c\background.jpg");
        loadimage(&im_planeNormal_1, L"D:\c\planeNormal_1.jpg");
        loadimage(&im_planeNormal_2, L"D:\c\planeNormal_2.jpg");
        loadimage(&img_planeExplode1, L"D:\c\planeExplode_1.jpg");
        loadimage(&img_planeExplode2, L"D:\c\planeExplode_2.jpg");
    
    
        BeginBatchDraw();
    }
    
    void show() {                    //显示页面
        putimage(0,0,&img_bk);
        if (isBoo == 0) {
            putimage(bullet_x, bullet_y, &im_bullet1, SRCINVERT);
            putimage(bullet_x, bullet_y, &im_bullet2, NOTSRCERASE);
            putimage(position_x - 50, position_y - 60, &im_planeNormal_1, NOTSRCERASE);
            putimage(position_x - 50, position_y - 60, &im_planeNormal_2, SRCINVERT);
            putimage(em_x, em_y, &im_enemyPlane1, NOTSRCERASE);
            putimage(em_x, em_y, &im_enemyPlane2, SRCINVERT);
        }
        else {
            putimage(position_x - 50, position_y - 60, &img_planeExplode1, NOTSRCERASE); // 显示爆炸飞机    
            putimage(position_x - 50, position_y - 60, &img_planeExplode2, SRCINVERT);
    } outtextxy(Width*0.001 , High*0.95 , L"击中敌机得一分,集五分敌机提速共4档,您共有5个血量!"); char s[5]; sprintf_s(s, "%d", sum); //outtextxy(Width*0.3, High * 0.95,s);  FlushBatchDraw(); } void updataWhithOutInput() { //与用户输入无关的数据更新 //子弹上升的速度 if (bullet_y > -50) { bullet_y -= 2; } //控制敌机的下落速度  static int em_speed = 0; if (em_speed < speed) { em_speed++; } if (em_speed == speed) { if (em_y > High) { em_x = rand() % Width; em_y = -1; } else { em_y++; em_speed = 0; } } //当子弹击中敌机 if (abs(em_y - bullet_y) + abs(em_x - bullet_x) < 80) { sum++; if (sum % 5 == 0) { if (speed > 6) { speed -= 5; } else if (speed != 0) { speed -= 2; } else { speed = 1; } } em_y = -10; em_x = rand() % Width-10; bullet_x = 0; bullet_y = -50; } //当敌机与我机相撞 if (abs(em_y - position_y) + abs(em_x - bullet_x) < 200) { //isBoo = 1; if (HP <= 0) { isBoo = 1; //outtextxy(Width , High, L"游戏结束!点击b键继续,任意键退出。"); /* tmp = _getch(); if (tmp == 'b') { isBoo = 0; HP = 5; }*/ } else { HP--; //printf("剩余血量:%d,点击任意键重新开始。", HP); em_y = -10; em_x = rand() % Width-10; isBoo = 0; } } } void updataWhithInput() { //用户输入的更新 char input; if (_kbhit()) { //检测键盘输入  input = _getch(); if (input == 's') { if (position_y < High - 1) { position_y += 5; } } if (input == 'w') { if (position_y > 0) { position_y-=5; } } if (input == 'd') { if (position_x < Width - 1) { position_x += 5; } } if (input == 'a') { if (position_x > 0) { position_x-=5; } } if (input == ' ') { bullet_x = position_x - 1; bullet_y = position_y; mciSendString(L"close fgmusic", NULL, 0, NULL); // 先把前面一次的音乐关闭 mciSendString(L"open D:\c\f_gun.mp3 alias fgmusic", NULL, 0, NULL); // 打开音乐 mciSendString(L"play fgmusic", NULL, 0, NULL); // 仅播放一次  } } } int main(int argc, char* argv[]) { starup(); //数据的初始化  while (1) { show(); //显示页面 updataWhithOutInput(); //与用户输入无关的数据更新  updataWhithInput(); } closegraph(); return 0; }

    三、PSP:

    学习

    观看童晶老师视频函数封装飞机游戏

    11.29 14:35

    11.2914:49

    0

    14min

    编程

    模仿童晶老师程序,然后添加得分,飞机遇到图形边界,子弹打中敌机。

    11.2915:04

    11.2917:32

    0

    148min

    编程

    飞机小游戏添加敌机撞到飞机,暂停、继续,HP血量

    11.29 19:40

    1.29 20:51

    0

    71min

    学习

    观看童晶老师视频P37学习使用EasyX

    11.30 16:03

    11.30 16:35

     0

     32min

    编程

    熟悉使用Easy X,初步对飞机大战GUI进行熟悉。

    11.30 16:50

    11.30 17:55

    8min

    57min

    编程

    对飞机大战进行GUI设计

    11.30 21:00

    11.30 22:32

    0min

    92min

  • 相关阅读:
    【HDOJ】1811 Rank of Tetris
    【HDOJ】1518 Square
    日期类 Date
    RunTime
    System 系统类
    StringBuffer
    获取联系人列表的时候contact_id出现null的值
    String类
    object类
    eclipse使用的步骤
  • 原文地址:https://www.cnblogs.com/shizhiteng/p/14064414.html
Copyright © 2011-2022 走看看