Archief - Probleem met programma gemaakt in Java met Netbeans 6.8

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Papam

Legacy Member
Hallo, ik heb een paar probleempjes met java, we maken een simpel spel ( een dragrace) en we willen auto's met een random snelheid doen rijden. Dus maak ik een programma die voorlopig simpele wagentjes tekent en ze een random snelheid geeft.
Het enigste probleem is nu dat ze ieder om beurt beginnen te rijden maar ik wil dat ze allemaal tegelijk vertrekken. Ik geef hier eens mijn programmaatje en ik hoop dat iemand kan helpen.


import javax.swing.*; // voor de klasse JFrame
import java.awt.*; // voor de klasse Color,Graphics
import java.util.*; // voor de klasse Date

class TestAuto extends JPanel {

private int positie1=0;
private int positie2=0;
private int positie3=0;
private int positie4=0;

public static void main(String[] args) {

JFrame venster = new JFrame("Dragrace");
venster.setSize(1500, 1300);
venster.setLocation(100, 100);
venster.setVisible(true);
venster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestAuto tekening = new TestAuto();

venster.setContentPane(tekening);

Random rg = new Random();
int intA;
int intB;
int intC;
int intD;

intA = rg.nextInt(100);
intB = rg.nextInt(100);
intC = rg.nextInt(100);
intD = rg.nextInt(100);


for(int pos1 =0; pos1 <30; pos1 ++){
tekening.pauze(intA); //
tekening.verplaatsFig1(pos1);
}
for(int pos2 =0; pos2 <30; pos2 ++){
tekening.pauze1(intB); //
tekening.verplaatsFig2(pos2);
}
for(int pos3 =0; pos3 <30; pos3 ++){
tekening.pauze2(intC);
tekening.verplaatsFig3(pos3);
}
for(int pos4 =0; pos4 <30; pos4 ++){
tekening.pauze3(intD);
tekening.verplaatsFig4(pos4);
}
}


protected void paintComponent(Graphics g) {
super.paintComponent(g);

// de straat tekenen
g.setColor(Color.BLACK);
g.drawLine(0, 210, 500, 210);
for (int streepStart=0; streepStart <500 ; streepStart +=50) {
g.drawLine(streepStart, 232 , streepStart + 25 , 232);
}
g.drawLine(0, 255, 500, 255);

// Auto1
int xL=positie1*15,yL=200, d=10;

g.setColor(Color.GREEN);
g.fillRect(xL+2*d, yL-2*d, d*4, 4*d);
g.fillRect(xL, yL, d*8, 2*d);
g.fillOval(xL+d,yL+d, 2*d, 2*d);
g.fillOval(xL+5*d,yL+d, 2*d, 2*d);

//Auto2
int xL1=positie2*15,yL1=400, d1=10;

g.setColor(Color.GREEN);
g.fillRect(xL1+2*d1, yL1-2*d1, d1*4, 4*d1);
g.fillRect(xL1, yL1, d1*8, 2*d1);
g.fillOval(xL1+d,yL1+d1, 2*d1, 2*d1);
g.fillOval(xL1+5*d,yL1+d1, 2*d1, 2*d1);

//Auto3
int xL2=positie3*15,yL2=600, d2=10;

g.setColor(Color.GREEN);
g.fillRect(xL2+2*d1, yL2-2*d2, d2*4, 4*d2);
g.fillRect(xL2, yL2, d2*8, 2*d2);
g.fillOval(xL2+d,yL2+d2, 2*d2, 2*d2);
g.fillOval(xL2+5*d,yL2+d2, 2*d2, 2*d2);

//Auto4
int xL3=positie4*15,yL3=800, d3=10;

g.setColor(Color.GREEN);
g.fillRect(xL3+2*d3, yL3-2*d3, d3*4, 4*d3);
g.fillRect(xL3, yL3, d3*8, 2*d3);
g.fillOval(xL3+d,yL3+d3, 2*d3, 2*d3);
g.fillOval(xL3+5*d,yL3+d3, 2*d3, 2*d3);

}
public void pauze(int mSec){
Date nuTijd=new Date ( );
Date startTijd=new Date ( );
while (nuTijd.getTime ( )<startTijd.getTime ( )+mSec) {
nuTijd= new Date ( );
}
}
public void pauze1(int mSec1){
Date nuTijd=new Date ( );
Date startTijd=new Date ( );
while (nuTijd.getTime ( )<startTijd.getTime ( )+mSec1) {
nuTijd= new Date ( );
}
}
public void pauze2(int mSec2){
Date nuTijd=new Date ( );
Date startTijd=new Date ( );
while (nuTijd.getTime ( )<startTijd.getTime ( )+mSec2) {
nuTijd= new Date ( );
}
}
public void pauze3(int mSec3){
Date nuTijd=new Date ( );
Date startTijd=new Date ( );
while (nuTijd.getTime ( )<startTijd.getTime ( )+mSec3) {
nuTijd= new Date ( );
}
}


public void verplaatsFig1(int nieuwePositie1){
positie1=nieuwePositie1;
repaint();
}
public void verplaatsFig2(int nieuwePositie2){
positie2=nieuwePositie2;
repaint();
}
public void verplaatsFig3(int nieuwePositie3){
positie3=nieuwePositie3;
repaint();
}
public void verplaatsFig4(int nieuwePositie4){
positie4=nieuwePositie4;
repaint();
}

}

NeverwinterX

Legacy Member
for(int pos1 =0; pos1 <30; pos1 ++){
tekening.pauze(intA); //
tekening.verplaatsFig1(pos1);
}
for(int pos2 =0; pos2 <30; pos2 ++){
tekening.pauze1(intB); //
tekening.verplaatsFig2(pos2);
}
for(int pos3 =0; pos3 <30; pos3 ++){
tekening.pauze2(intC);
tekening.verplaatsFig3(pos3);
}
for(int pos4 =0; pos4 <30; pos4 ++){
tekening.pauze3(intD);
tekening.verplaatsFig4(pos4);
}
}

Die code laat ze om beurten vertrekken.

Je kan het volgende doen:
Code:
bereken voor elke auto om de hoeveel tijdseenheden de auto een afstandseenheid verplaatst (noem dit periode)
while(tijd niet voorbij de limiet){
   for(elke auto){
      if(periode voorbij){
         verplaats auto een afstandseenheid
      }
   }
   herteken de gui
   wacht een tijdseenheid
}

Beter maar ook veel moeilijker is om multithreaded te werken:
Voor elke auto start je een thread die die auto verplaatst en vervolgens wacht.
Lesson: Concurrency (The Java&#8482; Tutorials > Essential Classes)
Edit: Of gebruik maken van Timer en TimerTask: http://java.sun.com/javase/6/docs/api/java/util/Timer.html

Cycloon

Legacy Member
Gebruik wel nooit de wachttijd van je thread als tijdsindicatie mocht je met threads gaan werken. Want die wachttijden zijn een minimum en geen vast gegeven.

Papam

Legacy Member
K bedankt, heb ondertussen het project wel al ingediend bedankt voor de hulp!

kaketoe

Legacy Member
of gebruik pastebin, dan hebben we er meteen de java syntax highlighting bij :)

froginvasion

Legacy Member
ookal heb je het al ingediend;
ik kan niet geloven dat je zoiets kreeg als opdracht op school.
Wat is het nut hiervan? de code lijkt mij gewoon procedureel, wat dus totaal tegen java in is. Het enige wat je hier in godsnaam van kunt leren is hoe je iets paint maar dat is het dan ook.

Foezjie

Legacy Member
froginvasion zei:
ookal heb je het al ingediend;
ik kan niet geloven dat je zoiets kreeg als opdracht op school.
Wat is het nut hiervan? de code lijkt mij gewoon procedureel, wat dus totaal tegen java in is. Het enige wat je hier in godsnaam van kunt leren is hoe je iets paint maar dat is het dan ook.

Ik heb ook java gevolgd daar vorig jaar en doe nu Informatica aan de Kulak.
Het niveau van lesgeven ligt nog hoger dan bij mij vorig jaar, daar werd ons vertelt dat als je iets wil painten dat je dit in een for lus 100 moet laten lopen omdat java het anders niet tekent..

Er wordt geen aandacht gegeven aan OO ofzo, het is eerder een snelle kennismaken waar ze in het tweede semester wat leren grafisch werken, omdat dat leuker is dan gewoon programmeren (voor de mensen die niet per se zo geinteresseerd zijn in programmeren).

Gurdt

Legacy Member
Wij kregen in het eerste jaar het vak "Imperatief programmeren in Java", dat wil zeggen dat je enkel procedureel werkt, dus niet objectgeoriënteerd. Nuttig om de taal te leren :)

YaMo

Legacy Member
Volgens mij is het toch makkelijker om het van in het begin goed te leren.
Voor niet-objectgeoriënteerd programmeren zijn er programmeertalen die niet objectgeoriënteerd zijn.

Gurdt

Legacy Member
Ik vind Java als eerste taal wel redelijk gepast :) ge hebt syntactisch alle basismogelijkheden die elke standaardprogrammeertaal heeft. Welke taal zou jij dan aanraden aan universiteiten om als eerste taal aan te leren?
Vergeet niet dat het erom ging om concepten als lussen en functies te leren.

Cycloon

Legacy Member
Die discussie is al tig keren gevoerd hier op het forum. Elke moderne programmeertaal voldoet om de basis in te leren.

dJeez

Legacy Member
Cycloon zei:
Die discussie is al tig keren gevoerd hier op het forum. Elke moderne programmeertaal voldoet om de basis in te leren.
Ja, uiteraard. Maar het is wel moeilijker om iemand zijn slechte gewoontes af te leren dan om direct goede gewoontes aan te leren...

Gurdt zei:
Welke taal zou jij dan aanraden aan universiteiten om als eerste taal aan te leren?
Vergeet niet dat het erom ging om concepten als lussen en functies te leren.
Als eerste taal? Pascal bijvoorbeeld. Als ik mij niet vergis was dat vroeger overigens zo.

Cycloon

Legacy Member
Ik zou uiteraard ook niemand aanraden om direct in Java te beginnen, maar voor wat simpele zaken aan te leren zoals correct gebruik van for/while lussen en wat basic zaken te programmeren kom je met elke taal even ver. Zelf zou ik iedereen C++ aanraden om met te starten. Je kan dan eerst heel makkelijk proceduraal beginnen programmeren en inlezen van input is veel makkelijker dan in bv java.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan