Toon posts:

[Java] Bezette coördinaten herkennen

Pagina: 1
Acties:
  • 183 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Voor het vak Embedded Applications moet ik een programma schrijven, maar ik blijf op 1 ding hangen.
In het JAVA programma waar het om gaat wil ik dat er wordt gekeken of er op een bepaalde positie (waarbij er moet worden gekeken naar pos_y en pos_x) een object staat: in dit geval een bal. Wanneer deze er niet meer staat zijn ze op en die herkenning wil ik erin hebben. Iets als

if (int pos_x, int pos_y .........) {..}

wie kan mij een zetje in de goede richting geven?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Dit is wel heel erg kort door de bocht. Hoe is aangegeven dat een bal op een bepaalde positie is? Wat bedoel je met "zijn ze op"? En wat wil je nu precies checken: of een bal op een bepaalde plek is of dat een bepaalde plek geen bal bevat?
Enige relevante code lijkt me ook wel handig :) Daarnaast kan ik me niet voorstellen dat je zelf nog niks geprobeerd hebt. Dus, wat heb je geprobreerd en wat lukte daar niet mee?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ok, ik sta op het punt mijn 1e course embedded applications af te ronden, ben dus echt een newbee in java, zeg dit er even bij. Hoop het goed uit te leggen.
Ik noemde het net even ballen aangezien in dit programma er sprake is van piepballen, maar die stellen bij mij zakken appels voor.
Met de volgende methode pakt het mannetje een zak appels, zolang die er liggen.

Java: Wereld.java
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
 
// Methode om een zak gekochtte appels te pakken
void pakZakAppels()
{
      loop(1);
      draaiNaarOost(karel);
      while (!karel.opPiepbal())
      {
            karel.stap();
      }
      if (karel.opPiepbal())
      {
            karel.opPiepbal();
            karel.pakPiepbal();
            karel.zeg("Dag Piet!");
            piet.zeg("Tot ziens!");        
            draaiNaarWest(karel);
      }
      while (!karel.voorObstakel())
      {
            karel.stap();
      }     
      if (karel.voorObstakel())
      {
            draaiNaarZuid(karel);
            karel.stap();                
      }        
} 


Nu is het zo dat deze methode niet uitgevoerd mag worden indien er geen piepbal meer ligt op een bepaalde plek.
Alle rondjes "o" die je ziet zijn de piepballen.
De plek die ik bedoel is de piepbal op, in dit geval, de coördinaten pos_x: 7 en pos_y: 41.

Java: Wereld.java
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
 
public class Wereld extends Wereld
{
    static String designwereld =
        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n"+
        "x..........................................x\n"+
        "x....x.........................xxxxxxxxx...x\n"+
        "x...xxx.......................xx.......xx..x\n"+
        "x..xxx.x.....................xx.........xx.x\n"+
        "x.xxxx.xx....................xoo..x....o.x.x\n"+
        "x.x.....x....................xoo..x..oooox.x\n"+
        "x.x.....x....................x...........x.x\n"+
        "x.x.....x....................x...........x.x\n"+
        "x.x..........................x...........x.x\n"+
        "x.xxxxxxx....................xxxxxx.xxxxxx.x\n"+
        "x..........................................x\n"+
        "x..........................................x\n"+
        "x..........................................x\n"+
        "x...................x..x...................x\n"+
        "x.........xxxxxxxxxxx..xxxxxxxxxxx.........x\n"+
        "x.......xxx......................xxx.......x\n"+
        "x......xx.x.xxxx...x...x...xxxx..x.xx......x\n"+
        "x.....xx..x.x......x...x...x...x....xx.....x\n"+
        "x....xx.o.x.xxx....x...x...x...x.x...xx....x\n"+
        "x...xxo...x.x.......xxx....x...x.x.o..xx...x\n"+
        "x..xx....ox......................x.....xx..x\n"+
        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n";


Het volgende heb ik geprobeerd.

Java: Wereld.java
150
151
152
153
154
155
156
157
158
 
boolean piepbal(int pos_x, int pos_y);
else if (((aantalAppels)<41)&&((geldOpZak-(aantalAppels*0.25))>=0))&&piepbal(7, 41))
{   
        appelsGekocht4=((aantalAppels)*0.25);
        karel.zeg("Ik heb nu nog "+((geldOpZak-bedragMarkt4))+" euro over");        
        pakZakAppels();
        marktHuis();
}


Ik dacht dat het zoiets zou moeten zijn, door de boolean piepbal te gebruiken en de coördinaten mee te geven.

[ Voor 32% gewijzigd door Verwijderd op 31-03-2007 01:38 ]


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Verwijderd schreef op zaterdag 31 maart 2007 @ 01:15:
Java: Wereld.java
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
public class Wereld extends Wereld
{
    static String designwereld =
        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n"+
        "x..........................................x\n"+
        "x....x.........................xxxxxxxxx...x\n"+
        "x...xxx.......................xx.......xx..x\n"+
        "x..xxx.x.....................xx.........xx.x\n"+
        "x.xxxx.xx....................xoo..x....o.x.x\n"+
        "x.x.....x....................xoo..x..oooox.x\n"+
        "x.x.....x....................x...........x.x\n"+
                /* ... */ 
        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n";
Als ik je goed begrijp moet je gewoon kijken of in designwereld op een bepaalde positie een 'o' staat.
Oftewel designwereld.charAt(...) == 'o'; De positie van de character kan je uitrekenen aan de hand van x (bij jou verticaal??) en y (horizontaal??). Als ik even snel tel dan is het veld 44 + 1 '\n' = 45 breed. Het wordt dan dus designwereld.charAt(45 * x + y);

Het is misschien handiger om een array van designwereld te maken. Je hoeft dan alleen designwereld[x].charAt(y) te doen.
Dus
Java:
1
2
3
4
5
    static String[] designwereld = {
        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "x..........................................x",
                /* ... */
        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"};


Nog een opmerking:
In een String kan je niet werken. Je moet een StringBuffer gebruiken of een tweedimensionaal array van characters (die je met een init-methode vult met de waarden uit de String designwereld).


Nog een tipje:
Programmeren stelt niet zoveel voor.

Wat veel beginners fout doen is dat ze gelijk achter de computer gaan zitten. Probeer eerst op papier een stappenplan (algoritme) te maken. Code typen is dan niets anders dan een vertaling van je stappenplan maken. Als de code niet goed werkt dan moet je nagaan waarom het niet werkt en hoe het vreemde resultaat ontstaan is. Dit kan door een typefout zijn, maar ook door een fout in je stappenplan. Is het een fout in het laatste, dan moet je weg bij je PC en met papier weer nadenken over stappenplan.

Wat je zeker niet moet doen is direct code typen en net zolang proberen te veranderen totdat het lijkt te werken. Dit gaat bijna altijd fout. Je weet namelijk niet of het altijd werkt. Bij een stappenplan kan je daarentegen wel goed nagaan of het altijd zal werken.

[edit]
Een normaal computermens begint met 0 met tellen. Zo te zien begin jij met 1. Het wordt dan 45 * (x - 1) + (y - 1).

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Geslacht Vrouw
*O*

Ik zag ook dat je wel nog op GoT bent geweest, maar niets hebt gedaan. Als mijn antwoord niet duidelijk of niet relevant was, dan kan je gewoon dezelfde vraag anders formuleren.

Als ik het allemaal even teruglees, dan is het niet echt duidelijk wat je allemaal moet doen en wat je gedaan hebt. Kan je even globaal uitleggen wat het programma moet gaan doen, wat school al heeft gedaan en wat jij moet maken? Als de opdracht van school niet al te lang is, dan kan je die ook erbij plakken. Kan je ook even uitleggen waarop het moet draaien? Is het voor de PC, voor een telefoon of voor een smartcard? Oftewel: Gebruik je gewoon j2se of gebruik je een of andere verminkte versie? Ook is het handig om te weten wat je al geleerd heb (Objecten,Inheritance,"Static" methoden/velden,Initialisers,UML(geen Java))
Verwijderd schreef op zaterdag 31 maart 2007 @ 01:15:
ik sta op het punt mijn 1e course embedded applications af te ronden, ben dus echt een newbee in java, zeg dit er even bij.
Je reacties en code zien er wel uit als die van een newbee, maar als je bijna klaar bent met je course zou dat niet meer zo moeten zijn. Ik hoop voor je dat je morgen niet al een tentamen hierover hebt.

Hier op GoT is iedereen bereid te helpen (zeker bij iemand van het andere geslacht). Lees eerst je Java-boek helemaal. Als je iets niet helemaal begrijpt en je kan er met google niet uitkomen, dan kan je gewoon over dat onderwerp een topic openen (lees wel eerst de vaste topics bovenaan bij Programming (met blauwe cirkels links)).

Verwijderd

Topicstarter
Dag Daos. Ik heb het toch op een andere manier opgelost dan met de coördinaten. Toch wel bedankt voor je reactie, maar het is me te hoog gegrepen.
Nee een tentamen heb ik al gehad, een 8 was het resultaat :) het valt best mee denk ik, voor iemand die er in de afgelopen 26 jaar bijna nog nooit van gehoord had.. Ben sinds februari pas bezig met de studie..
En dan even ingaand op je vragen, wat ik tot nu toe geleerd heb is eigenlijk alleen het werken met klassen, objecten, methoden, returntypes, parameters en uiteraard variabelen en we werken met Blue J (sinds zeer kort ook Eclipse). Het programma is eigenlijk gewoon een eerste programma wat je maakt om te laten zien wat je tot dan toe geleerd hebt, en je maakt dat in een bestaande wereld.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Dat je me niet helemaal begrepen hebt komt misschien doordat ik het over iets anders had. Het is echt niet moeilijk wat ik noemde.

Ik dacht dat je problemen had bij het maken van de methode piepbal(int pos_x, int pos_y) die true terug moet geven als er op een bepaalde positie in designwereld een 'o' staat. Bovendien maakte ik uit je verhaaltje op dat je een 'o' moet kunnen verwijderen (wat gewoon niet kan bij een String).

Als je iets niet begrijpt, moet je het vragen. Je moet echt alles goed begrijpen. Een kleine (denk)fout kan er al voor zorgen dat je programma niet werkt.
Pagina: 1