【发布时间】:2021-06-03 06:59:18
【问题描述】:
对不起,我是 C++ 新手,但我尝试按照 youtube 上的游戏教程进行操作,我认为逻辑有点错误,因为即使 srand 和 rand 函数,敌人的位置在运行时似乎也会创建一个模式被使用了,我认为使用了相同的随机数。
#include <iostream>
#include <curses.h>
#include <time.h>
using namespace std;
void gotoxy (int x, int y){
move (y, x);
}
bool exitGame;
bool isMoving;
int mycatX;
int mycatY;
int enemyX[4];
int enemyY[4] = {-9, -19, -29,-39};
int enemyPositionX[3] = {3, 18 ,32};
void startUp () {
mycatX = 18;
mycatY = 15;
srand(time(NULL));
for(int i = 0; i < 4; i++){
enemyX[i] = enemyPositionX[rand() % 3];
}
}
void layout () {
if (isMoving){
gotoxy (0, 0); printw ("## ##");
gotoxy (0, 1); printw ("## || || ##");
gotoxy (0, 2); printw ("## ##");
gotoxy (0, 3); printw ("## || || ##");
gotoxy (0, 4); printw ("## ##");
gotoxy (0, 5); printw ("## || || ##");
gotoxy (0, 6); printw ("## ##");
gotoxy (0, 7); printw ("## || || ##");
gotoxy (0, 8); printw ("## ##");
gotoxy (0, 9); printw ("## || || ##");
gotoxy (0, 10);printw ("## ##");
gotoxy (0, 11);printw ("## || || ##");
gotoxy (0, 12);printw ("## ##");
gotoxy (0, 13);printw ("## || || ##");
gotoxy (0, 14);printw ("## ##");
gotoxy (0, 15);printw ("## || || ##");
gotoxy (0, 16);printw ("## ##");
gotoxy (0, 17);printw ("## || || ##");
gotoxy (0, 18);printw ("## ##");
gotoxy (0, 19);printw ("## || || ##");
gotoxy (0, 20);printw ("## ##");
isMoving = false;
}else{
gotoxy (0, 0); printw ("## || || ##");
gotoxy (0, 1); printw ("## ##");
gotoxy (0, 2); printw ("## || || ##");
gotoxy (0, 3); printw ("## ##");
gotoxy (0, 4); printw ("## || || ##");
gotoxy (0, 5); printw ("## ##");
gotoxy (0, 6); printw ("## || || ##");
gotoxy (0, 7); printw ("## ##");
gotoxy (0, 8); printw ("## || || ##");
gotoxy (0, 9); printw ("## ##");
gotoxy (0, 10);printw ("## || || ##");
gotoxy (0, 11);printw ("## ##");
gotoxy (0, 12);printw ("## || || ##");
gotoxy (0, 13);printw ("## ##");
gotoxy (0, 14);printw ("## || || ##");
gotoxy (0, 15);printw ("## ##");
gotoxy (0, 16);printw ("## || || ##");
gotoxy (0, 17);printw ("## ##");
gotoxy (0, 18);printw ("## || || ##");
gotoxy (0, 19);printw ("## ##");
gotoxy (0, 20);printw ("## || || ##");
isMoving= true;
}
}
void mycat ()
{
gotoxy (mycatX, mycatY); printw (" ^^ ");
gotoxy (mycatX, mycatY +1); printw ("=( ^ ^)=");
gotoxy (mycatX, mycatY + 2); printw (" o o ");
gotoxy (mycatX, mycatY + 3); printw (" ( ) ");
gotoxy (mycatX, mycatY + 4); printw (" \\ ");
}
void enemymouse ()
{
for(int i = 0; i < 4; i++){
if(enemyY[i] >= 0){
gotoxy (enemyX[i], enemyY[i]); printw (" \\/ ");
}
if(enemyY[i]+1 >= 0){gotoxy (enemyX[i], enemyY[i] + 1); printw (" () ");}
if(enemyY[i]+2 >= 0){gotoxy (enemyX[i], enemyY[i] + 2); printw (" / \\");}
if(enemyY[i]+3 >= 0){gotoxy (enemyX[i], enemyY[i] + 3); printw ("((__))");}
if(enemyY[i]+4 >= 0){gotoxy (enemyX[i], enemyY[i] + 4); printw (" | ");}
if(enemyY[i] > 20){gotoxy (enemyX[i], enemyY[i]); printw (" ");}
if(enemyY[i]+1 > 20){gotoxy (enemyX[i], enemyY[i] + 1); printw (" ");}
if(enemyY[i]+2 > 20){gotoxy (enemyX[i], enemyY[i] + 2); printw (" ");}
if(enemyY[i]+3 > 20){gotoxy (enemyX[i], enemyY[i] + 3); printw (" ");}
if(enemyY[i]+4 > 20){gotoxy (enemyX[i], enemyY[i] + 4); printw (" ");}
if(enemyY[i] > 20) enemyY[i] = -10;
enemyY[i]++;
}
}
void controller (){
nodelay (stdscr, TRUE);
switch (getch ()) {
case 'a':
mycatX = mycatX - 13;
break;
case 'd':
mycatX = mycatX + 13;
break;
case 'w':
mycatY = mycatY - 2;
break;
case 's':
mycatY = mycatY + 2;
break;
}
}
int main (){
initscr ();
startUp ();
noecho ();
scrollok (stdscr, TRUE);
nodelay (stdscr, TRUE);
while (!exitGame){
layout ();
mycat ();
enemymouse ();
controller ();
napms(200);
curs_set(0);
}
return 0;
}
【问题讨论】:
-
Srand 播下了种子。您将种子设置为您的时间,然后使用 rand() 所以没有发生异常情况。
-
如果您使用任何现代同类的 C++ 并且没有使用
<random>来满足您的随机生成器需求,您需要调查一下。您会对可用的选项更加满意。 -
判断是否使用了相同的随机数的方法是编写一个(更简单的)程序,只调用几次
rand()并显示值。如果您看到该程序的模式,那么您已经确定了问题。