void new_game() { IMAGE img3; IMAGE img5; int j, k; loadimage(&img3, L"分数.jpg", 110, 50); putimage(360, 30, &img3); loadimage(&img5, L"test0.jpg", 100, 100); for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { putimage(x[j][k], y[j][k], &img5); } } Initialize_Map(); Score(); while (true) { ExMessage m;// 定义消息变量 int l = 0; m = getmessage(EM_MOUSE | EM_KEY); switch (m.message) { case WM_KEYDOWN: switch (m.vkcode) { case VK_UP:up(), l = 1; break; case VK_LEFT:left(), l = 1; break; case VK_DOWN:down(), l = 1; break; case VK_RIGHT:right(), l = 1; break; case VK_ESCAPE: exit(0); break; } case WM_LBUTTONDOWN: if (m.x > 360 && m.x < 470 && m.y>95 && m.y < 145) { new_game(); } } if (succeed()) { success_interface(); while (true) { ExMessage m; m = getmessage(EM_MOUSE | EM_KEY); switch (m.message) { case WM_LBUTTONDOWN: if (m.x > 360 && m.x < 470 && m.y>95 && m.y < 145) { carry_on(); } case WM_KEYDOWN: switch (m.vkcode) { case VK_ESCAPE: exit(0); break; } } } } if (l == 1 && on == 1) { on = 0; l = 0; mciSendString(L"open CHICK.mp3 alias abc", 0, 0, 0); mciSendString(L"play abc wait", 0, 0, 0); mciSendString(L"close abc", 0, 0, 0); Score(); new_number(); } if (failed()) { failed_interface(); while (true) { ExMessage m; m = getmessage(EM_MOUSE | EM_KEY); switch (m.message) { case WM_LBUTTONDOWN: if (m.x > 360 && m.x < 470 && m.y>95 && m.y < 145) { carry_on(); } case WM_KEYDOWN: switch (m.vkcode) { case VK_ESCAPE: exit(0); break; } } } } } }
时间: 2024-04-11 16:32:36 浏览: 232
这段代码是一个名为`new_game()`的函数,用于开始一个新的游戏。
函数首先加载两个图片文件,分别为"分数.jpg"和"test0.jpg"。然后使用嵌套的`for`循环将"test0.jpg"图片绘制到屏幕上的指定位置。
接下来,调用`Initialize_Map()`函数初始化游戏地图,并调用`Score()`函数显示分数。
然后进入一个无限循环,不断获取用户输入的消息,包括键盘按键和鼠标点击事件。
如果用户按下了方向键(上、下、左、右),则调用相应的移动函数(`up()`、`left()`、`down()`、`right()`)进行游戏地图的移动,并设置变量`l`为1。
如果用户点击了屏幕上的特定区域(位置在(360, 95)到(470, 145)之间),则调用`new_game()`函数开始新游戏。
如果游戏成功,即调用`succeed()`函数返回true,进入成功界面。在成功界面中,如果用户点击了特定区域,则调用`carry_on()`函数继续游戏。
如果用户按下了Esc键,程序退出。
如果变量`l`为1且变量`on`为1,表示成功移动了一步,并且需要更新分数、生成新数字,并播放音乐。之后将变量`on`设为0,重置变量`l`为0。
如果游戏失败,即调用`failed()`函数返回true,进入失败界面。在失败界面中,如果用户点击了特定区域,则调用`carry_on()`函数重新开始游戏。
最后,程序会一直循环等待用户的输入和操作。
相关问题
函数设计 要求:对创建的void init()函数画出流程图,贴出对应代码和注释,代码为:void init() { mciSendString("open BGM.mp3 alias bgm", 0, 0, 0);//打开背景音乐 mciSendString("play bgm repeat", 0, 0, 0);//循环播放 loadimage(&image.background, "background.png");//导入背景图片 loadimage(&image.player, "player.png", PLAYER_WIDTH, PLAYER_HEIGHT);//导入飞机的图片 loadimage(&image.playerY, "playerY.png", PLAYER_WIDTH, PLAYER_HEIGHT); player.x = WIN_WIDTH / 2 - PLAYER_WIDTH / 2;//飞机初始位置 player.y = WIN_HEIGHT - PLAYER_HEIGHT * 2; player.flag = true; player.hp = PLAYER_HP; player.Myunion.score = 0; loadimage(&image.bullet, "bullet.png"); //导入子弹的图片 loadimage(&image.bulletY, "bulletY.png"); for (int i = 0; i < BULLET_NUM; i++) { bullet[i].flag = false; } loadimage(&image.enemy1, "enemy1.png");//导入敌机的图片 loadimage(&image.enemy1Y, "enemy1Y.png"); loadimage(&image.enemy2, "enemy2.png"); loadimage(&image.enemy2Y, "enemy2Y.png"); loadimage(&image.enemy3, "enemy3.png", 100, 153); loadimage(&image.enemy3Y, "enemy3Y.png", 100, 153); for (int i = 0; i < ENEMY_NUM; i++) { //加载多架敌机 enemy[i].flag = false; } t1 = GetTickCount();//获取当前系统的运行时间 t3 = t1; }
该函数的作用是初始化游戏,包括打开背景音乐、导入游戏图片、设置飞机的初始位置和状态、以及加载多架敌机等。
以下是对应代码和注释:
```c++
void init() {
mciSendString("open BGM.mp3 alias bgm", 0, 0, 0); // 打开背景音乐
mciSendString("play bgm repeat", 0, 0, 0); // 循环播放
loadimage(&image.background, "background.png"); // 导入背景图片
loadimage(&image.player, "player.png", PLAYER_WIDTH, PLAYER_HEIGHT); // 导入飞机的图片
loadimage(&image.playerY, "playerY.png", PLAYER_WIDTH, PLAYER_HEIGHT);
player.x = WIN_WIDTH / 2 - PLAYER_WIDTH / 2; // 飞机初始位置
player.y = WIN_HEIGHT - PLAYER_HEIGHT * 2;
player.flag = true; // 飞机状态为存活
player.hp = PLAYER_HP; // 飞机初始生命值
player.Myunion.score = 0; // 飞机初始得分
loadimage(&image.bullet, "bullet.png"); // 导入子弹的图片
loadimage(&image.bulletY, "bulletY.png");
for (int i = 0; i < BULLET_NUM; i++) {
bullet[i].flag = false; // 初始化子弹状态为未发射
}
loadimage(&image.enemy1, "enemy1.png"); // 导入敌机的图片
loadimage(&image.enemy1Y, "enemy1Y.png");
loadimage(&image.enemy2, "enemy2.png");
loadimage(&image.enemy2Y, "enemy2Y.png");
loadimage(&image.enemy3, "enemy3.png", 100, 153);
loadimage(&image.enemy3Y, "enemy3Y.png", 100, 153);
for (int i = 0; i < ENEMY_NUM; i++) { // 加载多架敌机
enemy[i].flag = false; // 初始化敌机状态为未出现
}
t1 = GetTickCount(); // 获取当前系统的运行时间
t3 = t1;
}
```
流程图如下:
![init函数流程图](https://img-blog.csdn.net/20170718150807192?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFua2l0aGVpY2M=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
#include <graphics.h> using namespace std; void DF_attack_r(int x, int y) { initgraph(640, 480); // 初始化窗口大小 IMAGE img; loadimage(&img, "df_attack_r.jpg"); // 加载替身攻击图片 int width = img.getwidth(); // 获取替身攻击图片的宽度 int height = img.getheight(); // 获取替身攻击图片的高度 putimage(x, y - height + 1, &img); // 在相应位置打印替身攻击图片 getch(); closegraph(); // 关闭图形窗口 } int main() { DF_attack_r(10, 5); return 0; }中传入void DF_run_r()函数确定戴夫的位置
您可以在`DF_run_r`函数中计算戴夫的位置,然后将该位置作为参数传入`DF_attack_r`函数中。例如:
```
void DF_run_r(int x, int y) {
// 计算戴夫的位置
int dave_x = x + 50;
int dave_y = y + 100;
// 调用替身攻击函数
DF_attack_r(dave_x, dave_y);
}
int main() {
DF_run_r(10, 5);
return 0;
}
```
在上述代码中,我们首先在`DF_run_r`函数中计算出戴夫的位置,然后将该位置作为参数传入`DF_attack_r`函数中。在`DF_attack_r`函数中,我们使用传入的戴夫位置参数来确定替身攻击图片的位置,从而实现在戴夫位置打印替身攻击图片的效果。
阅读全文