Beste,
Ik zit vast bij een eenvoudig spel in java. Ik werk via het MVC principe maar ben vast geraakt bij iets dat mij vrij eenvoudig lijkt. Ik weet niet of iemand het principe van het spel kent maar de bedoeling is dus dat wanneer ik 4 muren heb gebouwd de kamer automatisch gebouwd wordt en dus van kleur veranderd. Maar ik slaag er maar niet in om ervoor te zorgen dat dit dus gebeurd, ik heb al vanalles geprobeerd en in commentaar gezet in mijn code.
De methode die ik wil schrijven zou in de klasse "Spelbord" geschreven moeten worden. Een methode die ervoor zorgt dat wanneer de 4 muren rondom een kamer geselecteerd worden dat de omsloten kamer dus geselecteerd wordt en automatisch rood wordt in dit geval( dit werkt al, want als ik manueel alle kamers op geselecteerd zet worden ze rood).
Ik heb ook 1 probeersel gemaakt met muurB, die dus ervoor zou moeten zorgen als de muur boven de kamer geselecteerd wordt de kamer ook geselecteerd wordt. Dit werkt dus ook niet.
Het bestand met de volledige code bevindt zich in de bijlage(dit lukt blijkbaar niet? Hij voegt ze toe maar dan verschijnt er niks. Ik zal de code hier neerzetten:
Met vriendelijke groeten, en alvast bedankt!
Ik zit vast bij een eenvoudig spel in java. Ik werk via het MVC principe maar ben vast geraakt bij iets dat mij vrij eenvoudig lijkt. Ik weet niet of iemand het principe van het spel kent maar de bedoeling is dus dat wanneer ik 4 muren heb gebouwd de kamer automatisch gebouwd wordt en dus van kleur veranderd. Maar ik slaag er maar niet in om ervoor te zorgen dat dit dus gebeurd, ik heb al vanalles geprobeerd en in commentaar gezet in mijn code.
De methode die ik wil schrijven zou in de klasse "Spelbord" geschreven moeten worden. Een methode die ervoor zorgt dat wanneer de 4 muren rondom een kamer geselecteerd worden dat de omsloten kamer dus geselecteerd wordt en automatisch rood wordt in dit geval( dit werkt al, want als ik manueel alle kamers op geselecteerd zet worden ze rood).
Ik heb ook 1 probeersel gemaakt met muurB, die dus ervoor zou moeten zorgen als de muur boven de kamer geselecteerd wordt de kamer ook geselecteerd wordt. Dit werkt dus ook niet.
Het bestand met de volledige code bevindt zich in de bijlage(dit lukt blijkbaar niet? Hij voegt ze toe maar dan verschijnt er niks. Ik zal de code hier neerzetten:
Code:
import java.awt.*;
/**
* Write a description of class Constructie here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Constructie
{
// instance variables - replace the example below with your own
public int x,y;
public Color kleur;
/**
* Constructor for objects of class Constructie
*
* @param x de x-coordinaat van de Constructie
* @param y de y-coordinaat van de Constructie
* @param bKleur de beginkleur vab de constructie
*/
public Constructie(int x,int y, Color bKleur)
{
// initialise instance variables
this.x=x;
this.y=y;
kleur = bKleur;
}
/**
* geef de X coordinaat
*
* @return x coordinaat
*/
public int geefX(){
return x;
}
/**
* geef de y coordinaat
* @return de y-coordinaat
*/
public int geefY(){
return y;
}
/**
* Geef de kleur van de constructie
* @return kleur de kleur van de constructie
*/
public Color geefKleur() {
return kleur;
}
}
Code:
import java.awt.*;
/**
* Write a description of class Kamer here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Kamer extends Constructie
{
// instance variables - replace the example below with your own
private int grootte;
private boolean geselecteerd;
/**
* Constructor for objects of class Kamer
*/
public Kamer(int x,int y)
{
super(x, y, Color.WHITE);
grootte = 2;
}
/**
* een kamer wordt gebouwd en is dus geselecteerd
*
*
*/
public void selecteerK() {
geselecteerd = true;
}
/**
* Verander de kleur van de kamer
*
* @param k de kleur van waain de kamer moet veranderen, dit hangt af van welke speler de kamer kan bouwen
*/
public void veranderKaKleur(Color k) {
kleur = k;
}
/**
* geef de grootte van de kamer
* @return de grootte van de kamer
*/
public int grootte(){
return grootte;
}
/**
* Wanneer ik coordinaten ingeef, ligt hier dan een kamer?
*
*
* @param xco de x coordinaat
* @param yco de y coordinaat
*
* @return true als de plaats bezet is, false indien niet
*/
public boolean posKamer(int xco, int yco) {
int beginX =geefX();
int beginY =geefY();
int eindX = beginX+grootte-1;
int eindY = beginY+grootte-1;
return(beginX<= xco && xco<= eindX
&&
beginY<= yco && yco<= eindY);
}
/**
* is deze kamer geselecteerd
*
* @return geselecteerd true als de kamer geselecteerd is false indien niet
*/
public boolean isKgeselecteerd() {
return geselecteerd;
}
}
Code:
import java.awt.*;
/**
* Write a description of class Muur here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Muur extends Constructie
{
// instance variables - replace the example below with your own
private int lengte;
private Richting richting;
private boolean geselecteerd;
/**
* @param x de x-coordinaat van de Muur
* @param y de y-coordinaat van de Muur
* @param richting Selecteer of de muur horizontaal of vertikaal staat
*/
public Muur(int x,int y, Richting richting)
{
// initialise instance variables
super(x, y, Color.GREEN);
this.richting = richting;
lengte = 2;
}
/**
* Wanneer de muur aangeklikt wordt op het spelbord moet deze ook van kleur veranderen
*
* @param k de nieuwe kleur nadat deze muur is aangeklikt.
*/
public void veranderKleur(Color k) {
kleur = k;
}
/**
* geef de richting van de muur aan
*
* @return richting de richting
*/
public Richting geefRichting() {
return richting;
}
/**
* geef de lengte van de muur
* @return lengte de lengte van de muur
*/
public int geefLengte(){
return lengte;
}
/**
* selecteer de muur
*/
public void selecteer() {
geselecteerd = true;
}
/**
* Ligt de muur op deze positie?
*
* @param xco de x-coordinaat
* @param yco de y-coordinaat
*
* @return true als de plaats bezet is, false indien niet
*
*/
public boolean posMuur(int xco, int yco) {
int beginX = geefX();
int beginY = geefY();
int eindX, eindY;
if(richting == Richting.horizontaal) {
eindX = beginX+lengte-1;
eindY=beginY;
}
else {
eindX=beginX;
eindY=beginY + lengte-1;
}
return(beginX<= xco && xco<= eindX
&&
beginY<= yco && yco<= eindY);
}
/**
* geef of deze auto geselecteerd is
*/
public boolean isGeselecteerd(){
return geselecteerd;
}
}
Code:
/**
* Enumeration class Richting - write a description of the enum class here
*
* @author (your name here)
* @version (version number or date here)
*/
public enum Richting
{
horizontaal, vertikaal
}
Code:
import java.util.*;
import java.awt.*;
/**
* Write a description of class Spelbord here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Spelbord
{
// instance variables - replace the example below with your own
private ArrayList<Muur> muren;
private ArrayList<Kamer> kamers;
private int grootteSpel;
private boolean aangeklikt;
private boolean muurB;
private Kamer ka;
/**
* Constructor for objects of class Spelbord
*/
public Spelbord()
{
muren = new ArrayList<Muur>();
kamers = new ArrayList<Kamer>();
grootteSpel = 25;
player1=true;
player2=false;
muurB = true;
kamers.add(new Kamer(1,1));
kamers.add(new Kamer(4,1));
kamers.add(new Kamer(7,1));
kamers.add(new Kamer(10,1));
kamers.add(new Kamer(13,1));
kamers.add(new Kamer(16,1));
kamers.add(new Kamer(19,1));
kamers.add(new Kamer(22,1));
kamers.add(new Kamer(1,4));
kamers.add(new Kamer(4,4));
kamers.add(new Kamer(7,4));
kamers.add(new Kamer(10,4));
kamers.add(new Kamer(13,4));
kamers.add(new Kamer(16,4));
kamers.add(new Kamer(19,4));
kamers.add(new Kamer(22,4));
kamers.add(new Kamer(1,7));
kamers.add(new Kamer(4,7));
kamers.add(new Kamer(7,7));
kamers.add(new Kamer(10,7));
kamers.add(new Kamer(13,7));
kamers.add(new Kamer(16,7));
kamers.add(new Kamer(19,7));
kamers.add(new Kamer(22,7));
kamers.add(new Kamer(1,10));
kamers.add(new Kamer(4,10));
kamers.add(new Kamer(7,10));
kamers.add(new Kamer(10,10));
kamers.add(new Kamer(13,10));
kamers.add(new Kamer(16,10));
kamers.add(new Kamer(19,10));
kamers.add(new Kamer(22,10));
kamers.add(new Kamer(1,13));
kamers.add(new Kamer(4,13));
kamers.add(new Kamer(7,13));
kamers.add(new Kamer(10,13));
kamers.add(new Kamer(13,13));
kamers.add(new Kamer(16,13));
kamers.add(new Kamer(19,13));
kamers.add(new Kamer(22,13));
kamers.add(new Kamer(1,16));
kamers.add(new Kamer(4,16));
kamers.add(new Kamer(7,16));
kamers.add(new Kamer(10,16));
kamers.add(new Kamer(13,16));
kamers.add(new Kamer(16,16));
kamers.add(new Kamer(19,16));
kamers.add(new Kamer(22,16));
kamers.add(new Kamer(1,19));
kamers.add(new Kamer(4,19));
kamers.add(new Kamer(7,19));
kamers.add(new Kamer(10,19));
kamers.add(new Kamer(13,19));
kamers.add(new Kamer(16,19));
kamers.add(new Kamer(19,19));
kamers.add(new Kamer(22,19));
kamers.add(new Kamer(1,22));
kamers.add(new Kamer(4,22));
kamers.add(new Kamer(7,22));
kamers.add(new Kamer(10,22));
kamers.add(new Kamer(13,22));
kamers.add(new Kamer(16,22));
kamers.add(new Kamer(19,22));
kamers.add(new Kamer(22,22));
muren.add(new Muur(1,0,Richting.horizontaal));
muren.add(new Muur(4,0,Richting.horizontaal));
muren.add(new Muur(7,0,Richting.horizontaal));
muren.add(new Muur(10,0,Richting.horizontaal));
muren.add(new Muur(13,0,Richting.horizontaal));
muren.add(new Muur(16,0,Richting.horizontaal));
muren.add(new Muur(19,0,Richting.horizontaal));
muren.add(new Muur(22,0,Richting.horizontaal));
muren.add(new Muur(1,3,Richting.horizontaal));
muren.add(new Muur(4,3,Richting.horizontaal));
muren.add(new Muur(7,3,Richting.horizontaal));
muren.add(new Muur(10,3,Richting.horizontaal));
muren.add(new Muur(13,3,Richting.horizontaal));
muren.add(new Muur(16,3,Richting.horizontaal));
muren.add(new Muur(19,3,Richting.horizontaal));
muren.add(new Muur(22,3,Richting.horizontaal));
muren.add(new Muur(1,6,Richting.horizontaal));
muren.add(new Muur(4,6,Richting.horizontaal));
muren.add(new Muur(7,6,Richting.horizontaal));
muren.add(new Muur(10,6,Richting.horizontaal));
muren.add(new Muur(13,6,Richting.horizontaal));
muren.add(new Muur(16,6,Richting.horizontaal));
muren.add(new Muur(19,6,Richting.horizontaal));
muren.add(new Muur(22,6,Richting.horizontaal));
muren.add(new Muur(1,9,Richting.horizontaal));
muren.add(new Muur(4,9,Richting.horizontaal));
muren.add(new Muur(7,9,Richting.horizontaal));
muren.add(new Muur(10,9,Richting.horizontaal));
muren.add(new Muur(13,9,Richting.horizontaal));
muren.add(new Muur(16,9,Richting.horizontaal));
muren.add(new Muur(19,9,Richting.horizontaal));
muren.add(new Muur(22,9,Richting.horizontaal));
muren.add(new Muur(1,12,Richting.horizontaal));
muren.add(new Muur(4,12,Richting.horizontaal));
muren.add(new Muur(7,12,Richting.horizontaal));
muren.add(new Muur(10,12,Richting.horizontaal));
muren.add(new Muur(13,12, Richting.horizontaal));
muren.add(new Muur(16,12,Richting.horizontaal));
muren.add(new Muur(19,12,Richting.horizontaal));
muren.add(new Muur(22,12,Richting.horizontaal));
muren.add(new Muur(1,15,Richting.horizontaal));
muren.add(new Muur(4,15,Richting.horizontaal));
muren.add(new Muur(7,15,Richting.horizontaal));
muren.add(new Muur(10,15,Richting.horizontaal));
muren.add(new Muur(13,15,Richting.horizontaal));
muren.add(new Muur(16,15,Richting.horizontaal));
muren.add(new Muur(19,15,Richting.horizontaal));
muren.add(new Muur(22,15,Richting.horizontaal));
muren.add(new Muur(1,18,Richting.horizontaal));
muren.add(new Muur(4,18,Richting.horizontaal));
muren.add(new Muur(7,18,Richting.horizontaal));
muren.add(new Muur(10,18,Richting.horizontaal));
muren.add(new Muur(13,18,Richting.horizontaal));
muren.add(new Muur(16,18,Richting.horizontaal));
muren.add(new Muur(19,18,Richting.horizontaal));
muren.add(new Muur(22,18,Richting.horizontaal));
muren.add(new Muur(1,21,Richting.horizontaal));
muren.add(new Muur(4,21,Richting.horizontaal));
muren.add(new Muur(7,21,Richting.horizontaal));
muren.add(new Muur(10,21,Richting.horizontaal));
muren.add(new Muur(13,21,Richting.horizontaal));
muren.add(new Muur(16,21,Richting.horizontaal));
muren.add(new Muur(19,21,Richting.horizontaal));
muren.add(new Muur(22,21,Richting.horizontaal));
muren.add(new Muur(1,24,Richting.horizontaal));
muren.add(new Muur(4,24,Richting.horizontaal));
muren.add(new Muur(7,24,Richting.horizontaal));
muren.add(new Muur(10,24,Richting.horizontaal));
muren.add(new Muur(13,24,Richting.horizontaal));
muren.add(new Muur(16,24,Richting.horizontaal));
muren.add(new Muur(19,24,Richting.horizontaal));
muren.add(new Muur(22,24,Richting.horizontaal));
muren.add(new Muur(0,1,Richting.vertikaal));
muren.add(new Muur(0,4,Richting.vertikaal));
muren.add(new Muur(0,7,Richting.vertikaal));
muren.add(new Muur(0,10,Richting.vertikaal));
muren.add(new Muur(0,13,Richting.vertikaal));
muren.add(new Muur(0,16,Richting.vertikaal));
muren.add(new Muur(0,19,Richting.vertikaal));
muren.add(new Muur(0,22,Richting.vertikaal));
muren.add(new Muur(3,1,Richting.vertikaal));
muren.add(new Muur(3,4,Richting.vertikaal));
muren.add(new Muur(3,7,Richting.vertikaal));
muren.add(new Muur(3,10,Richting.vertikaal));
muren.add(new Muur(3,13,Richting.vertikaal));
muren.add(new Muur(3,16,Richting.vertikaal));
muren.add(new Muur(3,19,Richting.vertikaal));
muren.add(new Muur(3,22,Richting.vertikaal));
muren.add(new Muur(6,1,Richting.vertikaal));
muren.add(new Muur(6,4,Richting.vertikaal));
muren.add(new Muur(6,7,Richting.vertikaal));
muren.add(new Muur(6,10,Richting.vertikaal));
muren.add(new Muur(6,13,Richting.vertikaal));
muren.add(new Muur(6,16,Richting.vertikaal));
muren.add(new Muur(6,19,Richting.vertikaal));
muren.add(new Muur(6,22,Richting.vertikaal));
muren.add(new Muur(9,1,Richting.vertikaal));
muren.add(new Muur(9,4,Richting.vertikaal));
muren.add(new Muur(9,7,Richting.vertikaal));
muren.add(new Muur(9,10,Richting.vertikaal));
muren.add(new Muur(9,13,Richting.vertikaal));
muren.add(new Muur(9,16,Richting.vertikaal));
muren.add(new Muur(9,19,Richting.vertikaal));
muren.add(new Muur(9,22,Richting.vertikaal));
muren.add(new Muur(12,1,Richting.vertikaal));
muren.add(new Muur(12,4,Richting.vertikaal));
muren.add(new Muur(12,7,Richting.vertikaal));
muren.add(new Muur(12,10,Richting.vertikaal));
muren.add(new Muur(12,13,Richting.vertikaal));
muren.add(new Muur(12,16,Richting.vertikaal));
muren.add(new Muur(12,19,Richting.vertikaal));
muren.add(new Muur(12,22,Richting.vertikaal));
muren.add(new Muur(15,1,Richting.vertikaal));
muren.add(new Muur(15,4,Richting.vertikaal));
muren.add(new Muur(15,7,Richting.vertikaal));
muren.add(new Muur(15,10,Richting.vertikaal));
muren.add(new Muur(15,13,Richting.vertikaal));
muren.add(new Muur(15,16,Richting.vertikaal));
muren.add(new Muur(15,19,Richting.vertikaal));
muren.add(new Muur(15,22,Richting.vertikaal));
muren.add(new Muur(18,1,Richting.vertikaal));
muren.add(new Muur(18,4,Richting.vertikaal));
muren.add(new Muur(18,7,Richting.vertikaal));
muren.add(new Muur(18,10,Richting.vertikaal));
muren.add(new Muur(18,13,Richting.vertikaal));
muren.add(new Muur(18,16,Richting.vertikaal));
muren.add(new Muur(18,19,Richting.vertikaal));
muren.add(new Muur(18,22,Richting.vertikaal));
muren.add(new Muur(21,1,Richting.vertikaal));
muren.add(new Muur(21,4,Richting.vertikaal));
muren.add(new Muur(21,7,Richting.vertikaal));
muren.add(new Muur(21,10,Richting.vertikaal));
muren.add(new Muur(21,13,Richting.vertikaal));
muren.add(new Muur(21,16,Richting.vertikaal));
muren.add(new Muur(21,19,Richting.vertikaal));
muren.add(new Muur(21,22,Richting.vertikaal));
muren.add(new Muur(24,1,Richting.vertikaal));
muren.add(new Muur(24,4,Richting.vertikaal));
muren.add(new Muur(24,7,Richting.vertikaal));
muren.add(new Muur(24,10,Richting.vertikaal));
muren.add(new Muur(24,13,Richting.vertikaal));
muren.add(new Muur(24,16,Richting.vertikaal));
muren.add(new Muur(24,19,Richting.vertikaal));
muren.add(new Muur(24,22,Richting.vertikaal));
}
/**
* Een muur moet gebouwd kunnen worden en op dat moment van kleur veranderen
*
* @param x de x coordinaat van de muur die ik bouw
* @param y de y coordinaar van de muur die ik bouw
*
*/
public void bouwMuur(int x,int y) {
for(Muur m: muren) {
if(m.posMuur(x,y)){
if (!m.isGeselecteerd()) {
m.selecteer();
}
}
}
}
public void bouwKamer() {
for (Kamer k : kamers) {
if(muurB == true) {
k.selecteerK();
}
}
}
public boolean muurB() {
for(Muur mu:muren) {
if(mu.isGeselecteerd()==true) {
if(ka.geefX() == mu.geefX() && ka.geefY() - 1 == mu.geefY()){
muurB = true;
}
}
}
return muurB;
}
/*public void bouwKamer() {
int kx;
int ky;
int mx;
int my;
boolean g;
for(Kamer k:kamers) {
kx = k.geefX();
ky = k.geefY();
for(Muur m : muren) {
mx = m.geefX();
my = m.geefY();
g = m.isGeselecteerd();
if(g == true) {
if(kx +2 == mx && ky == my){
if(kx == mx && ky -1 == my){
if(kx -1 == mx && ky == my){
if(kx == mx && ky +2 == my){
k.selecteerK();
}
}
}
}
}
}
}
}
* public void bouwKamer() {
int mux;
int muy;
for(Muur m: muren) {
mux = m.geefX();
muy = m.geefY();
for(Kamer k:kamers) {
if (k.geefX()+2 == mux && k.geefX() - 1== mux && k.geefY()-1 == muy&& k.geefY() + 2 == muy){
k.selecteerK();
}
}
}
}
*/
/*public void verandernaarPlayer2() {
player1 = false;
player2 = true;
}
public void verandernaarPlayer1() {
player1 = true;
player2= false;
}
*/
/**
* Geef de lijst weer met alle muren
* @return alle muren
*/
public Iterator<Muur> geefMuren() {
return muren.iterator();
}
/**
* Geef de lijst weer met alle kamers
* @return alle kamers
*/
public Iterator<Kamer> geefKamers() {
return kamers.iterator();
}
/**
* geef de grootte van het spelbord
* @return de grootte van het spelbord
*/
public int geefGrootte(){
return grootteSpel;
}
}
Code:
import java.awt.*;
import java.util.*;
/**
* Write a description of class View here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class View extends Canvas
{
// instance variables - replace the example below with your own
private Spelbord model;
private int grootte;
/**
* Constructor for objects of class View
*/
public View(Spelbord model)
{
// initialise instance variables
this.model = model;
}
public void paint(Graphics gr) {
int b = getWidth()/model.geefGrootte();
int h = getHeight()/model.geefGrootte();
grootte = Math.min(b,h);
gr.setColor(new Color(200,200,200));
gr.fillRect(0,0,model.geefGrootte()*grootte,model.geefGrootte()*grootte);
Iterator<Muur> muren = model.geefMuren();
Iterator<Kamer> kamers = model.geefKamers();
while(muren.hasNext()) {
tekenM(muren.next(),gr);
}
while(kamers.hasNext()) {
tekenK(kamers.next(),gr);
}
}
protected void tekenM(Muur m, Graphics gr) {
if(m.isGeselecteerd()==true) {
gr.setColor(Color.RED);
/*if(model.geefPlayer1() == true){
gr.setColor(Color.RED);
model.verandernaarPlayer2();
}
else if(model.geefPlayer2() == true) {
gr.setColor(Color.BLUE);
model.verandernaarPlayer1();
}
*/
}
else {
gr.setColor(Color.GREEN);
}
int br=1;
int ho=1;
if(m.geefRichting()== Richting.horizontaal) {
br=m.geefLengte();
ho=1;
}
else {
br=1;
ho=m.geefLengte();
}
gr.fillRect(m.geefX()*grootte,m.geefY()*grootte,br*grootte,ho*grootte);
}
protected void tekenK(Kamer k, Graphics gr) {
if(k.isKgeselecteerd() == true) {
k.veranderKaKleur(Color.RED);
}
gr.setColor(k.geefKleur());
gr.fillRect(k.geefX()*grootte,k.geefY()*grootte,k.grootte()*grootte,k.grootte()*grootte);
}
/**
*
*/
public int welkeX(int xopscherm) {
return xopscherm / grootte;
}
public int welkeY(int yopscherm) {
return yopscherm / grootte;
}
}
Code:
import java.awt.event.*;
/**
* Write a description of class Controller here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Controller implements MouseListener
{
private Spelbord bord;
private View view;
/**
* Constructor for objects of class Controller
*/
public Controller(Spelbord bo, View vi)
{
bord = bo;
view = vi;
view.addMouseListener(this);
}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
x = view.welkeX(x);
y = view.welkeY(y);
bord.bouwMuur(x,y);
view.repaint();
}
public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {
}
Met vriendelijke groeten, en alvast bedankt!