मैं गेम मेमोरी बना रहा हूं, जब आप दो कार्ड चुनते हैं और यदि वे मेल खाते हैं तो उन्हें रखने के लिए, अन्यथा आप उन्हें वापस कर देते हैं। यदि आप तब कार्ड याद करते हैं जिन्हें आपने पहले ही चुना है, तो आप अगले दो कार्डों पर बेहतर अनुमान लगा सकते हैं।मैं जावा जीयूआई में तत्काल अद्यतन कैसे शुरू करूं? (Thread.sleep() के साथ संघर्ष)
समस्या में मैंने repaint()
विधि को तुरंत पुनर्स्थापित नहीं किया है।
जब मैं दूसरा कार्ड फ्लिप करता हूं, कोई फर्क नहीं पड़ता, मैं यह दिखाना चाहता हूं कि दोनों कार्ड उन्हें छोड़कर या उन्हें वापस फिसलने से पहले दाएं तरफ फिसल जाए। मैं sleep()
पर कॉल करके ऐसा करता हूं।
बेशक अगर मैं repaint()
कार्ड को दाएं तरफ फ्लिप करने के लिए कार्ड, एक सेकंड प्रतीक्षा करें, और फिर repaint()
फिर से उनके मूल्यों के आधार पर, सहायक छोटे जावा केवल एक बार पेंट करेगा (मुझे सी याद आती है)।
असल में मैं sleep()
से पहले एक अद्यतन को लागू करना चाहता हूं। मैंने कुछ अन्य धागे पढ़े हैं जो मूल रूप से कहते हैं कि आपके तर्क और ग्राफिक्स को अलग रखने के लिए दो धागे बनाने का सबसे अच्छा तरीका है, और फिर आप sleep()
अपना तर्क दे सकते हैं और अपना जीयूआई अपडेट कर सकते हैं, लेकिन मैं पहले वर्ष सीएस के पहले सेमेस्टर में हूं हाई स्कूल में पाठ्यक्रम, और मैं इसे पाठ्यक्रम के स्तर पर रखना चाहता हूं (हालांकि मैंने गर्मी के वेब विकास और सी में कोडिंग के दौरान काफी समय बिताया)।
क्योंकि मुझे कोड पढ़ने के लिए स्टैक ओवरव्लो प्यार पर सहायक लोगों को पता है, यहां मैं उस कार्यक्रम का हिस्सा हूं जिसका मैं नीचे उल्लेख कर रहा हूं। कक्षा HitArea
कार्ड ऑब्जेक्ट है और cards[]
सरणी में HitArea
है। (मुझे HitArea
कक्षा का नाम बदलने के लिए नहीं मिला है)। activeCard1
और activeCard2
HitArea
उदाहरण हैं जिनका उपयोग मैं उपयोगकर्ता के दो चयनों का ट्रैक रखने के लिए करता हूं, और रिक्त कन्स्ट्रक्टर एक आरक्षित "अदृश्य" HitArea
है, हालांकि मैं इसे बाद में शून्य में बदल दूंगा। अंत में, cards.flip()
एक toggle
बूलियन को निष्क्रिय करता है जो यह निर्धारित करता है कि कार्ड सही है या नहीं।
public void respond(HitArea choice)
{
if(choice.inGame)
{
if(activeCard1.value == 0 && activeCard1.value == 0)
activeCard1 = choice;
else if((!(activeCard1.value == 0) && activeCard2.value == 0) && (activeCard1.id != choice.id))
{
activeCard2 = choice;
check();
}
}
}
public void check()
{
update();
pause(250);
if(activeCard2.value == activeCard1.value)
{
score += 2;
activeCard1.inGame = false;
activeCard2.inGame = false;
}
activeCard1.flip();
activeCard2.flip();
activeCard1 = new HitArea();
activeCard2 = new HitArea();
}
public void pause(int milliseconds)
{
try{
Thread.currentThread().sleep(milliseconds);
}
catch(InterruptedException e){
System.out.println("Exception: " + e);
}
}
public void mousePressed(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
for (int i = 0; i < cardNum; i++)
if(cards[i].boundsCheck(x, y))
{
repaint();
cards[i].flip();
respond(cards[i]);
}
}
मुझे कोई संदेह नहीं है कि मेरे कोड में कुछ समस्याएं हैं, इसलिए उन्हें इंगित करने के लिए स्वतंत्र महसूस करें। मुझे लगता है कि मेरी मूल संरचना ठीक है, और मैं इस परियोजना के लिए कई धागे नहीं बनाऊंगा (याद रखें, यह मूल है!)।
मैं "कभी" बोल्ड और इटैलिकिस करता हूं। :) – fireshadow52
मैं बस कुछ g.drawString (...) पाठ प्रदर्शित करता हूं, कोई छवि नहीं। क्या वही लागू होगा? –
धन्यवाद, और किया। :) –