मैं सी में सेव से सेव और लोड करने में सक्षम होने को कैसे कार्यान्वित करूं?


मेरे पास यह एकाधिकार क्लोन है जिसे मुझे सहेजने और सेव से लोड करने की क्षमता जोड़ने की आवश्यकता है लेकिन मुझे नहीं पता कि कहां से शुरू करना है इसलिए किसी भी मदद की सराहना की जाएगी!

GitHub – मितुल-जॉबी/मोनोपोली: आपके टर्मिनल में C में बोर्ड गेम मोनोपोली का कार्यान्वयन।[^]

मैंने क्या प्रयास किया है:

प्रत्येक पासा पलटने पर लॉगिंग होती है लेकिन खिलाड़ी के नाम भ्रष्ट हो जाते हैं

समाधान 1

यह बहुत हद तक इस बात पर निर्भर करता है कि मौजूदा कोड क्या करता है। सामान्य शब्दों में आप सहेजने के लिए किसी फ़ाइल में डेटा लिखेंगे, और पुनः लोड करने के लिए फ़ाइल से पढ़ेंगे। लेकिन सटीक कार्यान्वयन काफी हद तक मौजूदा कोड की संरचना पर निर्भर करेगा।

देखना स्ट्रीम I/O | माइक्रोसॉफ्ट लर्न[^].

समाधान 2

हम आपको इसका कोई विशिष्ट उत्तर नहीं दे सकते: हमें कोई अंदाज़ा नहीं है कि आपने क्या प्रयास किया है, या सॉफ़्टवेयर के बारे में कोई जानकारी नहीं है – और मैं यह जानने के लिए कि यह पहले कैसे काम करता है, पूरे जीथब प्रोजेक्ट का अध्ययन नहीं करने जा रहा हूँ। सुविधाएँ जोड़ने का प्रयास कर रहा हूँ।

यदि आप किसी मौजूदा प्रोजेक्ट में सुविधाएँ जोड़ना चाहते हैं, तो आपको पहले पूरे प्रोजेक्ट को काफी हद तक समझने की आवश्यकता है: केवल “लॉगिंग पासा रोल” से मदद नहीं मिलेगी क्योंकि यह आपको पुनर्स्थापित करने के लिए आवश्यक सभी जानकारी के करीब भी नहीं है। अब तक का खेल: जिस संपत्ति पर आप ज़मीन रखते हैं उसे खरीदना अनिवार्य नहीं है, संभावना और सामुदायिक चेस्ट कार्ड यादृच्छिक क्रम में हैं, इत्यादि।

तो जीथब प्रोजेक्ट पर जाएं और इसे ध्यान से जांचें: जब आप जानते हैं कि यह कैसे काम करता है, तो आप मॉड्स के बारे में सोचना शुरू कर सकते हैं लेकिन इससे पहले नहीं!

समाधान 3

आप भाग्यशाली हैं, मौजूदा कोड पहले से ही एक फ़ाइल से ‘स्थान’ लोड करता है (‘स्थान.सीएसवी‘ में ‘डेटा‘फ़ोल्डर). पर एक नजर डालें ReadLocations funciton और इसे अपने कार्यान्वयन के लिए संदर्भ के रूप में उपयोग करें (कहें) ReadPlayers एक।
फिर, अर्जित अनुभव के साथ, आप आसानी से पूरक लिख सकते हैं WritePlayers कोड भी.

समाधान 4

विंडोज़ के अंतर्गत प्रोग्राम का परीक्षण करते समय, यह विशेष रूप से कष्टप्रद होता है कि यदि कमांड विंडो सही आकार नहीं है तो प्रोग्राम समाप्त हो जाता है। इसे बदला जाना चाहिए ताकि प्रोग्राम को विकास परिवेश से डीबग करना आसान हो।
यहां विंडोज़ के लिए उन्नत संस्करण है, जो प्रोग्राम को बंद करने के बजाय विंडो को आकार में समायोजित करता है।

सी
#ifdef _WIN32
#include <windows.h>

void checkWindowSize(int screenWidth, int screenHeight)
{
     CONSOLE_SCREEN_BUFFER_INFO csbi;
     HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
     if (!GetConsoleScreenBufferInfo(hStdout, &csbi)) {
         printf("Error: GetConsoleScreenBufferInfo (%d)\n", GetLastError());
         exit(1);
     }

     SMALL_RECT srctWindow = csbi.srWindow;
     int width = srctWindow.Right - srctWindow.Left + 1;
     int height = srctWindow.Bottom - srctWindow.Top + 1;

     if (width < screenWidth || height < screenHeight) {
        if(width < screenWidth) 
             srctWindow.Right = screenWidth;
        if(height < screenHeight)
             srctWindow.Bottom = screenHeight;

        COORD wbuff = { screenWidth +1, screenHeight +1 };

        SetConsoleScreenBufferSize(hStdout, wbuff);
        SetConsoleWindowInfo( hStdout, TRUE, &srctWindow);

        // printf("\nTerminal size is too small. Please resize terminal.");
        // printf("\nSuggested size: %d X %d", screenWidth, screenHeight);
        // printf("\nCurrent size  : %d X %d", width, height);
        // printf("\n\n");
        // exit(1);
}

जैसा कि पहले ही कहा गया है, कोड में कई कमज़ोरियाँ हैं, जिनमें अप्रारंभीकृत वेरिएबल्स से लेकर स्टैक समस्याओं तक शामिल हैं। उदाहरण के लिए, ReadPlayers() फ़ंक्शन में, एक स्टैक ओवरफ़्लो होता है जिसे डिबगर रिपोर्ट करता है।
यहां, एक स्ट्रिंग को एक बाइट के साथ सरणी में पढ़ने के लिए स्कैनएफ और %s का उपयोग किया जाता है, जो अस्वस्थ दिखता है।

コメント

タイトルとURLをコピーしました