脑洞大开 想做个fnaf1并加入自己的设计..
开干!!!!
#include <stdio.h>
#include <iostream>
#include <random>
#include <ctime>
bool leftdoor = true, rightdoor = true, camddoor = true;
float power = 900,fanusepower = 0;
typedef struct movement {
struct movement** next;
int data, size;
} movement;
#define R1A -1
#define R1B -2
#define R1C -3
// Function to get the name of a movement node based on its data
const char* getNodeName(int data) {
switch (data) {
case R1A: return "cam1a";
case R1B: return "cam1b";
case R1C: return "cam1c";
case -4: return "camr";
case -5: return "camd";
case 5: return "cam5";
case 6: return "cam6";
case 7: return "cam7";
case 3: return "cam3";
case 21: return "cam2a";
case 22: return "cam2b";
case 41: return "cam4a";
case 42: return "cam4b";
default: return "unknown";
}
}
int main() {
// Initialize random number generator
std::mt19937 rng(std::time(0));
// Set up the movement graph
movement cam1a{}, cam1b{}, cam1c{};
movement cam5{}, camr{}, cam6{}, cam7{}, cam3{}, camd{};
movement cam2a{}, cam2b{}, cam4a{}, cam4b{};
cam1a.data = R1A;
cam1a.next = new movement * [1];
cam1a.next[0] = &cam1b;
cam1a.size = 1;
cam1b.data = R1B;
cam1b.next = new movement * [4];
cam1b.next[0] = &cam1a;
cam1b.next[1] = &cam1c;
cam1b.next[2] = &cam5;
cam1b.next[3] = &camr;
cam1b.size = 4;
cam1c.data = R1C;
cam1c.next = new movement * [4];
cam1c.next[0] = &cam1b;
cam1c.next[1] = &cam6;
cam1c.next[2] = &cam2a;
cam1c.next[3] = &cam4a;
cam1c.size = 4;
cam5.data = 5;
cam5.next = new movement * [1];
cam5.next[0] = &cam1b;
cam5.size = 1;
cam6.data = 6;
cam6.next = new movement * [1];
cam6.next[0] = &cam1c;
cam6.size = 1;
camr.data = -4;
camr.next = new movement * [2];
camr.next[0] = &cam1b;
camr.next[1] = &cam7;
camr.size = 2;
cam7.data = 7;
cam7.next = new movement * [3];
cam7.next[0] = &camr;
cam7.next[1] = &cam4a;
cam7.next[2] = &camd;
cam7.size = 3;
cam3.data = 3;
cam3.next = new movement * [1];
cam3.next[0] = &cam2a;
cam3.size = 1;
camd.data = -5;
camd.next = new movement * [1];
camd.next[0] = &cam7;
camd.size = 1;
cam2a.data = 21;
cam2a.next = new movement * [3];
cam2a.next[0] = &cam1c;
cam2a.next[1] = &cam2b;
cam2a.next[2] = &cam3;
cam2a.size = 3; // Fixed: was 2 but has 3 elements
cam2b.data = 22;
cam2b.next = new movement * [1];
cam2b.next[0] = &cam2a;
cam2b.size = 1;
cam4a.data = 41;
cam4a.next = new movement * [3];
cam4a.next[0] = &cam1c;
cam4a.next[1] = &cam7;
cam4a.next[2] = &cam4b;
cam4a.size = 3;
cam4b.data = 42;
cam4b.next = new movement * [1];
cam4b.next[0] = &cam4a;
cam4b.size = 1;
// Start at cam1a
movement* current = &cam1a;
movement* previous = nullptr;
std::cout << "Starting at: " << getNodeName(current->data) << "\n";
// Perform 30 random steps
unsigned int tempx = 3;
bool lock = false;
for (int i = 1; i <= 230; i++) {
// Generate random index for next movement, avoiding immediate backtrack if possible
int nextIndex;
int attempts = 0;
const int max_attempts = 10; // Limit attempts to avoid infinite loops
if (camddoor == true) {
camd.next[0] = &camd;
cam7.size = 2;
}else if (camddoor == false) {
camd.next[0] = &cam7;
cam7.size = 3;
}
if (current->data == 22) {
if (leftdoor == false) {
lock = true;
if (tempx == 0) {
printf("Jumpscare!\n");
printf("+0.5 coins,You've been caught by Bonnie.\n");
return 0;
}
tempx--;
}
if (leftdoor == true) {
printf("Bonnie gets stuck in the door\n");
printf("+2 coins,Perfect to close the door!\n");
lock = false;
tempx = 3;
}
}
do {
std::uniform_int_distribution<int> dist(0, current->size - 1);
nextIndex = dist(rng);
attempts++;
} while (attempts < max_attempts &&
current->next[nextIndex] == previous &&
current->size > 1); // Only avoid backtrack if we have alternatives
// Store previous node before moving
previous = current;
// Move to next node
if (!lock) { current = current->next[nextIndex]; }
// Report position
std::cout << "Step " << i << ": " << getNodeName(current->data) << "\n";
power -= fanusepower;
}
// Clean up allocated memory
delete[] cam1a.next;
delete[] cam1b.next;
delete[] cam1c.next;
delete[] cam5.next;
delete[] cam6.next;
delete[] camr.next;
delete[] cam7.next;
delete[] cam3.next;
delete[] camd.next;
delete[] cam2a.next;
delete[] cam2b.next;
delete[] cam4a.next;
delete[] cam4b.next;
return 0;
}
交互什么的没做,博主太废物fnaf1第二夜没过,所以搞成200电力hh..
11.4514天后改成html或EasyX或者GCC使用ege.h发布图形版的含交互的完整DEMO。