基于NetWork的类FNAF游戏DEMO框架

发布于:2025-05-31 ⋅ 阅读:(21) ⋅ 点赞:(0)

脑洞大开 想做个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。


网站公告

今日签到

点亮在社区的每一天
去签到