C 프로그램의 난수 생성기가 올바른 난수를 생성하지 않습니다.

까치

나는 몬스터, 상금 또는 비어있는 무작위로 생성 된 방을 만드는 게임에 관한 프로젝트를 진행하고 있습니다. 그러나 프로그램을 실행할 때마다 방을 상품으로 설정하고 상품이주는 포인트에 대해 잘못된 숫자를 생성하기도합니다.

#include <stdio.h>
#include <stdlib.h>
#include "monsterbattle.h"
#include <time.h>

int main(int argc, char *argv[]) {

Character user;
int numRooms;

srand(time(NULL));

user.hitPoints = 50;
user.experiencePoints = 0;

printf("Welcome to Monster-Battle!\n");
printf("Enter the amount of rooms you would like to endure: ");
scanf("%d", &numRooms);

printf("You have decided to endure %d rooms, good luck!\n", numRooms);
printf("----------------\n");
printCharacter(user);

struct Room *roomArray = malloc(sizeof(struct Room) * numRooms);

fillRooms(roomArray, numRooms);

enterRoom(roomArray, user, numRooms);

free(roomArray);

return 0;

}

여기에 내 모든 기능을 호출하는 주요 기능이 있습니다.

#include <stdio.h>
#include <stdlib.h>
#include "monsterbattle.h"
#include <time.h>

void printCharacter(Character c) {

printf("Player Stats: (HP: %d XP: %d)\n", c.hitPoints, c.experiencePoints);

}

int getRandomNumber(int min, int max) {

return min + rand() % (max+1 - min);

}

void fillRooms(Room *rooms, int length) {

for (int i = 0; i < length; i++) {

int randomNum = getRandomNumber(0, 9);

if (randomNum == 0) {
rooms[i].type = EMPTY;
}

else if ((randomNum >= 1) && (randomNum <= 4)) {
rooms[i].type = PRIZE;
rooms[i].prize.points = getRandomNumber(5, 10);
}

else if ((randomNum >= 5) && (randomNum <= 9)) {
rooms[i].type = MONSTER;
rooms[i].monster.hitPoints = getRandomNumber(10, 30);

if (rooms[i].monster.hitPoints % 3 == 0) {
rooms[i].monster.experiencePoints = 1;
}
else if (rooms[i].monster.hitPoints % 3 != 0) {
rooms[i].monster.experiencePoints = 0;
}

}

}

}

void enterRoom(Room *room, Character player, int length) {

for (int i = 0; i < length; i++) {

printf("----------------\n");
printf("ROOM %d OF %d...\n", i+1, length);

if (room[i].type = EMPTY) {
printf("This room is empty.\n");
printCharacter(player);
}
if (room[i].type = EMPTY) {
printf("This room is empty.\n");
printCharacter(player);
}

else if (room[i].type = PRIZE) {
printf("This room has a prize. (PTS: %d)\n", room[i].prize.points);
player.hitPoints = player.hitPoints + room[i].prize.points;
printf("You gained %d hit points!\n", room[i].prize.points);
printCharacter(player);
}

else if (room[i].type = MONSTER) {
printf("This room has a monster. (HP: %d XP: %d)\n", room[i].monster.hitPoints, room[i].monster.experiencePoints);
player.hitPoints = player.hitPoints - room[i].monster.hitPoints;
player.experiencePoints = player.experiencePoints + room[i].monster.experiencePoints;
printf("You lost %d hit points!\n", room[i].monster.hitPoints);

if(room[i].monster.experiencePoints = 1) {
printf("You gained %d experience point!\n", room[i].monster.experiencePoints);
}

if(player.hitPoints <= 0) {
printf("Sorry, you died! Better luck next time...\n");
}

printCharacter(player);
}

}

if(player.hitPoints > 0) {
printf("----------------\n");
printf("Congratulations! You survived the game!\n");
}

}

여기에 모든 기능을 정의합니다. 어떤 도움을 주시면 감사하겠습니다!

int getRandomNumber(int min, int max) {

return min + rand() % (max+1 - min);

}

이것이 제가 문제가있는 기능입니다. 교수님이 srand ()에 대한 시드를 설정하도록 요구하고 있습니다.이 작업은 주 함수에서 수행합니다.하지만 생성 된 유일한 방은 PRIZE이며, 심지어 Prize.points도 예상대로 작동하지 않습니다.

pmg

비교가 잘못되었습니다.

if (room[i].type = EMPTY)  // assignment
if (room[i].type == EMPTY) // comparison

반쯤 괜찮은 컴파일러는 비교가 더 일반적인 할당을 발견하면 경고를 보내야합니다. 그러니 컴파일러 경고에주의를 기울이십시오 .

다시 : 컴파일러 경고를 켜고주의를 기울이십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ 난수 생성기가 무작위로 작동하지 않습니다.

분류에서Dev

자바 스크립트 : 난수 생성기는 난수를 생성하지 않습니다.

분류에서Dev

결과를 인쇄하지 않는 Python 난수 생성기 프로그램

분류에서Dev

난수를 파일로 생성하는 C ++ 프로그램을 만들고 싶습니다.

분류에서Dev

C의 난수 생성기가 다시 재생을 위해 입력을받지 않습니까?

분류에서Dev

C의 루프에서 다른 난수를 어떻게 생성합니까?

분류에서Dev

다른 자릿수로 난수 생성

분류에서Dev

세 가지 다른 난수 생성

분류에서Dev

다른 난수를 생성해야 함

분류에서Dev

다른 난수를 생성해야 함

분류에서Dev

프로그램은 50 개의 난수 (1에서 10 사이)를 생성하고 5보다 작고 5보다 큰 값의 양을 알려줍니다 (C #).

분류에서Dev

난수 생성기를 기반으로 GUI에 다른 이미지를 표시하기

분류에서Dev

rand ()는 난수 생성기가 시드되었을 때 실제로 난수를 생성합니까?

분류에서Dev

다른 입력 텍스트에서 난수를 생성하고 표시된 난수가 고유한지 확인

분류에서Dev

math.random ()은 난수를 생성하지 않습니다.

분류에서Dev

난수 생성을위한 C 프로그램

분류에서Dev

동일한 시드를 사용하여 코드의 다른 부분에서 C ++-11에서 난수 생성

분류에서Dev

3 개의 서로 다른 이미지에 난수 생성

분류에서Dev

난수 생성기-그만

분류에서Dev

난수는 범위를 벗어난 숫자를 생성합니다 (자바)

분류에서Dev

C 난수 생성기는 때때로 동일한 숫자를 생성합니다.

분류에서Dev

의사 난수 생성기

분류에서Dev

병렬 컴퓨팅 (MATLAB)의 난수 생성기, 모든 병렬 루프에서 다른 초기 난수?

분류에서Dev

가장 빠른 난수 생성기

분류에서Dev

openMP는 동일한 시드로 다른 난수를 생성합니다.

분류에서Dev

간단한 난수 생성기를 작성했는데 제가 작성한 함수의 분포를 어떻게 그래프로 표시 할 수 있습니까?

분류에서Dev

스레드로부터 안전하지 않은 난수 생성기를 사용하여 C의 pi monte carlo에 대한 OpenMP pragma 수정

분류에서Dev

C에서 반복하지 않고 난수 생성

분류에서Dev

C에서 반복되지 않는 난수 생성기

Related 관련 기사

  1. 1

    C ++ 난수 생성기가 무작위로 작동하지 않습니다.

  2. 2

    자바 스크립트 : 난수 생성기는 난수를 생성하지 않습니다.

  3. 3

    결과를 인쇄하지 않는 Python 난수 생성기 프로그램

  4. 4

    난수를 파일로 생성하는 C ++ 프로그램을 만들고 싶습니다.

  5. 5

    C의 난수 생성기가 다시 재생을 위해 입력을받지 않습니까?

  6. 6

    C의 루프에서 다른 난수를 어떻게 생성합니까?

  7. 7

    다른 자릿수로 난수 생성

  8. 8

    세 가지 다른 난수 생성

  9. 9

    다른 난수를 생성해야 함

  10. 10

    다른 난수를 생성해야 함

  11. 11

    프로그램은 50 개의 난수 (1에서 10 사이)를 생성하고 5보다 작고 5보다 큰 값의 양을 알려줍니다 (C #).

  12. 12

    난수 생성기를 기반으로 GUI에 다른 이미지를 표시하기

  13. 13

    rand ()는 난수 생성기가 시드되었을 때 실제로 난수를 생성합니까?

  14. 14

    다른 입력 텍스트에서 난수를 생성하고 표시된 난수가 고유한지 확인

  15. 15

    math.random ()은 난수를 생성하지 않습니다.

  16. 16

    난수 생성을위한 C 프로그램

  17. 17

    동일한 시드를 사용하여 코드의 다른 부분에서 C ++-11에서 난수 생성

  18. 18

    3 개의 서로 다른 이미지에 난수 생성

  19. 19

    난수 생성기-그만

  20. 20

    난수는 범위를 벗어난 숫자를 생성합니다 (자바)

  21. 21

    C 난수 생성기는 때때로 동일한 숫자를 생성합니다.

  22. 22

    의사 난수 생성기

  23. 23

    병렬 컴퓨팅 (MATLAB)의 난수 생성기, 모든 병렬 루프에서 다른 초기 난수?

  24. 24

    가장 빠른 난수 생성기

  25. 25

    openMP는 동일한 시드로 다른 난수를 생성합니다.

  26. 26

    간단한 난수 생성기를 작성했는데 제가 작성한 함수의 분포를 어떻게 그래프로 표시 할 수 있습니까?

  27. 27

    스레드로부터 안전하지 않은 난수 생성기를 사용하여 C의 pi monte carlo에 대한 OpenMP pragma 수정

  28. 28

    C에서 반복하지 않고 난수 생성

  29. 29

    C에서 반복되지 않는 난수 생성기

뜨겁다태그

보관