c++ - Srand() 和 rand() 仍然生成相同的随机数
问题描述
抱歉,我是 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;
}
解决方案
rand()
实际上并不生成真正的随机数,而是伪随机数。因此,如果您最终开始注意到一种模式,那还可以,因为实际上有一个规则可以选择“随机”数字。
有关更多信息,请参阅其他帖子,例如:
推荐阅读
- qt - pyautogui.screenshot() 在同一个屏幕上使用不同的像素
- reactjs - 同时运行两个 npm 命令
- javascript - 嗨,是否可以使用 javascript/angularjs 和 ionic1 将 Blob/Base64 转换为 fileURI 格式。
- html - 外部 div 不能有自己的高度
- sql - Postgres SQL如何使用group by并排除其中的order by子句
- python-3.x - CodeWars Python 3.6 代码优化:Integers: Recreation One
- java - 如何忽略 mybatis 生成器中的一些表?
- google-app-engine - 使用 Cloud Tasks 和 Cloud Datastore 使用 GAE 和 Python3 进行本地开发
- python-3.x - Python:试图理解这个函数是如何工作的以及它的目的是什么
- java - 存储库接口的 Spring Data MongoDb bean xml 配置