雷霆战机
直接开始吧
//1.定义数据
#define WIDTH 591
#define HEIGHT 864
IMAGE backimg; //定义背景数据
bool isplay; //定义音乐数据
//定义自己的飞机
struct Plane {
int x, y; //坐标
int w, h; //图片的宽度 和 高度
bool isExist; //是否存在
IMAGE img[2]; //图片
}myplane;
//子弹
IMAGE bimg[2];
struct Bullet {
int x, y;
bool isExist; //是否存在
}bullet[15]; //10个
IMAGE eimg[2];
unsigned long t1, t2;
struct Enemy {
int x, y;
bool isExist; //是否存在
int vy; //速度
}enemy[15]; //10个
//2.初始化
void GameInit() {
//加载图片
loadimage(&backimg, "images/background.jpg", WIDTH, HEIGHT);
//播放背景音乐
mciSendString("open images/backmusic.mp3",0,0,0);
mciSendString("play images/backmusic.mp3", 0, 0, 0);
isplay = true; //正在播放
//初始化自己的飞机
myplane.w = 94;
myplane.h = 107;
loadimage(&myplane.img[0], "images/plane0.jpg");
loadimage(&myplane.img[1], "images/plane1.jpg");
myplane.x = (WIDTH- myplane.w)/2;
myplane.y = HEIGHT - myplane.h;
myplane.isExist = true;
//初始化自己的子弹 9 21
loadimage(&bimg[0], "images/bullet0.jpg");
loadimage(&bimg[1], "images/bullet1.jpg");
for (int i = 0; i < 15; i++)
bullet[i].isExist = false;
loadimage(&eimg[0], "images/enemy0.jpg");
loadimage(&eimg[1], "images/enemy1.jpg");
for (int i = 0; i < 15; i++)
{
enemy[i].isExist = false;
if (rand() % 2 == 0)
enemy[i].vy = 1;
else
enemy[i].vy = 2;
}
t1 = GetTickCount();
}
//3.绘制
void GameDraw() {
BeginBatchDraw();
//绘制背景图片
putimage(0, 0, &backimg);
//绘制自己的飞机
if (myplane.isExist) { //如果自己的飞机是存在的
putimage(myplane.x, myplane.y, &myplane.img[0], SRCPAINT);
putimage(myplane.x, myplane.y, &myplane.img[1], SRCAND);
}
//绘制自己的子弹
for (int i = 0; i < 15; i++) {
if (bullet[i].isExist) { //存在的子弹
putimage(bullet[i].x, bullet[i].y, &bimg[0], SRCPAINT);
putimage(bullet[i].x, bullet[i].y, &bimg[1], SRCAND);
}
}
for (int i = 0; i < 15; i++) {
if (enemy[i].isExist) { //存在的子弹
putimage(enemy[i].x, enemy[i].y, &eimg[0], SRCPAINT);
putimage(enemy[i].x, enemy[i].y, &eimg[1], SRCAND);
}
}
EndBatchDraw();
}
//4.数据的更新
void GameUpdate() {
//非阻塞的 丝滑的
if (GetAsyncKeyState(VK_UP)) myplane.y--;
if (GetAsyncKeyState(VK_DOWN)) myplane.y++;
if (GetAsyncKeyState(VK_LEFT)) myplane.x--;
if (GetAsyncKeyState(VK_RIGHT)) myplane.x++;
//按下某一个键的时候
char key=' ';
if (_kbhit()) { //检测按键
key = _getch(); //接收按键
if (key == '1'){
if(isplay)
mciSendString("pause images/backmusic.mp3", 0, 0, 0);
else
mciSendString("play images/backmusic.mp3", 0, 0, 0);
isplay = !isplay;
}
else if (key == 32) //空格产生一个子弹
{
PlaySound("images/shoot.wav", NULL, SND_ASYNC | SND_FILENAME);
for (int i = 0; i < 15; i++) {
if (!bullet[i].isExist) //找到一个不存在的 100 50
{
bullet[i].x = myplane.x + (myplane.w - 9) / 2; //自己的飞机
bullet[i].y = myplane.y - 21;
bullet[i].isExist = true;
break;
}
}
}
}
//子弹自己移动
for (int i = 0; i < 15; i++) {
if (bullet[i].isExist)
{
bullet[i].y -= 2;
if (bullet[i].y < 0) //飞出去
bullet[i].isExist = false;
}
}
for (int i = 0; i < 15; i++) {
if (enemy[i].isExist)
{
enemy[i].y += enemy[i].vy;
if (enemy[i].y > HEIGHT) //飞出去
enemy[i].isExist = false;
}
}
t2 = GetTickCount();
if (t2 - t1 > 500)
{
//产生一个敌机
for (int i = 0; i < 15; i++)
if (!enemy[i].isExist) //找到一个不存在的 100 50
{
enemy[i].x = rand()%(HEIGHT-46); //自己的飞机
enemy[i].y = -33;
enemy[i].isExist = true;
break;
}
t1 = t2;
}
//子弹碰撞敌机 子弹消失 敌机消失
//数组 敌机
for (int i = 0; i < 15; i++) //遍历子弹
{
if (bullet[i].isExist) { //找到存在的子弹
for (int j = 0; j < 15; j++) //遍历敌机
{
if (enemy[j].isExist) {
if (bullet[i].x+9>=enemy[j].x&&
bullet[i].x<= enemy[j].x+46&&
bullet[i].y + 21 >= enemy[j].y&&
bullet[i].y <= enemy[j].y+33) //判断子弹和敌机有没有发生碰撞
{
bullet[i].isExist = false;
enemy[j].isExist = false;
}
}
}
}
}
}
int main(){
initgraph(WIDTH, HEIGHT);
GameInit(); //初始化数据
//游戏的过程
while (1){
GameDraw(); //不断绘制界面
GameUpdate(); //数据也是不断更新
Sleep(2);
}
return 0;
}
点击下方链接更快拿到学习资料以及项目源码
https://jq.qq.com/?_wv=1027&k=JLh5Pqgchttps://jq.qq.com/?_wv=1027&k=JLh5Pqgc