void initFood2(int num)//食物编号 { food2.fxy2[num].x2 = rand() % 95*10+90*10; food2.fxy2[num].y2 = rand() % 60 * 10; for (int i = 0; i < snaker2.num2; i++) { if (food2.fxy2[num].x2 == snaker2.xy2[i].x2 && food2.fxy2[num].y2 == snaker2.xy2[i].y2) //判断食物是否在蛇身上 { food2.fxy2[num].x2 = rand() % 100 * 10 + 95 * 10; food2.fxy2[num].y2 = rand() % 65 * 10; } } }
时间: 2024-04-11 15:32:42 浏览: 152
这段代码与之前提到的初始化食物函数类似,但是针对的是另一个食物对象 food2。该函数接受一个参数 num,表示食物的编号。
在函数中,首先生成一个随机的 x2 坐标和 y2 坐标。x2 的范围是 900 到 1049,而 y2 的范围是 0 到 599。然后使用一个循环来检查生成的食物位置是否与蛇身上的任何一节位置重合,如果重合则重新生成一个食物位置。
循环遍历蛇身的每一节,判断食物的位置是否与蛇身的位置重合。如果重合,则重新生成一个随机位置。这样可以确保食物不会生成在蛇身上。
需要注意的是,这段代码中使用了 `rand()` 函数来生成随机数,需要包含 `<cstdlib>` 头文件。
这段代码用于初始化食物2的位置,以便在游戏开始时将食物2放置在地图上的随机位置。
相关问题
//吃食物 void eatFood() { for (int i = 0; i <= food.num - 1; i++) { if (snaker.xy[0].x == food.fxy[i].x && snaker.xy[0].y == food.fxy[i].y) { snaker.num += 1; snaker.xy.push_back(snaker.next);//新增的放大蛇尾 snaker.color.push_back(food.color[i]);//新增的颜色等于吃掉的食物的颜色 food.grade += 100;//吃掉一个食物得100分 initFood(i); if (food.num < 10 && food.grade % 500 == 0 && food.grade > 0) { food.num++; // 每得 500 分,增加一个食物,但食物总数不超过 10 个 initFood(food.num - 1); // 初始化新增加的食物 } } } }
这段代码用于处理蛇吃食物的逻辑。在函数中,通过一个循环遍历食物对象中的每个食物。对于每个食物,判断蛇头的位置是否与食物的位置重合,如果重合则表示蛇吃到了食物。
如果蛇吃到了食物,执行以下操作:
- 蛇的长度增加1,通过 `snaker.num += 1` 实现。
- 在蛇尾部新增一个节点,通过 `snaker.xy.push_back(snaker.next)` 实现,其中 `snaker.next` 表示下一个节点的位置。
- 新增的节点的颜色设置为被吃掉的食物的颜色,通过 `snaker.color.push_back(food.color[i])` 实现。
- 食物的得分增加100,通过 `food.grade += 100` 实现。
- 重新初始化被吃掉的食物,通过调用 `initFood(i)` 函数实现。
- 如果食物数量小于10,并且得分能够被500整除且大于0,增加一个新的食物,通过 `food.num++` 和 `initFood(food.num - 1)` 实现。
这段代码用于处理蛇吃食物的逻辑,并更新蛇的长度、颜色、得分以及食物的数量和位置。
函数设计 要求:对创建的void createEnemy()函数贴出对应代码和注释,代码为:void createEnemy() { t4 = GetTickCount();//获取当前系统的运行时间 if (t4 - t3 > 2000) { for (int i = 0; i < ENEMY_NUM; i++) { if (!enemy[i].flag)//若敌机未摧毁 { enemy[i].flag = true; int result = rand() % 10; if (result == 0) { enemy[i].Myunion.type = BIG; enemy[i].hp = BIG_HP;//大型敌机 enemy[i].x = rand() % (WIN_WIDTH - 100); enemy[i].y = -153; } else if (result == 1 || result == 2) { enemy[i].Myunion.type = MEDIUM; enemy[i].hp = MEDIUM_HP;//中型敌机 enemy[i].x = rand() % (WIN_WIDTH - 69); enemy[i].y = -99; } else { enemy[i].Myunion.type = SAMLL; enemy[i].hp = SMALL_HP;//小型敌机 enemy[i].x = rand() % (WIN_WIDTH - 57); enemy[i].y = -43; } break; } } t3 = t4; } }
这是一个创建敌机的函数,主要功能是在游戏画面中生成敌机。以下是对代码的注释:
```c++
void createEnemy() {
t4 = GetTickCount(); // 获取当前系统的运行时间
if (t4 - t3 > 2000) { // 如果时间超过2秒
for (int i = 0; i < ENEMY_NUM; i++) { // 循环ENEMY_NUM次,生成敌机
if (!enemy[i].flag) { // 若敌机未摧毁
enemy[i].flag = true; // 将敌机标记为已生成
int result = rand() % 10; // 生成随机数
if (result == 0) { // 若随机数为0,生成大型敌机
enemy[i].Myunion.type = BIG;
enemy[i].hp = BIG_HP;
enemy[i].x = rand() % (WIN_WIDTH - 100);
enemy[i].y = -153;
} else if (result == 1 || result == 2) { // 若随机数为1或2,生成中型敌机
enemy[i].Myunion.type = MEDIUM;
enemy[i].hp = MEDIUM_HP;
enemy[i].x = rand() % (WIN_WIDTH - 69);
enemy[i].y = -99;
} else { // 若随机数为其他,生成小型敌机
enemy[i].Myunion.type = SAMLL;
enemy[i].hp = SMALL_HP;
enemy[i].x = rand() % (WIN_WIDTH - 57);
enemy[i].y = -43;
}
break; // 跳出循环,生成一个敌机即可
}
}
t3 = t4; // 将上次生成敌机的时间更新为当前时间
}
}
```
阅读全文