01. november 2000 - 15:24Der er
19 kommentarer og 1 løsning
Timer igen !!! Haster
Jeg har denne kode som burde virke men ikke gør det.
public static void givKort() {
if (Giver.getGiver() % 2 == 1) // Hvis player 1 gir { try{ for (int i = 0; i < 2; i ++) { CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); // player 2 får de to første kort (CardGame.ps2.getTopCard()).turnFaceUp(); Thread.sleep(2000); }
} catch (Exception e) {} try{ for (int j = 0; j < 2; j ++) { CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); // player 2 får de to første kort
Thread.sleep(2000); }
} catch (Exception e) {} try{ for (int i = 2; i < 4; i ++) { CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); // player 1 får de to sidste kort (CardGame.ps2.getTopCard()).turnFaceUp(); Thread.sleep(2000); }
{ CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); // player 2 får de to sidste kort
} } catch (Exception e) {} }
Grunden til at jeg ikke kan forstå at det ikke virker er at dette virker
public static void main( String a[] ){ try{ for( int i = 0; i<5; i++ ){ System.out.print(\".\"); Thread.sleep(2000); } System.out.println(\"\\nJeg kunne se fem prikker der kom langsomt frem paa skaermen\"); }
catch (Exception e) {} } }
Igår fik jeg hjælp af el_gnu til at lave denne funktion, jeg har dog ændret den lidt fordi jeg skal kalde denne metode fra en metode som ikke kan håndtere Exceptions. Derfor har jeg ændret throws Exceptions til try og catch.
Problemet er at når jeg vælger det menu punkt der skal udfører koden. Så udfører maskinen koden godt nok men der vises ikke noget på skærmen. Det vil sige den løber metoden givkort igennem uden at gøre noget og først tilsidst efter at have været alle linier igennem fordeles kortene.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
madshenrik => nu gi\'r du mig vist æren for lbhansen\'s svar :-)
Jeg vil stadig foreslå dig at bruge en Timer i stedet for Thread.sleep().
Her er din kode som det kan gøres med en timer:
class klasseMedGivKort implements ActionListener {
Timer t = new Timer(2000, this); int count = 0;
public static void givKort(int kort) { if (Giver.getGiver() % 2 == 1) // Hvis player 1 gir { switch (kort) { case 1: case 2: case 5: case 6: CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); (CardGame.ps2.getTopCard()).turnFaceUp(); break; case 8: t.stop(); kort = 0; case 3: case 4: case 7: CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); } } }
public void actionPerformed(ActionEvent e) { givKort(++count); } }
Jeg har nu fundet ud af det pånær variablen this som den påstår den ikke kender og ikke er blevet initialiseret jeg går/gik udfra at this skulle kalde selve klassen om og om igen. jeg ved ikke om jeg har misforstået dette eller hvad. Vil være taknemmelig hvis du lige ville forklare dens brug.
prøv at lave en seperat klasse som kan du kan få til at gøre det du vil. Denne klasse skal så bruges som argument til timeren.
Eks.
class myAction implements ActionListener { int count = 0; private klasseMedGivKort kmgk;
public void actionPerformed(ActionEvent e) { kmgk.givKort(++count); if (count >= 8) count = 0; }
public myAction(klasseMedGivKort kmgk) { this.kmgk = kmgk; } }
class klasseMedGivKort { myAction ma = new myAction(this); //OBS! jeg ved godt der står this, men prøv alligevel public void givKort() { //samme kode som tidligere } }
int count = 0; myAction ma = new myAction(this); public Timer t = new Timer(2000, ma);
public void givKort(int kort) {
if (Giver.getGiver() % 2 == 1) // Hvis player 1 gir { switch (kort) { case 1: case 2: case 5: case 6: CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); (CardGame.ps2.getTopCard()).turnFaceUp(); CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); (CardGame.ps2.getTopCard()).turnFaceUp(); break; case 8: t.stop(); kort = 0; case 3: case 4: case 7: CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); } } }
public void actionPerformed(ActionEvent e) { givKort(++count); } public void start() { t.start(); }
}
Men mit problem er så at jeg ikke kan kalde denne public void start fra en anden klasse da den ikke er static og gør jeg den static kan metoden ikke kalde t.start pga. static/nonstatic.
myAction ma = new myAction(this); public Timer t = new Timer(2000, ma);
public void givKort(int kort) { if (Giver.getGiver() % 2 == 1) // Hvis player 1 gir { switch (kort) { case 1: case 2: case 5: case 6: CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); (CardGame.ps2.getTopCard()).turnFaceUp(); CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); (CardGame.ps2.getTopCard()).turnFaceUp(); break; case 8: t.stop(); kort = 0; case 3: case 4: case 7: CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); } } } }
Problemet med static kan klares med at du laver et objekt udfra denne klasse, altså new GivKort()
Men jeg kan ikke se hvordan GivKort skal referere til CardGame og Giver.
Kan du ikke sende din foreløbige kode til min e-mail så jeg kan se det i sammenhæng?
public class GivKort { public static void givKort() {
for (int i = 0; i < 2; i ++) { CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); // player 1 får de to første kort (CardGame.ps1.getTopCard()).turnFaceUp(); }
for (int j = 0; j < 2; j ++) { CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); // player 2 får de to første kort
}
for (int i = 2; i < 4; i ++) { CardGame.ps1.insertAtTop(CardGame.p.removeTopCard()); // player 1 får de to sidste kort (CardGame.ps1.getTopCard()).turnFaceUp(); }
for (int j = 2; j < 4; j ++)
{ CardGame.ps2.insertAtTop(CardGame.p.removeTopCard()); // player 2 får de to sidste kort
}
}
} Og denne linie kalder vi så metoden med i klassen nytspil GivKort.givKort();
Det eneste der så var meningen var at man på skærmen kunne se at kortene blev givet to og to på samme måde som hvis man spiller casino i virkeligheden altså med et spil kort.
Nu virker det faktisk nu skal jeg bare gennemskue det. Mange tak for hjælpen el_gnu.
Mads
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.