用C++和easyx实现简单的雷霆战机小游戏
之前在网上看了许多关于c++或者是其他语言实现雷霆战机的帖子,大多不完整,或者是要付费才能阅读,现将源码展示如下,仅作学习交流之用。
基本原理
基本思路
代码如下
注意:运行代码所需环境为c++11或更高,代码中所涉及的图片、背景音乐等素材均需自行搜集并修改代码中的文件路径。
代码如有任何问题请在评论区指正,谢谢!
觉得帮到您了的话,可以考虑一下打赏博主呦,您的支持是我创作的最大动力!!!
/*seeting.h*/
#pragma once
void set_textstyle(LOGFONT& f, int high, int wei); //设置输出文字形式
void load_be_bk(); //加载初始背景
void help(); //帮助界面
void decorete(int x); //初始界面装饰
void home(int i); //初始界面
bool exit(); //退出游戏
/*seeting.cpp*/
#include
#include
#include
#include
#include "setting.h"
IMAGE be_bk01, be_bk02;
static int i = 0; //装饰时计数
void set_textstyle(LOGFONT& f, int high, int wei)
{
gettextstyle(&f); // 获取当前字体设置
f.lfHeight = high; // 设置字体高度为 48
f.lfWeight = wei;
_tcscpy_s(f.lfFaceName, _T("宋体")); // 设置字体
f.lfQuality = ANTIALIASED_QUALITY; // 设置输出效果为抗锯齿
}
void decorate(int x) //装饰
{
if ((x/10) % 2 == 0)
{
setlinecolor(RGB(255, 250, 250));
line(202, 662, 71, 549); line(1157, 403, 1117, 259);
setlinecolor(RGB(0, 238, 0));
line(1004, 413, 1157, 403); line(1188, 504, 1020, 534); line(228, 388, 202, 131);
setlinecolor(RGB(255, 69, 0));
line(202, 131, 404, 261); line(471, 493, 228, 388); line(1020, 534, 1307, 563);
setlinecolor(RGB(0, 245, 255));
line(1303, 291, 1034, 332); line(66, 373, 437, 600);
setlinecolor(RGB(191, 62, 255));
line(1178, 666, 1287, 616); line(404, 261, 202, 131);
}
else
{
setlinecolor(RGB(255, 218, 185));
line(1501, 155, 23, 213); line(437, 600, 471, 493); line(1287, 616, 1034, 644);
setlinecolor(RGB(84, 255, 159));
line(348, 315, 103, 263); line(269, 606, 39, 697); line(1094, 462, 1004, 413);
setlinecolor(RGB(30, 144, 255));
line(71, 549, 269, 606); line(103, 263, 66, 373); line(1307, 563, 1303, 291);
setlinecolor(RGB(255, 255, 0));
line(1034, 640, 1188, 504); line(1034, 332, 985, 254); line(39, 697, 348, 315);
setlinecolor(RGB(255, 0, 255));
line(1117, 259, 942, 593); line(942, 593, 1178, 666); line(985, 254, 1292, 105);
}
setlinecolor(RGB(255, 255, 255));
}
void load_be_bk() //加载帮助界面背景
{
loadimage(&be_bk01, L"image\\be_bk01.jpg", 1360, 760);
putimage(0, 0, &be_bk01);
}
void help() //帮助界面
{
while (1)
{
BeginBatchDraw();
load_be_bk();
decorate(i);
roundrect(526, 126, 834, 634, 30, 30);
roundrect(528, 128, 832, 632, 30, 30);
roundrect(530, 130, 830, 630, 30, 30);
LOGFONT f;
set_textstyle(f, 30, 5);
settextstyle(&f); // 设置字体样式
outtextxy(595, 170, _T("游 戏 须 知"));
line(550, 220, 810, 220);
set_textstyle(f, 20, 3);
settextstyle(&f);
outtextxy(555, 240, _T("① 按下 w a s d 移动飞机。"));
outtextxy(555, 280, _T("② 按下 空格 发射子弹。"));
outtextxy(555, 320, _T("③ 游戏中按 ESC 暂停。"));
outtextxy(555, 360, _T("④ 每撞机一次,生命值减少20,"));
outtextxy(555, 400, _T(" 通过本关,生命值恢复。"));
set_textstyle(f, 15, 2);
settextstyle(&f);
outtextxy(625, 525, _T("按任意键返回"));
line(550, 550, 810, 550);
outtextxy(605, 570, _T("制作不易,请勿抄袭"));
outtextxy(605, 600, _T(" ——木笔制作"));
i++;
EndBatchDraw();
Sleep(10);
if (_kbhit())
{
_getch(); break;
}
}
}
void home(int i) //初始界面
{
BeginBatchDraw();
loadimage(&be_bk02, L"image\\be_bk02.jpg", 1360, 760);
putimage(0, 0, &be_bk02);
int m = 465, n = 515; //输出框上下边界
for (int t = 0; t < 4; t++)
{
for (int j = 0; j < 4; j++)
{
roundrect(1110 + j, m + j, 1300 - j, n - j, 30, 30);
}
m += 65;
n += 65;
}
switch (i)
{
case 1:
for (int j = 0; j < 30; j++)
{
setlinecolor(RGB(0+j*5, 255 - j * 4, 217 - j * 5));
line(1120, 475 + j, 1290, 475 + j);
}
break;
case 2:
for (int j = 0; j < 30; j++)
{
setlinecolor(RGB(0 + j * 5, 255 - j * 4, 217 - j * 5));
line(1120, 540 + j, 1290, 540 + j);
}
break;
case 3:
for (int