एक सरलीकृत Tamagotchi / Giga पालतू बनाओ!


9

तमागोटची और गीगा पेट्स छोटे इलेक्ट्रॉनिक उपकरण थे जिन्होंने थोड़ा आभासी पालतू बनाया। इस पालतू जानवर के कई आँकड़े थे, जैसे स्वास्थ्य, भूख, आदि।
मैंने हाल ही में यह उदाहरण लिखा है:

import msvcrt,os,sys;d=m=100;h=s=t=p=0;f=10
while 1:
 os.system('cls'if os.name=='nt'else'clear');print("health:",d,"\nhunger:",h,"\nsleep:",s,"\nfood:",f,"\npotions:",p,"\nmoney:",m);t+=1
 if msvcrt.kbhit():
  k=ord(msvcrt.getch())
  if k==102 and h>8 and f:f-=1;h-=9
  if k==115:s=0
  if k==112 and p:p-=1;d+=9
  if k==98 and m>8:m-=9;p+=1
  if k==116 and m>8:m-=9;f+=1
 if t>99:
  t=0;h+=1;s+=1
  if s>80:s=0;h+=9
  if h>80:d-=1
  if d<1:sys.exit(0)
  if d>79:m+=1

यह 467 बाइट्स में एक नंगे हड्डियों वाला आभासी पालतू जानवर है! मैं तो सोचता था कि कोड गोल्फ पेशेवरों को कितना अच्छा कर सकता है, इसलिए अब, चुनौती।

चुनौती

एक प्रोग्राम बनाएं जो एक आभासी पालतू जानवर के 6 आंकड़ों को ट्रैक करता है, और समय के साथ और उपयोगकर्ता इनपुट के जवाब में उन्हें अपडेट करता है। आँकड़े हैं: स्वास्थ्य और धन (100 से शुरू), भोजन (10 से शुरू), और भूख, नींद और औषधि (0 से शुरू)।

कार्यक्रम को निम्नलिखित घटनाओं के जवाब में मूल्यों को अद्यतन करना चाहिए:

  • जबकि कार्यक्रम को कोई इनपुट नहीं मिल रहा है, उसे नियमित अंतराल पर अपडेट करना चाहिए (अपडेट के बीच का अंतराल आधे सेकंड से कम नहीं होना चाहिए और न ही एक सेकंड से अधिक समय तक)। प्रत्येक अद्यतन निम्न करता है:

    • भूख और नींद 1 की वृद्धि।
    • यदि भूख 80 या उससे अधिक है, तो स्वास्थ्य 1 से कम हो जाता है।
    • यदि नींद 80 या उससे अधिक है, तो यह 0 पर रीसेट हो जाता है, और भूख एक अतिरिक्त 9 से बढ़ जाती है।
    • यदि स्वास्थ्य 80 या अधिक है, तो धन 1 से बढ़ जाता है।
    • यदि स्वास्थ्य 0 है, तो प्रोग्राम से बाहर निकलता है।
  • कार्यक्रम को उपयोगकर्ता द्वारा निम्नलिखित कुंजीपटों पर तुरंत जवाब देना चाहिए (इसका मतलब है कि आपको एक भाषा सुविधा या पुस्तकालय का उपयोग करने की आवश्यकता होगी जो कुंजी दबाए जाने का पता लगा सकती है और मानक इनपुट से पढ़ने के बजाय तुरंत इसका जवाब दे सकती है), प्रदर्शन निम्नलिखित क्रियाएं:

    • f: यदि भूख 8 से अधिक है और भोजन नॉनवेज है, तो भोजन 1 से कम हो जाता है और भूख 9 से कम हो जाती है।
    • s: नींद 0 पर रीसेट है।
    • p: यदि गुणन शून्य से अधिक है, तो गुणन 1 से कम हो जाता है और स्वास्थ्य 9 से बढ़ जाता है।
    • b: यदि धन 8 से अधिक है, तो धन 9 से घटाया जाता है और औषधि 1 से बढ़ जाता है।
    • t: यदि धन 8 से अधिक है, तो धन 9 से कम हो जाता है, और खाद्य 1 से बढ़ जाता है।

जब भी आँकड़े के मान बदलते हैं, तो उन्हें प्रपत्र में स्क्रीन पर प्रदर्शित किया जाना चाहिए । जब भी उनमें से कोई भी परिवर्तन होता है, तो सभी छह आँकड़े प्रदर्शित होने चाहिए; और एक प्रदर्शन के भीतर आँकड़े या तो अल्पविराम या newlines द्वारा अलग किया जाना चाहिए।Stat: value

यह चुनौती सामान्य है नियम: जीत के ऊपर विनिर्देशन का अनुपालन करने वाला सबसे छोटा कार्यक्रम। (ध्यान दें कि हमेशा की तरह, यदि भाषा प्रतियोगिता से नई है, तो जमा को गैर-प्रतिस्पर्धा के रूप में चिह्नित किया जाना चाहिए।)


आप यह नहीं कहते कि शुरुआती आंकड़े क्या हैं
ब्लू

1
आउटपुट "पढ़ने में आसान" होना चाहिए अस्पष्ट है, और इसलिए यह "एक बार प्रति सेकंड ईश" है। आपको प्रतिक्रिया प्राप्त करने और मुख्य पोस्ट करने से पहले उन्हें सुधारने के लिए सैंडबॉक्स में चुनौतियां प्रस्तुत करनी चाहिए ...
21

1
यह अस्पष्ट कैसे है? मैं चाहता हूं कि अस्पष्ट और अधिक विवरण था, क्योंकि खुद अस्पष्ट है।
ender_scythe

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

1
@BlueEyedBeast (और अन्य करीबी मतदाता) मैं भी स्पष्ट नहीं हूं कि क्या अस्पष्ट है। मूल संस्करण में कुछ महत्वपूर्ण मुद्दे थे, लेकिन ऐसा लगता है कि जैसे संपादन तय हो गए हैं। बहुत कम से कम, यह Carcigenicate और मैं प्रस्तुतियाँ प्रदान करने के लिए पर्याप्त स्पष्ट था। जो कुछ आपको अस्पष्ट लगता है उसके बारे में कुछ विवरण साझा करें ताकि ender_scythe इसे सुधार सके।
रे

जवाबों:


6

सी, 424 406 386 357 बाइट्स

#define x(a,b,c)if(*#a==C){if(b>8){c-=9;}Z=0;}
L,M=100,H,S=-1,F=10,P,Z,C;t(){H++;S++;L-=H>79;if(S>79)S=0,H+=9;Z=1/L/2;alarm(1);}main(){nodelay(initscr(),L=M);signal(14,t);for(t(H=S);C=getch();Z=Z||printf("\rhealth: %d,hunger: %d,sleep: %d,food: %d,potions: %d,money: %d\n",L,H,S,F,P,M)){x(s,9,S=9;S)x(p,P+8,P--;L+=18;L)x(f,H,F--;H)x(b,M,P++;M)x(t,M,F++;M)}}

मैं समस्या की युक्ति में कच्चे इनपुट और अतुल्यकालिक अद्यतन की आवश्यकता की सराहना करता हूं। भले ही ncurses सेटअप और सिग्नल हैंडलर से कुछ ओवरहेड की आवश्यकता होती है, लेकिन कभी-कभार चुनौती देने के लिए अच्छा है कि (उम्मीद है) स्वचालित रूप से समर्पित गोल्फिंग भाषाओं में से एक नहीं होगी।

आपने यह निर्दिष्ट नहीं किया कि गेम को कैसे इंगित किया गया है, इसलिए यह एक पारंपरिक तामगोटची की मौत का रोना "फ्लोटिंग पॉइंट अपवाद (कोर डंप)" है।

Ungolfed

/* Playing a bit fast and loose with the prototyping rules by omitting these;
 * none of the functions I'm using from them *exactly* match the default
 * prototype of `int f();`
 */
//#include <curses.h>
//#include <stdio.h>
//#include <signal.h>
//#include <unistd.h>

#define x(a,b,c)if(*#a==C){if(b>8){c-=9;}Z=0;}
L,M=100,H,S=-1,F=10,P,Z,C;

t() {
    H++;
    S++;
    L-=H>79;
    if(S>79)S=0,H+=9;
    Z=1/L/2;//0 if L>0. otherwise the pet dies of a floating point error
    alarm(1);
}

main(){
    nodelay(initscr(),L=M);
    signal(14,t);
    for(t(H=S); C=getch(); Z=Z||printf("\rhealth: %d,hunger: %d,sleep: %d,food: %d,potions: %d,money: %d\n",L,H,S,F,P,M)){
        x(s,9,S=9;S)
        x(p,P+8,P--;L+=18;L)
        x(f,H,F--;H)
        x(b,M,P++;M)
        x(t,M,F++;M)
    }
}

2

PHP, 396 413 बाइट्स

(डांग, मेरी पहली कोड गोल्फ प्रविष्टि जिसे मुझे बाइट काउंट में एडिट करना था। नींद को दूर करने के लिए संपादित किया गया था), क्योंकि यह वास्तव में नियमों के अनुसार पालन नहीं कर रहा था।

गैर-अवरोधक STDIN के लिए एक यूनिक्स- ish OS की आवश्यकता है। विचित्र रूप से, स्विच / केस बनाम कैस्केडिंग का उपयोग करते हुए यदि / अन्यथा छोटे स्रोत कोड का उत्पादन किया जाता है, लेकिन बाद में संकुचित संस्करण लंबा था।

<?eval(gzinflate(base64_decode('bY5BT8MwDIXv/Ao0WWujtVJ7YmtITwiNAwhp3KutOE20pImWVGxa999J1IEAcbH87O892wlUqsEjtmnivD/d5rLd9qZPCHX+gFvdOPTNTpl2L/su3bw9PL1kBaEwMHAMLCsocFaGKhjo0BT0Q0iFaUnO4JmXGlPyPZI8TWHPeIe+nbIIGccJqsGTXbi4p4EKEEt4Qs6xH+rlfA6c5DnwEYacregFlcMvziUk/FLQnzN79drosiOIxV/X7kroeklAh9BxsQD7m/H/MXxi4iKoob5bxRuCTtpFHd8Jn8ab0S7iLOz0pO5LgkfpQ0wrzGyNW+VFBSJ7Nj2eKtDZozHvFfBsPfQdHioYso1CtBW47NV4aXpXgb2Z0csn')));

Ungolfed:

<?
shell_exec('stty -icanon');
stream_set_blocking(STDIN, 0);
$u = $s = $p =0;
$f = 10;
$h = $m = 100;
while(1) {
    $t=time();
    while(1)
        if (($k = fgetc(STDIN)) || time() > $t)
            break;
    if ($k == 'f'){
        if ($u > 8 && $f) --$f | $u -= 9;
    } elseif ($k == 's')
        $s = 0;
    elseif ($k == 'p') {
        if ($p) --$p | $h += 9;
    } elseif ($k == 'b') {
        if ($m > 8) $m -= 9 | ++$p;
    } elseif ($k == 't') {
        if ($m > 8) $m -= 9 | ++$f;
    } else {
        if (++$u > 79) --$h;
        if (++$s > 79) $s = 0 | $u += 9;
        if ($h > 79) ++$m;
        if ($h < 1) exit;
    }
    echo"Health:$h,Money:$m,Food:$f,Hunger:$u,Sleep:$s,Potions:$p\n";
}

यह "उपयोगकर्ता द्वारा निम्नलिखित कुंजी पर तुरंत प्रतिक्रिया नहीं करता है"। यह तब तक इंतजार करता है जब तक कि sleep(1)इनपुट प्रोसेसिंग से पहले कॉल वापस न आ जाए। यद्यपि यह अगले अद्यतन को करने से पहले किसी भी कतारबद्ध कमांड को संसाधित करता है, इसलिए यह ठीक हो सकता है।
रे

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

2

मैथेमेटिका, 374 बाइट्स

h=m=100;f=10;g=s=p=0;RunScheduledTask[g++;s++;If[g>79,h--];If[s>79,s=0;g+=9];If[h>79,m++];If[h<1,Quit[]]];Dynamic@Row[{EventHandler[InputField[],"KeyDown":>Switch[CurrentValue@"EventKey","f",If[g>8&&f>0,f--;g-=9],"s",s=0,"p",If[p>0,p--;h+=9],"b",If[m>8,m-=9;p++],"t",If[m>8,m-=9;f++]]],"
Health: ",h,"
Money: ",m,"
Food: ",f,"
Hunger: ",g,"
Sleep: ",s,"
Potions: ",p}]

लाइन ब्रेक महत्वपूर्ण हैं क्योंकि वे स्ट्रिंग में न्यूलाइन वर्ण हैं इसलिए मैं Rowइसके बजाय उपयोग कर सकता था Column। यदि आप एक गणितज्ञ नोटबुक में इसका मूल्यांकन करते हैं, तो आपको कुछ इस तरह से देखना चाहिए:

तमगाछि अनुकरण

आपको इनपुट फ़ील्ड में क्लिक करना होगा और Dynamicइनपुट फ़ील्ड को अपडेट करने से पहले जल्दी से (एक सेकंड से भी कम) अपना चरित्र लिखें । इस सिरदर्द को पूरी तरह से टाला जा सकता है अगर EventHandlerइसका एक तत्व होने के बजाय अपने स्वयं के सेल में था Row, लेकिन इसके लिए एक .nb फ़ाइल के रूप में प्रोग्राम को सहेजने की आवश्यकता होगी जो बाइट काउंट को बढ़ाएगा।


अच्छा काम! मैं एक संरचना का उपयोग करने जा रहा था CurrentValue[EvaluationNotebook[], NotebookEventActions] = {"KeyDown" :> Switch[CurrentValue@"EventKey", "f", If[g > 8 && f > 0, f--; g -= 9], "s", s = 0, "p", If[p > 0, p--; h += 9], "b", If[m > 8, m -= 9; p++], "t", If[m > 8, m -= 9; f++]]};... यह आपको इनपुट क्षेत्र में क्लिक करने की आवश्यकता से बचना चाहिए। , PassEventsDown -> Trueउस कोड के अंत में विकल्प जोड़ने से आप नोटबुक को संपादित करना जारी रख सकते हैं, लेकिन बाइट बचत के लिए बहुत अंत में हटाया जा सकता है :)
ग्रेग मार्टिन

धन्यवाद, यह वही कार्यक्षमता है जिसकी मुझे शुरुआत में तलाश थी! दुर्भाग्य से ऐसा लगता है कि यह वर्तमान में मेरे मुकाबले अधिक लंबा है।
ngenisis

2

सी # 6, 567 563 बाइट्स

using System;using System.Threading;class T{int L,M,F=10,H,S,P;static void Main(){T t=new T();}T(){M=L=100;var W=new Thread(new ThreadStart(Q));W.Start();while(1>0){var r=Console.Read();bool B=0>1,K=1>0;if(r=='f'&H>8&F>0){F--;H-=9;B=K;}if(r=='s'){S=0;B=K;}if(r=='p'&P>0){P--;L+=9;B=K;}if(r=='b'&M>8){M-=9;P++;B=K;}if(r=='t'&M>8){M-=9;F++;B=K;}if(B)p();}}void Q(){while(1>0){H++;S++;if(H>79)L--;if(S>79){S=0;H+=9;}if(L>79)M++;L*=L/L;p();Thread.Sleep(500);}}void p(){Console.Write($"\nhealth: {L}\nhunger: {H}\nsleep: {S}\nfood: {F}\nmoney: {M}\npotions: {P}\n");}}

Ungolfed:

using System;
using System.Threading;
class T
{
    int L,M,F=10,H,S,P;
    static void Main()
    {
        T t=new T();
    }
    T()
    {
        M=L=100;
        var W=new Thread(new ThreadStart(Q));
        W.Start();
        while(1>0)
        {
            var r=Console.Read();
            var B=0>1;
            if(r=='f'&H>8&F>0){F--;H-=9;B=1>0;}
            if(r=='s'){S=0;B=1>0;}
            if(r=='p'&P>0){P--;L+=9;B=1>0;}
            if(r=='b'&M>8){M-=9;P++;B=1>0;}
            if(r=='t'&M>8){M-=9;F++;B=1>0;}
            if(B)p();
        }
    }
    void Q()
    {
        while(1>0)
        {
            H++;S++;
            if(H>79)L--;
            if(S>79){S=0;H+=9;}
            if(L>79)M++;
            L*=L/L;
            p();
            Thread.Sleep(500);
        }
    }
    void p()
    {
        Console.Write($"\nhealth: {L}\nhunger: {H}\nsleep: {S}\nfood: {F}\nmoney: {M}\npotions: {P}\n");
    }
}

1

क्लोजर, 1224 702 बाइट्स

V2

किसी राज्य वस्तु के अंदर होने के बजाय सभी परमाणुओं को ढीला चर बना दिया। उस अकेले को बहुत सारे कोड से छुटकारा मिल गया। मैंने शॉर्टकट फ़ंक्शंस भी बनाए a!और आसान s!से जोड़ने और घटाना atoms(मूल रूप से अभिनय कर रहा है +=और -=, क्योंकि क्लॉजुर के पास वे ऑपरेटर नहीं हैं)।

मुझे एहसास हुआ कि मैं शायद atomएस के साथ दूर कर सकता हूं अगर मैं कुंजी इनपुट को एक में एकीकृत करने का प्रबंधन करता हूं loop। मुझे देखना पड़ेगा।

(ns bits.golf.pet.v2.petms)(def h(atom 100))(def j(atom 0))(def s(atom 0))(def f(atom 10))(def p(atom 0))(def m(atom 100))(defn a[sa n](swap! sa #(+ % n)))(defn v[sa n](swap! sa #(- % n)))(defn c[](a j 1)(a s 1)(if(>=@j 80)(v h 1))(if (>=@s 80)(do(reset! s 0)(a j 9)))(if(>= @h 80)(a m 1)))(defn l[k](case k\f(if(> @j 8)(do(v f 1)(v j 9)))\s(reset! s 0) \p(if(>@p 0)(do(v p 1)(a h 9)))\b(if(> @m 8)(do(v m 9)(a p 1)))\t(if(>@m 8)(do(v m 9)(a f 1)))nil))(defn b[](.start(Thread.^Runnable(fn[](while(>@h 0)(l(first (read-line))))))))(defn -main[](b)(while(>@h 0)(Thread/sleep 500)(c)(println(str"Health: "@h"\nHunger: " @j"\nSleep: "@s"\nFood: "@f"\nPotions: "@p"\nMoney:"@m"\n")))(println"You died!\n"))

Ungolfed:

(ns bits.golf.pet.v2.pet)

; 100 0 0 10 0 100
(def he (atom 100))
(def hu (atom 0))
(def sl (atom 0))
(def fo (atom 10))
(def po (atom 0))
(def mo (atom 100))

(defn a! [sa n]
  (swap! sa #(+ % n)))

(defn s! [sa n]
  (swap! sa #(- % n)))

(defn apply-rules []
    (a! hu 1)
    (a! sl 1)
    (if (>= @hu 80)
      (s! he 1))
    (if (>= @sl 80)
      (do
        (reset! sl 0)
        (a! hu 9)))
    (if (>= @he 80)
      (a! mo 1)))

(defn handle-keypress [k]
    (case k
      \f (if (> @hu 8)
           (do
             (s! fo 1)
             (s! hu 9)))
      \s (reset! sl 0)
      \p (if (> @po 0)
           (do
             (s! po 1)
             (a! he 9)))
      \b (if (> @mo 8)
           (do
             (s! mo 9)
             (a! po 1)))
      \t (if (> @mo 8)
           (do
             (s! mo  9)
             (a! fo 1)))
      nil))


(defn start-listener []
  (.start
    (Thread. ^Runnable
      (fn []
        (while (> @he 0)
            (handle-keypress (first (read-line))))))))

(defn -main []
  (start-listener)
  (while (> @he 0)
    (Thread/sleep 500)

    (apply-rules)

    (println (str
               "Health: " @he "\n"
               "Hunger: " @hu "\n"
               "Sleep: " @sl "\n"
               "Food: " @fo "\n"
               "Potions: " @po "\n"
               "Money:" @mo "\n")))

  (println "You died!\n"))

V1

हे भगवान। निश्चित रूप से यहां सुधार के लिए जगह है। इस तरह की समस्या साइड इफेक्ट्स के साथ करना सबसे आसान है, और क्लोजर कार्यात्मक है, इसलिए मैं atomकोड की मात्रा को कम करने के लिए एस का दुरुपयोग करने की कोशिश कर रहा हूं । दुर्भाग्य से, मैं एक योजना के साथ नहीं गया था, इसलिए यह अभी से बहुत जल्दबाजी में है। मैं पहले से ही हालांकि मैं हटना कुछ विचार मिल गया है।

यह एक पूर्ण कार्यक्रम है। इसे चलाकर चलाया जा सकता है -main

(ns bits.golf.pet)(defrecord S[he hu sl fo po mo])(def new-state(->S 100 0 0 10 0 100))(def state(atom new-state))(defn update![sa k f](swap! sa #(update % k f)))(defn apply-rules[s](let [s' (atom s)u! #(update! s' %1 %2)g #(get @s' %)](u! :hu inc)(u! :sl inc)(if(>=(g :hu)80)(u! :he dec))(if(>= (g :sl)80)(do(u! :sl (fn[_]0))(u! :hu #(+ % 9))))(if(>=(g :he)80)(u! :mo inc))@s'))(defn get-input [](let [raw (read-line)](first raw)))(defn handle-keypress[s k](let [s'(atom s)u! #(update! s' %1 %2)g #(get @s' %)](case k\f(if (> (g :hu)8)(do(u! :fo dec)(u! :hu #(- % 9))))\s(u! :sl (fn [_] 0))\p(if(> (g :po)0)(do(u! :po dec)(u! :he #(+ % 9))))\b(if(>(g :mo))(do(u! :mo #(- % 9))(u! :po inc)))\t(if(>(g :mo)8)(do(u! :mo #(- % 9))(u! :fo inc)))nil@s')))(defn start-listener[](.start(Thread.^Runnable(fn[](while true(let[k(get-input)](swap! state #(handle-keypress % k))))))))(defn -main[](start-listener)(let[g #(get @%1 %2)](while true(Thread/sleep 500)(swap! state #(apply-rules %))(println(str"Health: "(g state :he)"\nHunger: "(g state :hu)"\n""Sleep: " (g state :sl)"\nFood: "(g state :fo)"\nPotions: "(g state :po)"\n""Money:"(g state :mo)"\n"))(if(<=(g state :he)0)(do(println"You died!\n")(reset! state new-state))))))

Ungolfed:

(ns bits.golf.pet)

(defrecord State [he hu sl fo po mo])

(def new-state (->State 100 0 0 10 0 100))

(def state (atom new-state))

(defn update! [sa k f]
  (swap! sa #(update % k f)))

(defn apply-rules [s]
  (let [s' (atom s)
        u! #(update! s' %1 %2)
        g #(get @s' %)]
    (u! :hu inc)
    (u! :sl inc)
    (if (>= (g :hu) 80)
      (u! :he dec))
    (if (>= (g :sl) 80)
      (do
        (u! :sl (fn [_] 0))
        (u! :hu #(+ % 9))))
    (if (>= (g :he) 80)
      (u! :mo inc))
    @s'))

(defn get-input []
  (let [raw (read-line)]
    (first raw)))

(defn handle-keypress [s k]
  (let [s' (atom s)
        u! #(update! s' %1 %2)
        g #(get @s' %)]
    (case k
      \f (if (> (g :hu) 8)
           (do
             (u! :fo dec)
             (u! :hu #(- % 9))))
      \s (u! :sl (fn [_] 0))
      \p (if (> (g :po) 0)
           (do
             (u! :po dec)
             (u! :he #(+ % 9))))
      \b (if (> (g :mo))
           (do
             (u! :mo #(- % 9))
             (u! :po inc)))
      \t (if (> (g :mo) 8)
           (do
             (u! :mo #(- % 9))
             (u! :fo inc)))
      nil
      @s')))

(defn start-listener []
  (.start
    (Thread. ^Runnable
      (fn []
        (while true
          (let [k (get-input)]
            (swap! state #(handle-keypress % k))))))))

(defn -main []
  (start-listener)
  (let [g #(get @%1 %2)]
    (while true
      (Thread/sleep 500)

      (swap! state #(apply-rules %))

      (println (str
                 "Health: " (g state :he) "\n"
                 "Hunger: " (g state :hu) "\n"
                 "Sleep: " (g state :sl) "\n"
                 "Food: " (g state :fo) "\n"
                 "Potions: " (g state :po) "\n"
                 "Money:" (g state :mo) "\n"))

      (if (<= (g state :he) 0)
        (do
          (println "You died!\n\n\n\n\n")
          (reset! state new-state))))))

यह कोड की एक अच्छी राशि है।
ender_scythe

@ender_scythe हां। मैं कुछ जगहों पर अर्ध-शिष्ट कोडिंग प्रथाओं का पालन करने की कोशिश कर रहा था, जैसे बनाना applying-rulesऔर handle-keypressशुद्ध करना। मैं अभी एक "स्क्रू-इट" संस्करण लिख रहा हूं।
कैरिजनेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.