最近学习c语言,看了Mooc上童晶老师的课,用c和Easy x图形库写了一个简单的飞机大战,练练手,第一次写出完整的,虽然还有好多功能没有实现,但是也是有点成就感的,大家看看就好,不喜勿喷!!注:我是用vs2019写的,素材好像传不上,需要的私。
简单效果图如下:
#include#include #include #include #include #include #include #pragma comment(lib,"Winmm.lib") #define high 640//定义画布大小 #define width 480 IMAGE img_bk;//背景图片 IMAGE img_planeNormal_1, img_planeNormal_2;//飞机图片显示 IMAGE img_bullet_1, img_bullet_2;//飞机子弹 IMAGE img_enemyPlane_1, img_enemyPlane_2;//敌机 IMAGE img_planeBoom_1, img_planeBoom_2;//飞机相撞 int position_x, position_y;//飞机坐标 int bullet_x, bullet_y;//子弹坐标 int enemyPlane_x, enemyPlane_y;//敌机坐标 int planBoom_x, planBoom_y;//爆炸坐标 int isExplode = 0;//飞机是否爆炸 int score = 0; void startup()//数据初始化 { mciSendString(_T("open E:\游戏素材\飞机大战\game_music.mp3 alias bkmusic"), NULL, 0, NULL); mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL); initgraph(width, high); loadimage(&img_bk, "E:\游戏素材\飞机大战\background.jpg");//背景 loadimage(&img_planeNormal_1, "E:\游戏素材\飞机大战\planeNormal_1.jpg");//我方飞机 loadimage(&img_planeNormal_2, "E:\游戏素材\飞机大战\planeNormal_2.jpg"); loadimage(&img_bullet_1, "E:\游戏素材\飞机大战\bullet_1.jpg"); loadimage(&img_bullet_2, "E:\游戏素材\飞机大战\bullet_2.jpg");//子弹 loadimage(&img_enemyPlane_1, "E:\游戏素材\飞机大战\enemyPlane_1.jpg"); loadimage(&img_enemyPlane_2, "E:\游戏素材\飞机大战\enemyPlane_2.jpg");//敌机 loadimage(&img_planeBoom_1, "E:\游戏素材\飞机大战\planeBoom_1.jpg"); loadimage(&img_planeBoom_2, "E:\游戏素材\飞机大战\planeBoom_2.jpg");//碰撞 position_x = width * 0.4; position_y = high * 0.7; bullet_x = position_x+45; bullet_y = -85; enemyPlane_x = 0.5 * width; enemyPlane_y = 0; planBoom_x =-100; planBoom_y = -100; BeginBatchDraw(); } void show()//显示画面 { putimage(0, 0, &img_bk);//显示背景 if (isExplode == 0) { putimage(position_x, position_y, &img_planeNormal_1, NOTSRCERASE); putimage(position_x, position_y, &img_planeNormal_2, SRCINVERT);//显示飞机 putimage(bullet_x, bullet_y, &img_bullet_1, NOTSRCERASE); putimage(bullet_x, bullet_y, &img_bullet_2, SRCINVERT);//显示子弹 putimage(enemyPlane_x, enemyPlane_y, &img_enemyPlane_1, NOTSRCERASE); putimage(enemyPlane_x, enemyPlane_y, &img_enemyPlane_2, SRCINVERT);//显示敌机 } else { putimage(planBoom_x, planBoom_y, &img_planeBoom_1, NOTSRCERASE); putimage(planBoom_x, planBoom_y, &img_planeBoom_2, SRCINVERT); outtextxy(width * 0.48, high * 0.48, _T("小辣鸡,这都能死!")); } TCHAR s[] = _T("得分:"); outtextxy(width * 0.48, high*0.8 , s); char a[5]; sprintf(a,"%d", score); outtextxy(width * 0.55, high*0.8, a); Sleep(20); FlushBatchDraw(); } void updateWithoutInput()//与用户输入无关的更新 { if(bullet_y>-30)//子弹上升 bullet_y = bullet_y - 5; if (enemyPlane_y < high)//敌机下落 enemyPlane_y+=2; else { srand(time(NULL)); enemyPlane_x =rand() % width;//随机生成新敌机 enemyPlane_y = 0; } if (abs(enemyPlane_x - bullet_x) + abs(enemyPlane_y - bullet_y) < 70)//子弹击中敌机 { srand(time(NULL)); enemyPlane_x = rand() % width; enemyPlane_y = 0; score++; } if (abs(enemyPlane_x - position_x) + abs(enemyPlane_y - position_y) < 70)//敌机与我机碰撞 { mciSendString("close boo", NULL, 0, NULL); mciSendString("open E:\游戏素材\飞机大战\explode.mp3 alias boo", NULL, 0, NULL);//子弹爆炸音效 mciSendString("play boo ", NULL, 0, NULL); planBoom_x = position_x; planBoom_y = position_y; isExplode = 1; } } void updateWithInput()//与用户输入有关的更新 { 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) { mciSendString("close pi", NULL, 0, NULL); mciSendString("open E:\游戏素材\飞机大战\f_gun.mp3 alias pi", NULL, 0, NULL);//子弹发射音效 mciSendString("play pi ", NULL, 0, NULL); mciSendString("close ps", NULL, 0, NULL); mciSendString("open E:\游戏素材\飞机大战\5.mp3 alias ps", NULL, 0, NULL); mciSendString("play ps ", NULL, 0, NULL); bullet_x = position_x+45; bullet_y = position_y - 50; } } } int main() { startup();//数据初始化 while (1) { show();//显示画面 updateWithoutInput();//与用户输入无关的更新 updateWithInput();//与用户输入有关的更新 } EndBatchDraw(); return 0; }



