[java]probleem met sleep (huiswerk)

Pagina: 1
Acties:

  • MagicTempest
  • Registratie: Maart 2001
  • Laatst online: 13:50
Jullie kennen allemaal wel dat spelletje dat je 21 lucifers hebt en dat je om de beurt 1,2 of 3 lucifers van het stapeltje moet pakken, degene die de laatste pakt heeft verloren. Dat moet ik namaken in java. Tot nu toe geen probleem, je kan 1,2 of 3 lucifers pakken en je kan ook niet in de - komen met de lucifers. Als tegenstander moet ik de computer hebben die dus via math.random () telkens een random aantal lucifers van de stapel af neemt. Elke keer als je zelf ingevoerd hebt hoeveel lucifers je wilt pakken gaat de computer direct door, dus als jij er 3 pakt en de computer 2 worden er in 1 keer 5 vanaf gehaald. Je kunt dus niet zien wie wat doet. Nu dacht ik dat op te kunnen lossen met sleep, nu wacht hij wel even, maar alsnog kan je niet zien wie wat pakt, er wordt dus nog steeds in 1x 5 lucifers vanaf gehaald.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package opdracht4;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

/**
 * <p>Title: opdracht 4f</p>
 * <p>Description: Je gaat een spel voor 2 personen maken. Op tafel ligt een
 * hoopje met 21 lucifers. Om beurten mogen de spelers 1, 2 of 3 lucifers
 * wegnemen. Wie de laatste lucifer pakt heeft verloren. De ene speler ben
 * je zelf en de andere is je programma dat met Math.random() het aantal
 * lucifers bepaalt om weg te nemen. Laat de lucifers die nog over zijn
 * telkens op het scherm zien. Aan het eind meldt het programma wie de
 * winnaar is. </p>
 * <p>Company: team 1 the Magic Circle </p>
 * @author Michael van Kley I102
 * @version 1.0
 */

public class opdracht4f extends Applet
{
  Button ok;
  TextField tekstvakje;
  int paaltjes = 21, stokjes, compu;
  double t;
  public void init ()
  {
    setLayout ( null );

    ok = new Button ("ok");
    ok.addActionListener ( new OkHandler() );
    ok.setBounds ( 200, 10, 20, 20 );

    tekstvakje = new TextField (10);
    tekstvakje.setBounds ( 100, 10, 40, 20 );

    add ( ok );
    add ( tekstvakje );
  }

  public void paint ( Graphics g )
  {
    g.drawString ( "" + paaltjes, 100, 100);
  }

  class OkHandler implements ActionListener
  {
    public void actionPerformed ( ActionEvent e )
    {
      String invoer = tekstvakje.getText ();
      int stokjes = Integer.parseInt ( invoer );

      if ( paaltjes >= 3 )
      {
        if(stokjes >=1)
        {
          if(stokjes <=3)
          {
            paaltjes -= stokjes;
            repaint ();
            try { Thread.sleep(500); }
            catch(InterruptedException f) {}
          }
        }
      }
      else
      {
        if ( paaltjes == 2 )
        {
          if(stokjes >=1)
          {
            if(stokjes <=2)
            {
              paaltjes -= stokjes;
              repaint ();
              try { Thread.sleep(500); }
              catch(InterruptedException f) {}
            }
          }
        }

        else
        {
          if ( paaltjes == 1 )
          {
            if(stokjes ==1)
            {
              paaltjes -= stokjes;
              repaint ();
              try { Thread.sleep(500); }
              catch(InterruptedException f) {}
            }
          }
        }
      }


      if ( paaltjes >= 3 )
      {
        compu = (int) ( 3* Math.random () + 1 );
        paaltjes -= compu;
        repaint ();
      }
      else
      {
        if ( paaltjes == 2 )
        {
          compu = (int) ( 2* Math.random () + 1 );
          paaltjes -= compu;
          repaint ();
        }
        else
        {
          if ( paaltjes == 1 )
          {
            paaltjes -= 1;
            repaint ();
          }
        }
      }
    }
  }
}


Dit is dus mijn code, nu zullen jullie allemaal zeggen dat het op zoveel manieren korter kan, maar ik heb nog maar 4 weken les in java. Kunnen jullie mij misschien helpen hiermee?

Life is like spaghetti. It's hard until you make it. - Tommy Cash -


  • FoggyFreek
  • Registratie: Juni 2000
  • Laatst online: 23-07 17:23

FoggyFreek

I'm a llama again!

Sorry, geen huiswerk vragen :|

-- Altijd blijven prutsen --


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • MagicTempest
  • Registratie: Maart 2001
  • Laatst online: 13:50
mijn vraag voldoet toch aan die eisen, of moet ik er het 1 en ander aan veranderen?

Life is like spaghetti. It's hard until you make it. - Tommy Cash -


  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 16:39
Deze code is zo wel erg onleesbaar hoor. Post is alleen het stukje waar het mis gaat ofzo. Echt OOM is het al helemaal niet.

Je moet de thread.sleep(); wel gebruiken voordat je de computer iets laat doen nu w8 hij als jij iets gedaan hebt tot ie klaar is en vervolgens doet de compu ook meteen wat.

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 16:39
Je kan ook proberen met een hele lange for lus kijken of dat wel werkt. for(int i = 0; i < 1000; i++) {
1+1;
}

  • MagicTempest
  • Registratie: Maart 2001
  • Laatst online: 13:50
als ik een lus gebruik gaat hij meteen helemaal door totdat alle lucifers op zijn.

Life is like spaghetti. It's hard until you make it. - Tommy Cash -


  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 16:39
Je moet wel ff zelf bedenken waar je de lus inzet he :P dr mag geen code instaan die je nu al hebt.

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Je probleem heeft te maken met de event thread. Als er een event of iets dergelijkt gebeurt wordt de method (in dit geval actionPerformed) aangeroepen vanuit de event thread. Diezelfde thread is echter verantwoordelijk voor het tekenen van al je AWT componenten. Als jij een repaint() geeft gaat repaint() niet gelijk het hele scherm hertekenen. repaint zorgt er alleen voor de event thread dat gaat doen. Jij geeft echter een repaint *vanuit* de event thread en laat de event thread vervolgens een halve seconde wachten. Omdat die daar mee bezig is kan ie niet het scherm hertekenen.

[ Voor 0% gewijzigd door TheOneLLama op 29-09-2002 15:09 . Reden: Het klinkt nog steeds nergens naar maar iets beter ]

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Eskimootje schreef op 29 september 2002 @ 01:52:
Je kan ook proberen met een hele lange for lus kijken of dat wel werkt. for(int i = 0; i < 1000; i++) {
1+1;
}
Ik wou deze graag nomineren voor de top 10 van stomste replies ooit in /14 :P

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

TheOneLLama schreef op 29 september 2002 @ 15:11:
[...]


Ik wou deze graag nomineren voor de top 10 van stomste replies ooit in /14 :P
Hij had het inderdaad kunnen optimaliseren.
code:
1
2
3
for(int k=0;k<1000;k++){
    2;
}


aaaaarrgghhh... krijg ik ook weer extra lege regels ertussen.

  • MagicTempest
  • Registratie: Maart 2001
  • Laatst online: 13:50
tnx mensen, ik ga nu het 1 en ander proberen, als het dan nog niet lukt ga ik morgen wel naar me leraar toe, die moet het me uit kunnen leggen.

Life is like spaghetti. It's hard until you make it. - Tommy Cash -


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Waarom print je niet gewoon de tekst: "de computer pakte er X" ergens in een Label?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het probleem aan jouw probleem is dat je gui gaat mixen met logica en daardoor het overzicht gaat verliezen. Ik zou het zelf opzetten mbv MVC. Je gaat dan classes maken waarin de logica van jouw spel zit. Dus Speler, Bord, Steen en methodes getName(), makeMove(...) computerMove()

En dan ga je je gui up to date houden mbv Events. Op deze manier krijg je een veel beter inzicht wat er gebeurd en verder kan je probleem voor probleem alles oplossen ipv deze wanorde van functionaliteit.

Ik vind het beleid van jullie school daarom dus ook niet goed. Jullie moeten helemaal niet bezig gaan met gui. Gui is gewoon vrij complex en je krijgt daardoor geen goeie basis omdat je dus ook problemen moet oplossen die op dit moment nog helemaal buiten jullie kunnen vallen.

  • Sick Nick
  • Registratie: Februari 2001
  • Laatst online: 30-08 12:27

Sick Nick

Drop the top!

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class Nimb
{
  private int numberOfMatches;
  private int player;

  /**
   * Constructor for objects of class Nimb
  */
  public Nimb(int matches)
  {
    numberOfMatches = 0;
    if (matches > 0) {
      numberOfMatches = matches;
    }
    player = 1;
    System.out.println(numberOfMatches + " on the table");
  }

  /**
   * take some matches off the stack
   */
  public void grab(int matches)
  {
    if (numberOfMatches == 0) {
      System.out.println("Game over");
    }
    else if (matches != 1 && matches != 2 && matches != 3) {
      System.out.println("You can only take 1,2, or 3 matches");
    }
    else if (numberOfMatches - matches < 0) {
      System.out.println("You can only take up to " + numberOfMatches + " matches");
    }
    else {
      numberOfMatches = numberOfMatches - matches;
      if (numberOfMatches == 0) {
        System.out.println("Game over: player " + player + " lost");
      }
      if (player == 1) {
        player = 2;
      }
      else {
        player = 1;
      } 
    }
    System.out.println(numberOfMatches + " matches remaining");
  }
}

Zo heb ik m moeten maken voor mijn opleiding, Informatica & Economie. We werken volgens het boek 'Object first with java, a practical introduction using BlueJ'
Bij deze speel je niet tegen de computer maar met 2 spelers, misschien dat je hier wat mee kan in ieder geval?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Nog even een leukigheidje. Laat de computer als laatse beginnen, dan wint ie altijd.

Stel je hebt 21 lucifers en persoon X pakt er n ( n =1, n=2, n=3 ) af. Persoon Y pakt er dan 4-n vanaf. Zo worden er elke beurt 4 matches van de stapel afgehaald, waardoor na 5 beurten er 20 vanaf zijn. Persoon X is dan weer aan de beurt en moet de laatste pakken :)

  • MagicTempest
  • Registratie: Maart 2001
  • Laatst online: 13:50
dat is niet altijd zo volgens mij hoor, want bij mij is het al ingesteld dat de computer als 2e begint, maar toch win ik het wel.

btw, me leraar wist het ook niet, of tenminste hij zei dat hij het wel wist, maar dat dat nog te moeilijk voor me zou zijn.

Life is like spaghetti. It's hard until you make it. - Tommy Cash -


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
Probeer het eens op die manier zou ik zeggen MagicTempest..

  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

MagicTempest schreef op 30 september 2002 @ 22:40:

btw, me leraar wist het ook niet, of tenminste hij zei dat hij het wel wist, maar dat dat nog te moeilijk voor me zou zijn.
Wat een onzin, dat is wel de meest irritante leraar ooit. Als niemand je het ooit uitlegt hoe kan je dan wat leren?

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 17-08 22:44
Eskimootje schreef op 29 september 2002 @ 01:52:
Je kan ook proberen met een hele lange for lus kijken of dat wel werkt. for(int i = 0; i < 1000; i++) {
1+1;
}
Gadverdamme!! :P

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
The - DDD: Gadverdamme!! :P
Doet me denken aan die hele oude DOS spelletjes die niet meer werken omdat ze hun snelheid op deze manier regelen ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 17-08 22:44
En er wordt 1 ding vergeten in dit hele verhaal...

De threading in een Applet. Probeer is de sleep voor de repaint van de computer actie(s) te zetten. Ipv. voor die van de speler. Als ik het zo even snel bekijk moet dat je (niet zo mooie oplossing) werkend maken.

Je bouwsels worden vanzelf mooier en duidelijker, met oefening.
Pagina: 1