2019 春第1次课程设计实验报告

一、实验项目名称

飞机大战

二、实验项目功能描述(用自己的语言描述)

1.用鼠标控制飞机移动。
2.发射子弹:按鼠标左键后飞机发射子弹。
3.增加敌机:敌机自动向下运动,从边界消失后会重新出现,
4.判断胜败:子弹击中敌机加分,敌机撞击我机游戏失败,并增加我机爆炸的图片效果。
5.增加音效:增加背景音乐、发射子弹音效、飞机爆炸音效、得分奖励音效。

三、项目模块结构介绍(文字+总体模型)

#include<graphics.h>
#include<conio.h>
#include<math.h>
#include<stdio.h>

#pragma comment(lib,"Winmm.lib")

#define High 768        //游戏画面尺寸
#define Width 512

IMAGE img_bk;          //背景图片
int position_x,position_y;     //飞机的位置
int bullet_x,bullet_y;         //子弹的位置
float enemy_x,enemy_y;         //敌机的位置
IMAGE img_planeExplode1,img_planeExplode2; //爆炸飞机图片
IMAGE img_planeNormal1,img_planeNormal2;   //飞机图片
IMAGE img_bullet1,img_bullet2;             //子弹图片
IMAGE img_enemyPlane1,img_enemyPlane2;     //敌机图片
int isExpolde=0;                           //飞机是否爆炸
int score=0;                               //得分
void startup()
{
    mciSendString("open C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\game_music.mp3 alia bkmusic",NULL,0,NULL);     //打开背景音乐
    mciSendString("play bkmusic repeat",NULL,0,NULL);       //循环播放
    initgraph(Width,High);
    loadimage(&img_bk,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\地图.jpg");
    loadimage(&img_planeNormal1,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\飞机背景.jpg");
    loadimage(&img_planeNormal2,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\一个飞机.jpg");
    loadimage(&img_bullet1,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\子弹背景.jpg");
    loadimage(&img_bullet2,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\子弹.jpg");
    loadimage(&img_enemyPlane1,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\敌机背景.jpg");
    loadimage(&img_enemyPlane2,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\敌机.jpg");
    loadimage(&img_planeExplode1,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\飞机爆炸背景.jpg");
    loadimage(&img_planeExplode2,"C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\飞机爆炸.jpg");
    position_x=High*0.7;
    position_y=Width*0.5;
    bullet_x=position_x;
    bullet_y=-85;
    enemy_x=Width*0.5;
    enemy_y=10;
    BeginBatchDraw();
}

void show()                    //显示图片和得分
{
    putimage(0,0,&img_bk);            //显示背景
    if(isExpolde==0)
    {
    putimage(position_x-58,position_y-60,&img_planeNormal1,NOTSRCERASE);   //显示飞机
    putimage(position_x-58,position_y-60,&img_planeNormal2,SRCINVERT);
    putimage(bullet_x-9.5,bullet_y,&img_bullet1,NOTSRCERASE);                //显示子弹
    putimage(bullet_x-9.5,bullet_y,&img_bullet2,SRCINVERT);
    putimage(enemy_x,enemy_y,&img_enemyPlane1,NOTSRCERASE);                //显示敌机
    putimage(enemy_x,enemy_y,&img_enemyPlane2,SRCINVERT);
    }
    else
    {
        putimage(position_x-41,position_y-43,&img_planeExplode1,NOTSRCERASE);
                                                                             //显示爆炸飞机
        putimage(position_x-41,position_y-43,&img_planeExplode2,SRCINVERT);
    }
    outtextxy(Width*0.48,High*0.95,"得分:");                 //显示得分
    char s[5];
    sprintf(s,"%d",score);
    outtextxy(Width*0.55,High*0.95,s);
    FlushBatchDraw();
    Sleep(1);
}

void updateWithoutInput()                 //与用户输入无关的更新
{
    if(isExpolde==0)
    {
    if(bullet_y>-25)
        bullet_y=bullet_y-3;
    if(enemy_y<High-25)
        enemy_y=enemy_y+0.5;
    else
        enemy_y=10;
    if(abs(bullet_x-enemy_x-52)+abs(bullet_y-enemy_y-74)<50)               //子弹击中敌机
    {
        enemy_x=rand()%Width;                                        //rand()为随机函数
        enemy_y=-40;
        bullet_y=-85;
        mciSendString("close gemusic",NULL,0,NULL);            //先把前面一次的音乐关闭
        mciSendString("open C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\gotEnemy.mp3 alias gemusic",NULL,0,NULL);
                                                                          //打开音乐
        mciSendString("play gemusic",NULL,0,NULL);                        //仅播放一次
        score++;
        if(score>0&&score%5==0&&score%2!=0)
        {
            mciSendString("close 5music",NULL,0,NULL);                    //先把前面一次的音乐关闭
            mciSendString("open C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\5.mp3 alias 5music",NULL,0,NULL);   //打开音乐
            mciSendString("play 5music",NULL,0,NULL);                     //仅播放一次
        }
        if(score%10==0)
        {
            mciSendString("close 10music",NULL,0,NULL);                   //先把前面一次的音乐关闭
            mciSendString("open C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\10.mp3 alias 10music",NULL,0,NULL);  //打开音乐
            mciSendString("play 10music",NULL,0,NULL);                    //仅播放一次
        }
    }
    if(abs(position_x-enemy_x-52)+abs(position_y-enemy_y-74)<80)          //敌机撞击我机
    {
        isExpolde=1;
        mciSendString("close exmusic",NULL,0,NULL);                   //先把前面一次的音乐关闭
        mciSendString("open C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\explode.mp3 alias 10music",NULL,0,NULL);  //打开音乐
        mciSendString("play exmusic",NULL,0,NULL);                    //仅播放一次
    }
}
}
void updateWithInput()                       //与用户输入有关的更新
{
    if(isExpolde==0)
    {
    MOUSEMSG m;              //定义鼠标消息
    while(MouseHit())        //这个函数用于检测当前是否有鼠标消息
    {
        m=GetMouseMsg();
        if(m.uMsg == WM_MOUSEMOVE)
        {
            //飞机的位置等于鼠标所在的位置
            position_x=m.x;
            position_y=m.y;
        }
        else if(m.uMsg == WM_LBUTTONDOWN)
        {
            //按下鼠标左键发射子弹
            bullet_x=position_x;
            bullet_y=position_y-43;
            mciSendString("close fgmusic",NULL,0,NULL);                   //先把前面一次的音乐关闭
            mciSendString("open C:\\Users\\admin\\Desktop\\飞机大战游戏素材\\f_gun.mp3 alias fgmusic",NULL,0,NULL);  //打开音乐
            mciSendString("play fgmusic",NULL,0,NULL);                    //仅播放一次
        }
    }
}
}
void gameover()
{
    EndBatchDraw();
    getch();
    closegraph();
}

int main()
{
    startup();                 //数据初始化
    while(1)                   //游戏循环执行
    {
        show();                //显示画面
        updateWithoutInput();    //与用户输入无关的更新
        updateWithInput();     //与用户输入有关的更新
    }
    gameover();                //游戏结束,进行后续处理
    return 0;
}

四、实现界面展示(截图)

五、代码托管链接

https://gitee.com/heleiya/he_lei.git

六、实验总结(提出问题+解决办法+感想)

为什么游戏每次发出音效前游戏画面会有卡顿现象?
因为是直接将游戏源码编译运行,尝试将游戏源码组建成exe程序后运行,问题解决。
做一个游戏不容易,需要我更加认真的去学习,一步一步来,游戏完美运行的时候还是很有成就感的。

原文地址:https://www.cnblogs.com/hlywzj/p/10954688.html

时间: 2024-08-01 00:34:49

2019 春第1次课程设计实验报告的相关文章

2019春第四次课程设计实验报告

2019春第四次课程设计实验报告 一.实验项目名称:双人游戏 二.试验项目功能描述: 1.在原有基础上增加一个玩家,代码不变.这一步,就是"双人游戏"的核心.而这功能,类似于一个整合与扩展部分.也就是说,在单人条件可行的情况下,如何实现双人,就是我要做的 三.项目模块结构介绍 我负责的部分,一共有以下几个模块: [1]:数据初始化模块 [3]:显示画面模块 [2]:消除画面模块 [4]:用户输入更新模块 四.实现界面展示 五.代码托管链接 钟子鸣:https://gitee.com/T

2019 春第四次课程设计实验报告

2019 春第四次课程设计实验报告 一.实验项目 飞机大战 二.实验功能描述: 用鼠标控制飞机来发射子弹消灭移动的敌机,还有消灭得分 三.项目模板结构介绍: 1.用鼠标控制飞机移动 2.发射子弹 3.增加敌机 4.判断胜败 5.增加音效 四.实现界面展示: 五.代码托管链接: https://gitee.com/lyx1314/green 六.实验总结: 感想: 第四周我感觉要下载EX和VS有点麻烦,开始我是用codeblocks的运行不了EX,所以就没有运行,这周让我又多了解了一些函数的用法

2019春年第二次课程设计实验报告

一.实验项目名称 反弹球消砖块 二.实验项目功能描述(用自己的语言描述) 控制挡板左右移动使飞行的小球消除砖块 三.项目模块结构介绍(文字+总体模型) 首先有个大致的框架,然后再根据自己的设计思路进行添加和删补,在上次的游戏中添加绘图 四.实现界面展示 五.代码托管链接 代码托管链接 六.实验总结(提出问题+解决办法+感想) 解决:通过搜索#include <graphics.h>,了解到这个头函数是在另外一个编译器上才能显示图案的,然后百度了Visual C++和Visual studio这

2019 春第2次课程设计实验报告

一.实验项目名称 反弹球 二.实验项目功能描述(用自己的语言描述) 1.用字符'|'和'-'构建反弹球的边框. 2.显示挡板,通过a,d实现挡板的左右移动. 3.判断小球是否在挡板范围内,判断小球是否被挡板街道,如果是则反弹小球:如果不是则结束游戏.且可以记录反弹的次数,并显示输出. 4.小球击中字符得分. 三.项目模块结构介绍(文字+总体模型) 游戏初始化函数startup():决定边框的高和宽,挡板的长度. 显示画面函数():输出小球.砖块和挡板以及边框. 与用户输入无关更新函数update

2019春第三次课程设计实验报告

一.实验项目名称 简单的画图游戏开发 二.实验项目功能描述 画一个实心圆.画出10条直线 三.项目模块结构介绍 四.实现界面展示(截图) 五.代码托管连接 (https://gitee.com/zmman/zm/commit/ed9b4ee7905b7d87186d7d69b3015b0151c93a7d) (https://gitee.com/zmman/zm/commit/8d465b13a4d7e479139202c3652c1cfbc221539e) 六.实验总结 实验中遇到的问题及解决

2019春第3次课程设计实验安排

2019春第3次课程设计实验安排 一.实时钟表 二.实验功能描述: 由秒针的转动,带动分针的转动,以及再带着时针的转动.同时我们的钟表是可以与我们准确的时间相联系,也就是说这是一个比较准确的时间点,以及是非常简便的,当然秒针转一圈,分针动一下,以及分针转一圈,时针动一下,采用的是用角度来进行计算的,以及结束一圈的结束点以及起始点,都是采用的角度的结算. 三.项目介绍 1.绘制静态秒针 秒针的转动 根据实际时间转动 4.添加时针和分针 5.添加表盘刻度 四.实现界面展示 五.代码托管链接 http

2019年春第三次课程设计实验报告

··2019年春第三次课程设计实验报告 一.实验项目名称 反弹球小游戏多球反弹动画 二.实验项目功能描述 能利用数组储存多个小球的速度和坐标,再利用循环语句实现球与球之间的碰撞和球与墙壁之间的碰撞 三.项目模块结构介绍 利用主函数定义全局变量,在使用while语句进行循环,再用批量绘制函数和延时函数 四.实现界面展现 五.代码托管链接 https://gitee.com/zhangwei666666/c_language_game 六.实验总结 这周第一次使用vs软件用起来有点不适应,边百度边摸

2019春第4次课程设计实验安排

2019春第4次课程设计实验安排 一.双人游戏 二.实验功能描述: 双人分别控制左.右挡板来控制反弹球,从而计算的分数,来比得分多少得出胜负. 三.项目介绍 1.双人输入问题 2.异步输入函数 双人反弹球 四.实现界面展示 五.代码托管链接 https://gitee.com/luo3090306768/git-hub/tree/master 六.实验总结 问题:代码中出现的 #include <graphics.h>不能用dev c++ 编译出来 解决办法:查百度搞到源代码,与之相比较找到不

2019春季第四次课程设计实验报告

2019春季第四次课程设计实验报告 一.实验项目: Flappy bird 二.功能描述: 一个小鸟飞行越过障碍的游戏 三.项目模块结构介绍: 四.运行截图: 五.代码链接: https://gitee.com/xlf515/ydf/commit/04f5bcc16f07cf300b832226f14608c95eb1aab7 六.实验总结: 这次学习了把图片代入程序中,我的问题是vs与easy x都没有安装错误但就是运行时显示不了图片,代码的难度与前几章一样,就是多了代入图片音频的地址,总的来