Java boggle spel probleem

Status
Niet open voor verdere reacties.

hanonymouss

Gebruiker
Lid geworden
7 sep 2011
Berichten
283
Beste mensen

Ik heb een boggle spel gemaakt in java en ik krijg de matrix mooi met de woorden in.

het probleem alleen is dat mijn score altijd op 0 blijft

hier een screens:
vb.png

dit is mijn code:

[CPP]import java.util.Random;

public class Teerling
{
public char[] sideWaardes;

public Teerling(){
sideWaardes = new char[6];
}

public char schudTeerlingen()
{
Random r = new Random();
char upValue = sideWaardes[r.nextInt(5)];
return upValue;
}

}[/CPP]


[CPP]import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class BoggleBord
{
public Teerling [][] bord;

public BoggleBord() {
bord = new Teerling[4][4];
}

public char[][] setBord()
{
char[][] results = new char[4][4];

for(int i = 0; i < bord.length; i++)
{
for(int j = 0; j < bord.length; j++)
{
results[j] = bord[j].schudTeerlingen();

}
}
return results;
}

}[/CPP]


[CPP]import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class WoordenBoek {
public ArrayList<String> woordenboek;

public WoordenBoek() {
woordenboek = new ArrayList<String>();
vul();
}

public void vul() {


try {
File file = new File("woordenlijst.txt");
Scanner scan = new Scanner(file);


while (scan.hasNext()) {

woordenboek.add(scan.next());

}


} catch (FileNotFoundException e)

{
System.out.println("Bestand niet gevonden");

} catch (IOException e) {

System.out.println("Problemen bij het laden van bestand");

} catch (NullPointerException e) {

System.out.println("Bestand is Null");

} finally {

}


}
}

[/CPP]

[CPP]import java.util.ArrayList;
import java.io.*;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class BoggleSpel extends TimerTask{

public Integer dimensie;
public WoordenBoek woordenBoek;
public Score scoreBord;
char[][] spelbord;
LinkedList<Integer> matches;
LinkedList<String> geraden;
ArrayList<Integer> scores;
public Timer timer;
public boolean running = true;

public BoggleSpel(BoggleBord bord){
dimensie = 4;
spelbord = bord.setBord();
matches = new LinkedList<Integer>();
woordenBoek = new WoordenBoek();
geraden = new LinkedList<String>();
}

@Override
public void run() {
endGame();

}

private void endGame() {
running = false;

//getScores();
for (int i = 0; i < geraden.size(); i ++)
{
if (checkWord(geraden.get(i)))
{
System.out.println(geraden.get(i) + "\t\t" + scores.get(i));
}
else
{
System.out.println(geraden.get(i) + "\t\t" + '0' + "\t\t Geen geldige woord");
}
}

}

public void playGame()
{
int x = 0;


for(int i = 0; i < spelbord.length; i++)
{
System.out.println(spelbord[0] + " " + spelbord[1] + " " + spelbord[2] + " " + spelbord[3]);

}

Scanner scan = new Scanner(System.in);
while(running )
{


geraden.add(scan.next());
}

endGame();



}

public boolean checkWord(String word)
{
for(int i = 0; i < spelbord.length; i++)
{
for(int j = 0; j < spelbord.length; j++)
{
if(spelbord[j] == word.charAt(0));
{
return woordenBoek.woordenboek.contains(word);
}
}
}
return false;
}


public void getScores()
{
scores = scoreBord.getScore(geraden);
}
public int totalSocre()
{
int total = 0;
for(int i = 0; i < scores.size(); i ++)
{
total += scores.get(i);
}
return total;
}

//Controleert of een woord aanwezig is op het bord
public boolean isOngamebord(String word, int i, int j)
{
if(word.length() == 0) return true;

LinkedList<Integer> potentials = findAdjacentPos(i,j);
while(!potentials.isEmpty())
{
int one = potentials.poll();
int two = potentials.poll();

if(spelbord[one][two] == word.charAt(1))
{
isOngamebord(word.substring(1),one,two);
}



}
return false;

}

//Geeft een lijst van alle aangrenzende posities voor een bepaalde input positie
private LinkedList<Integer> findAdjacentPos(int i, int j)
{
LinkedList<Integer> pos = new LinkedList<Integer>();
if(i == 0 && j == 0)
{
pos.add(i + 1);
pos.add(j);

pos.add(i);
pos.add(j + 1);

pos.add(i + 1);
pos.add(j + 1);
}

else if(j == dimensie-1 && i == dimensie-1)
{
pos.add(i - 1);
pos.add(j);

pos.add(i);
pos.add(j - 1);

pos.add(i - 1);
pos.add(j - 1);
}

else if( i == 0 && j == dimensie-1)
{
pos.add(i + 1);
pos.add(j);

pos.add(i);
pos.add(j - 1);

pos.add(i + 1);
pos.add(j - 1);
}

else if( j == 0 && i == dimensie-1)
{
pos.add(i);
pos.add(j + 1);


pos.add(i - 1);
pos.add(j);


pos.add(i - 1);
pos.add(j + 1);

}



else if(j == 0)
{
pos.add(i + 1);
pos.add(j);

pos.add(i + 1);
pos.add(j + 1);

pos.add(i - 1);
pos.add(j + 1);

pos.add(i - 1);
pos.add(j);
}

else if(i == 0)
{
pos.add(i);
pos.add(j + 1);


pos.add(i + 1);
pos.add(j + 1);

pos.add(i + 1);
pos.add(j - 1);


pos.add(i);
pos.add(j - 1);
}



else if(j == dimensie-1)
{
pos.add(i + 1);
pos.add(j);

pos.add(i + 1);
pos.add(j - 1);

pos.add(i - 1);
pos.add(j - 1);

pos.add(i - 1);
pos.add(j);
}

else if(i == dimensie-1)
{

pos.add(i);
pos.add(j + 1);


pos.add(i - 1);
pos.add(j + 1);


pos.add(i - 1);
pos.add(j - 1);


pos.add(i);
pos.add(j - 1);
}

else{

pos.add(i-1);
pos.add(j);

pos.add(i-1);
pos.add(j-1);

pos.add(i);
pos.add(j-1);

pos.add(i+1);
pos.add(j-1);

pos.add(i+1);
pos.add(j);

pos.add(i+1);
pos.add(j+1);

pos.add(i);
pos.add(j+1);


}



return pos;
}


}
[/CPP]

[CPP]import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;

public class Score {

HashMap<Integer, Integer> ScoreMap = new HashMap<Integer, Integer>();

public Score() {
vulScoreMap();
}

public void vulScoreMap() {
ScoreMap.put(3, 1);
ScoreMap.put(4, 1);
ScoreMap.put(5, 2);
ScoreMap.put(6, 3);
ScoreMap.put(7, 5);
ScoreMap.put(8, 11); //* 8+ score is 11
}

public int berekenScore(String s) {
int nummer = ScoreMap.get(s.length());
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'q') {
nummer++;
}
}


if (nummer <= 4) {
nummer += 1;
} else if (nummer == 5) {
nummer += 2;
} else if (nummer == 6) {
nummer += 3;
} else if (nummer == 7) {
nummer += 5;
} else if (nummer >= 8) {
nummer += 11;
}

return nummer;

}

public ArrayList<Integer> getScore(LinkedList<String> geraden) {
ArrayList<Integer> scoreLijst = new ArrayList<Integer>();
for (int i = 0; i < geraden.size(); i++) {
scoreLijst.add(berekenScore(geraden.get(i)));
}
return scoreLijst;
}
}[/CPP]

[CPP]import java.util.Timer;
import java.util.TimerTask;
public class Speel {

//120000 = 2 mins
public static final long GAME_TIME = 30000;
public BoggleBord finalBord;
public BoggleSpel game;
public Timer timer;

public Speel(){
finalBord = new BoggleBord();
buildBord();
game = new BoggleSpel(finalBord);
timer = new Timer();
}

public void Speel()
{
timer.schedule(game, GAME_TIME);
game.playGame();
}


public void buildBord()
{
Teerling dice1 = new Teerling();
dice1.sideWaardes = "LRTTE".toCharArray();
Teerling dice2 = new Teerling();
dice2.sideWaardes = "VTHRWE".toCharArray();
Teerling dice3 = new Teerling();
dice3.sideWaardes = "EGHWNE".toCharArray();
Teerling dice4 = new Teerling();
dice4.sideWaardes = "SEOTIS".toCharArray();
Teerling dice5 = new Teerling();
dice5.sideWaardes = "ANAEEG".toCharArray();
Teerling dice6 = new Teerling();
dice6.sideWaardes = "IDSYTT".toCharArray();
Teerling dice7 = new Teerling();
dice7.sideWaardes = "OATTOW".toCharArray();
Teerling dice8 = new Teerling();
dice8.sideWaardes = "MTOICU".toCharArray();
Teerling dice9 = new Teerling();
dice9.sideWaardes = "AFPKFS".toCharArray();
Teerling dice10 = new Teerling();
dice10.sideWaardes = "XLDERI".toCharArray();
Teerling dice11 = new Teerling();
dice11.sideWaardes = "HCPOAS".toCharArray();
Teerling dice12 = new Teerling();
dice12.sideWaardes = "ENSIEU".toCharArray();
Teerling dice13 = new Teerling();
dice13.sideWaardes = "YLDEVR".toCharArray();
Teerling dice14 = new Teerling();
dice14.sideWaardes = "ZNRNHL".toCharArray();
Teerling dice15 = new Teerling();
dice15.sideWaardes = "NMIQHU".toCharArray();
Teerling dice16 = new Teerling();
dice16.sideWaardes = "OBBAOJ".toCharArray();

finalBord.bord[0][0] = dice1;
finalBord.bord[0][1] = dice2;
finalBord.bord[0][2] = dice3;
finalBord.bord[0][3] = dice4;
finalBord.bord[1][0] = dice5;
finalBord.bord[1][1] = dice6;
finalBord.bord[1][2] = dice7;
finalBord.bord[1][3] = dice8;
finalBord.bord[2][0] = dice9;
finalBord.bord[2][1] = dice10;
finalBord.bord[2][2] = dice11;
finalBord.bord[2][3] = dice12;
finalBord.bord[3][0] = dice13;
finalBord.bord[3][1] = dice14;
finalBord.bord[3][2] = dice15;
finalBord.bord[3][3] = dice16;


}

}
[/CPP]

en zo voer ik het uit

[CPP]public static void main(String[] args) {
Speel boggle = new Speel();
boggle.Speel();
}[/CPP]

Ik heb er dagen naar het probleem gezocht tevergeefs

ik hoop dat jullie mij hieruit kunnen helpen

alvast bedankt

zip bestand van de klassen:Bekijk bijlage boggle.zip

srry woordenlijst vergeten: https://dl.dropbox.com/u/38016137/woordenlijst.txt
 
Laatst bewerkt:
Beste hanonymouss,

Ik heb even naar je code gekeken en ik merkte op dat er hele vreemde dingen in gebeuren.
In dit stukje code
Code:
if(spelbord[i][j] == word.charAt(0));
{
       return woordenBoek.woordenboek.contains(word);
}

geeft de if-vergelijking op de een of andere manier altijd true aan. Dit zou natuurlijk niet moeten. Ik heb even verder gekeken en ik zie dat je verschillende char arrays aanmaakt en elke keer modificaties op deze verschillende char arrays doet bijvoorbeeld in de setBord en schudTeerlingen methode (dit zou de verkeerde vergelijking kunnen veroorzaken). Ook heb je veel public variabelen (of variabelen zonder access level modifier en dus bereikbaar binnen de package). Er worden allerlei variabelen opnieuw geinitialiseerd en als ik eerlijk ben, ben ik daardoor het overzicht kwijt geraakt. Zou je willen proberen je code zo te structureren dat je variabelen private worden en alleen bereikt en aangepast kunnen worden door getters en setters (het OO-model). Daarnaast niet allerlei nieuwe char arrays aanmaken, deze modificeren en naar andere char arrays laten wijzen, maar één char array maken en deze modificeren. Ik ben bang dat het daar namelijk fout gaat. Als je er niet uit komt wil ik wel een poging wagen om je structuur een beetje op te schonen, maar ik denk dat het beter is als je het zelf doet.

Sorry dat deze uitleg een beetje vaag overkomt, ik heb namelijk niet genoeg tijd om de hele code te debuggen. Mijn excuses.

Hier een beetje leesvoer waarin o.a. accessors (getters en setters) worden behandeld. Zelf ben ik een aanhanger van de OO-principes, omdat het naar mijn mening je code overzichtelijk houdt en elke klasse zijn eigen werking en variabelen heeft.
http://codebetter.com/raymondlewallen/2005/07/19/4-major-principles-of-object-oriented-programming/


Met vriendelijke groeten,
NewbiProgrammer
 
Laatst bewerkt:
@NewbiProgrammer: Dank je wel

Ik heb nu mijn project voorzien van getters en setters zoals u zei en mijn velden zijn als private gesteld

bewerkte codes:

Teerling:

[CPP]import java.util.Random;

public class Teerling
{
private char[] sideWaardes;

public Teerling(){
this.sideWaardes = new char[6];
}

public char[] getSideWaardes() {
return this.sideWaardes;
}

public void setSideWaardes(char[] sideWaardes) {
this.sideWaardes = sideWaardes;
}

public char schudTeerlingen()
{

Random r = new Random();
char upValue = this.sideWaardes[r.nextInt(5)];
return upValue;
}

}[/CPP]

BoggleBord:

[CPP]import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class BoggleBord
{
private Teerling [][] bord;

public BoggleBord() {
this.bord = new Teerling[4][4];
}

public Teerling[][] getBord() {
return this.bord;
}

public char[][] setBord()
{
char[][] results = new char[4][4];

for(int i = 0; i < bord.length; i++)
{
for(int j = 0; j < bord.length; j++)
{
results[j] = bord[j].schudTeerlingen();

}
}
return results;
}

}[/CPP]

BoggleSpel:

[CPP]import java.util.ArrayList;
import java.io.*;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class BoggleSpel extends TimerTask {

private Integer dimensie;
private WoordenBoek woordenBoek;
private Score scoreBord;
private char[][] spelbord;
private LinkedList<Integer> matches;
private LinkedList<String> geraden;
private ArrayList<Integer> scores;
private Timer timer;
private boolean running = true;

public BoggleSpel(BoggleBord bord) {
this.dimensie = 4;
this.spelbord = bord.setBord();
this.matches = new LinkedList<Integer>();
this.woordenBoek = new WoordenBoek();
this.geraden = new LinkedList<String>();
}

@Override
public void run() {
endGame();

}

private void endGame() {
this.running = false;

//getScores();
for (int i = 0; i < this.geraden.size(); i++) {
if (checkWord(this.geraden.get(i))) {
System.out.println(this.geraden.get(i) + "\t\t" + this.scores.get(i));
} else {
System.out.println(this.geraden.get(i) + "\t\t" + '0' + "\t\t Geen geldige woord");
}
}

}

public void playGame() {
int x = 0;


for (int i = 0; i < this.spelbord.length; i++) {
System.out.println(this.spelbord[0] + " " + this.spelbord[1] + " " + this.spelbord[2] + " " + this.spelbord[3]);

}

Scanner scan = new Scanner(System.in);
while (this.running) {


this.geraden.add(scan.next());
}

endGame();


}

public boolean checkWord(String word) {
for (int i = 0; i < this.spelbord.length; i++) {
for (int j = 0; j < this.spelbord.length; j++) {
if (this.spelbord[j] == word.charAt(0)) ;
{
return this.woordenBoek.getWoordenboek().contains(word);
}
}
}
return false;
}


public void getScores() {
this.scores = this.scoreBord.getScore(this.geraden);
}

public int totalSocre() {
int total = 0;
for (int i = 0; i < this.scores.size(); i++) {
total += this.scores.get(i);
}
return total;
}

//Controleert of een woord aanwezig is op het bord
public boolean isOngamebord(String word, int i, int j) {
if (word.length() == 0) return true;

LinkedList<Integer> potentials = findAdjacentPos(i, j);
while (!potentials.isEmpty()) {
int one = potentials.poll();
int two = potentials.poll();

if (this.spelbord[one][two] == word.charAt(1)) {
isOngamebord(word.substring(1), one, two);
}


}
return false;

}

//Geeft een lijst van alle aangrenzende posities voor een bepaalde input positie
private LinkedList<Integer> findAdjacentPos(int i, int j) {
LinkedList<Integer> pos = new LinkedList<Integer>();
if (i == 0 && j == 0) {
pos.add(i + 1);
pos.add(j);

pos.add(i);
pos.add(j + 1);

pos.add(i + 1);
pos.add(j + 1);
} else if (j == this.dimensie - 1 && i == this.dimensie - 1) {
pos.add(i - 1);
pos.add(j);

pos.add(i);
pos.add(j - 1);

pos.add(i - 1);
pos.add(j - 1);
} else if (i == 0 && j == this.dimensie - 1) {
pos.add(i + 1);
pos.add(j);

pos.add(i);
pos.add(j - 1);

pos.add(i + 1);
pos.add(j - 1);
} else if (j == 0 && i == this.dimensie - 1) {
pos.add(i);
pos.add(j + 1);


pos.add(i - 1);
pos.add(j);


pos.add(i - 1);
pos.add(j + 1);

} else if (j == 0) {
pos.add(i + 1);
pos.add(j);

pos.add(i + 1);
pos.add(j + 1);

pos.add(i - 1);
pos.add(j + 1);

pos.add(i - 1);
pos.add(j);
} else if (i == 0) {
pos.add(i);
pos.add(j + 1);


pos.add(i + 1);
pos.add(j + 1);

pos.add(i + 1);
pos.add(j - 1);


pos.add(i);
pos.add(j - 1);
} else if (j == this.dimensie - 1) {
pos.add(i + 1);
pos.add(j);

pos.add(i + 1);
pos.add(j - 1);

pos.add(i - 1);
pos.add(j - 1);

pos.add(i - 1);
pos.add(j);
} else if (i == this.dimensie - 1) {

pos.add(i);
pos.add(j + 1);


pos.add(i - 1);
pos.add(j + 1);


pos.add(i - 1);
pos.add(j - 1);


pos.add(i);
pos.add(j - 1);
} else {

pos.add(i - 1);
pos.add(j);

pos.add(i - 1);
pos.add(j - 1);

pos.add(i);
pos.add(j - 1);

pos.add(i + 1);
pos.add(j - 1);

pos.add(i + 1);
pos.add(j);

pos.add(i + 1);
pos.add(j + 1);

pos.add(i);
pos.add(j + 1);


}


return pos;
}


}
[/CPP]

Woordenboek:

[CPP]import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class WoordenBoek {
private ArrayList<String> woordenboek;

public WoordenBoek() {
this.woordenboek = new ArrayList<String>();
vul();
}

public ArrayList<String> getWoordenboek() {
return this.woordenboek;
}

public void vul() {


try {
File file = new File("woordenlijst.txt");
Scanner scan = new Scanner(file);


while (scan.hasNext()) {

this.woordenboek.add(scan.next());

}



} catch (FileNotFoundException e)

{
System.out.println("Bestand niet gevonden");

} catch (IOException e) {

System.out.println("Problemen bij het laden van bestand");

} catch (NullPointerException e) {

System.out.println("Bestand is Null");

} finally {

}


}
}
[/CPP]

Score:

[CPP]import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;

public class Score {

private HashMap<Integer, Integer> ScoreMap = new HashMap<Integer, Integer>();

public Score() {
vulScoreMap();
}

public void vulScoreMap() {
this.ScoreMap.put(3, 1);
this.ScoreMap.put(4, 1);
this.ScoreMap.put(5, 2);
this.ScoreMap.put(6, 3);
this.ScoreMap.put(7, 5);
this.ScoreMap.put(8, 11); //* 8+ score is 11
}

public int berekenScore(String s) {
int nummer = this.ScoreMap.get(s.length());
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'q') {
nummer++;
}
}


if (nummer <= 4) {
nummer += 1;
} else if (nummer == 5) {
nummer += 2;
} else if (nummer == 6) {
nummer += 3;
} else if (nummer == 7) {
nummer += 5;
} else if (nummer >= 8) {
nummer += 11;
}

return nummer;

}

public ArrayList<Integer> getScore(LinkedList<String> geraden) {
ArrayList<Integer> scoreLijst = new ArrayList<Integer>();
for (int i = 0; i < geraden.size(); i++) {
scoreLijst.add(berekenScore(geraden.get(i)));
}
return scoreLijst;
}
}[/CPP]

Speel:

[CPP]import java.util.Timer;
import java.util.TimerTask;

public class Speel {

//120000 = 2 mins
private static final long GAME_TIME = 30000;
private BoggleBord finalBord;
private BoggleSpel game;
private Timer timer;

public Speel() {
this.finalBord = new BoggleBord();
buildBord();
this.game = new BoggleSpel(this.finalBord);
this.timer = new Timer();
}

public void Speel() {
this.timer.schedule(this.game, this.GAME_TIME);
this.game.playGame();
}


public void buildBord() {
Teerling dice1 = new Teerling();
dice1.setSideWaardes("LRTTE".toCharArray());
Teerling dice2 = new Teerling();
dice2.setSideWaardes("VTHRWE".toCharArray());
Teerling dice3 = new Teerling();
dice3.setSideWaardes("EGHWNE".toCharArray());
Teerling dice4 = new Teerling();
dice4.setSideWaardes("SEOTIS".toCharArray());
Teerling dice5 = new Teerling();
dice5.setSideWaardes("ANAEEG".toCharArray());
Teerling dice6 = new Teerling();
dice6.setSideWaardes("IDSYTT".toCharArray());
Teerling dice7 = new Teerling();
dice7.setSideWaardes("OATTOW".toCharArray());
Teerling dice8 = new Teerling();
dice8.setSideWaardes("MTOICU".toCharArray());
Teerling dice9 = new Teerling();
dice9.setSideWaardes("AFPKFS".toCharArray());
Teerling dice10 = new Teerling();
dice10.setSideWaardes("XLDERI".toCharArray());
Teerling dice11 = new Teerling();
dice11.setSideWaardes("HCPOAS".toCharArray());
Teerling dice12 = new Teerling();
dice12.setSideWaardes("ENSIEU".toCharArray());
Teerling dice13 = new Teerling();
dice13.setSideWaardes("YLDEVR".toCharArray());
Teerling dice14 = new Teerling();
dice14.setSideWaardes("ZNRNHL".toCharArray());
Teerling dice15 = new Teerling();
dice15.setSideWaardes("NMIQHU".toCharArray());
Teerling dice16 = new Teerling();
dice16.setSideWaardes("OBBAOJ".toCharArray());

this.finalBord.getBord()[0][0] = dice1;
this.finalBord.getBord()[0][1] = dice2;
this.finalBord.getBord()[0][2] = dice3;
this.finalBord.getBord()[0][3] = dice4;
this.finalBord.getBord()[1][0] = dice5;
this.finalBord.getBord()[1][1] = dice6;
this.finalBord.getBord()[1][2] = dice7;
this.finalBord.getBord()[1][3] = dice8;
this.finalBord.getBord()[2][0] = dice9;
this.finalBord.getBord()[2][1] = dice10;
this.finalBord.getBord()[2][2] = dice11;
this.finalBord.getBord()[2][3] = dice12;
this.finalBord.getBord()[3][0] = dice13;
this.finalBord.getBord()[3][1] = dice14;
this.finalBord.getBord()[3][2] = dice15;
this.finalBord.getBord()[3][3] = dice16;


}

}
[/CPP]

Maar mijn probleem is nog steeds niet opgelost.
Ik hoop dat jullie de fout weten te vinden, want ik weet het niet meer

zip boggle:Bekijk bijlage boggle.zip
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan