나는 몬스터, 상금 또는 비어있는 무작위로 생성 된 방을 만드는 게임에 관한 프로젝트를 진행하고 있습니다. 그러나 프로그램을 실행할 때마다 방을 상품으로 설정하고 상품이주는 포인트에 대해 잘못된 숫자를 생성하기도합니다.
#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도 예상대로 작동하지 않습니다.
비교가 잘못되었습니다.
if (room[i].type = EMPTY) // assignment
if (room[i].type == EMPTY) // comparison
반쯤 괜찮은 컴파일러는 비교가 더 일반적인 할당을 발견하면 경고를 보내야합니다. 그러니 컴파일러 경고에주의를 기울이십시오 .
다시 : 컴파일러 경고를 켜고주의를 기울이십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다