OOjava spelletje kamers bouwen/vierkantjes maken vast

Status
Niet open voor verdere reacties.

thoka1

Gebruiker
Lid geworden
26 nov 2011
Berichten
42
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:

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!
 
Er mist een static void main je in programma en verder is er geen JPanel waarom het canvas getekend wordt.

Verder een tip (kan niet teveel in je code duiken aangezien ik zelf met weinig tijd zit).

Is het niet zo dat een kamer muren heeft en het spel slechts kamers heeft. Op die manier heb je dus in je spel class enkel een array met kamers staan waardoor het een stuk makkelijker wordt om de neighbours te checken. Als er bijvoorbeeld op kamer x, muur boven gedrukt wordt, weet je dat je dus dat de kamer er boven (indien nog niet getekend), getekend moet worden. daarna kan je een check doen of alle 4 de muren binnen een kamer getekend (hoe je het ook wilt noemen) zijn en hem dus rood of groen maken.
 
verder nog een tip, je maakt de kamers (en muren) hardcoded aan. dit zou je ook door een simpele for of dubbele for lus kunnen doen aangezien je steeds met 3 verhoogt.
 
En wat precies is hardcoded? :p Ik heb ondertussen een andere oplossing uitgevoerd waardoor ik minder andere dingen moest veranderen!
 
Met hardcoded bedoel ik mee dat je 100 regels gebruikt om de kamers te declareren terwijl het ook dynamisch kan. Je zou die 100 regels kunnen vervangen door 10 regels. Is het verder nog gelukt? Zo nee heb ik nu wel de tijd om wat dieper in he code te kijken
 
Ik heb uiteindelijk hulp gevraagd aan mijn docent. Voorlopig heb ik het op volgende manier dus opgelost:

Code:
public void bouwMuur(int x,int y) {
        
        for(Muur m: muren) {
            
            if(m.posMuur(x,y)){
                if (!m.isGeselecteerd()) {
                    
                  m.selecteer();
                  bouwKamer(x,y);
                  
                }
            }
        }
  
    }







public void bouwKamer(int x, int y) {
        int aantalBoven=0;
        int aantalOnder=0;
        int aantalLinks=0;
        int aantalRechts=0;
        

        for(Muur m: muren) {
    
            if(m.posMuur(x,y-3) && m.isGeselecteerd()){
               aantalBoven++;
            }
            if(m.posMuur(x+2,y-2) && m.isGeselecteerd()){
               aantalBoven++;
            }
            if(m.posMuur(x-1,y-2) && m.isGeselecteerd()){
               aantalBoven++;
            }
            
            if (aantalBoven == 3) {
           for(Kamer k : kamers) {
               if(k.geefX()== x && k.geefY() == y-2) {
                  k.selecteerK();
              }
           }    
           }
        }
        
        for(Muur m: muren) {
            if(m.posMuur(x+2,y+1) && m.isGeselecteerd()){
               aantalOnder++;
            }
            if(m.posMuur(x-1,y+1) && m.isGeselecteerd()){
               aantalOnder++;
            }
            if(m.posMuur(x,y+3) && m.isGeselecteerd()){
               aantalOnder++;
            }
        }
        if (aantalOnder == 3) {
           for(Kamer k : kamers) {
               if(k.geefX()== x && k.geefY() == y+1) {
                  k.selecteerK();
              }
           }    
        }
        
        for(Muur m: muren) {
            if(m.posMuur(x-2,y-1) && m.isGeselecteerd()){
               aantalLinks++;
            }
            if(m.posMuur(x-2,y+2) && m.isGeselecteerd()){
               aantalLinks++;
            }
            if(m.posMuur(x-3,y) && m.isGeselecteerd()){
               aantalLinks++;
            }
        }
        if (aantalLinks == 3) {
           for(Kamer k : kamers) {
               if(k.geefX()== x-2 && k.geefY() == y) {
                  k.selecteerK();
              }
           }    
        }
        
        for(Muur m: muren) {
            if(m.posMuur(x+1,y-1) && m.isGeselecteerd()){
               aantalRechts++;
            }
            if(m.posMuur(x+3,y) && m.isGeselecteerd()){
               aantalRechts++;
            }
            if(m.posMuur(x+1,y+2) && m.isGeselecteerd()){
               aantalRechts++;
            }
        }
        if (aantalRechts == 3) {
           for(Kamer k : kamers) {
               if(k.geefX()== x+1 && k.geefY() == y) {
                  k.selecteerK();
              }
           }    
        }
    }

De main klasse heb ik ook, daar heb ik gewoon geen code van gegeven de vorige keer!

Ik ga nu nog werken aan hetvolgende:

Het spel gaat met 2 spelers, dus daar moet ik nog even over nadenken. Ik moet ook nog even nagaan hoe ik hetvolgende ga oplossen. Wanneer ik klik onthoudt hij de coordinaten van mijn klik en gebruikt deze. Maar mijn muur neemt nl 2 coordinaten in beslag, en dan werkt mijn code dus niet meer wanneer ik op het 2de vakje van de muur bv klik, als je snapt wat ik bedoel.

Dus hier ga ik nog even over nadenken.

In ieder geval bedankt voor de hulp, misschien sta ik hier binnen een paar dagen terug :p
 
Kan iemand mij zeggen waarom hetvolgende niet werkt. Ik geef een deel van de methode bouwkamer.

Het probleem is dat dit enkel en alleen werkt als de coördinaat waar ik met mijn muis klik overeen komt met de coordinaat van mijn muur. Daarom heb ik in mijn methode een stukje ingebouwd dat nagaat of de coordinaat waar ik druk de andere coordinaat van de muur is. Indien van wel, gaan we verder met een nieuwe coordinaat namelijk xcoor. Wanneer ik de debugger gebruik klopt dit perfect en werkt dit.

Ik geef een voorbeeld. Ik heb 3 muren aangeklikt rond mijn kamer. Dan start ik de debugger en klik op muur (1,3). Maar ik klik wel op coordinaat (2,3) waar mijn muur ook staat. De debugger toont mij dat xcoor mooi veranderd naar 1. Ik wil met deze verder. Voor de eerste test veranderd hij mooi aantalboven naar 1 dus dat werkt, maar bij de volgende 2 testen doet hij niks meer terwijl deze muren toch ook geselecteerd zijn?

Code:
public void bouwKamer(int x, int y) {
        int aantalBoven=0;
        int aantalOnder=0;
        int aantalLinks=0;
        int aantalRechts=0;
        

        for(Muur m: muren) {
            int xcoor = x;
            int ycoor = y;
            int xcoo = m.geefX();
            int ycoo = m.geefY();
            
            if(xcoo == xcoor -1) {
                xcoor = xcoor -1;
            }

            if(m.posMuur(xcoor,y-3) && m.isGeselecteerd()){
               aantalBoven++;
            }
            if(m.posMuur(xcoor+2,y-2) && m.isGeselecteerd()){
               aantalBoven++;
            }
            if(m.posMuur(xcoor-1,y-2) && m.isGeselecteerd()){
               aantalBoven++;
            }

  if (aantalBoven == 3) {
            for(Kamer k : kamers) {
               if(k.geefX()== xcoor && k.geefY() == y-2) {
                  k.selecteerK();
                  k.maakactiefK();
              }
             }    
        }
        }

alvast bedankt
 
Laatst bewerkt:
zou je de code willen raren/7zippen of whatever ? dan kan ik er stap voor stap doorlopen
 
Het probleem is dat het mij niet lukt, ik druk beheer bijlagen, ik upload het, hij is bezig maar dan stopt het en verschijnt er niks?
 
Ik vindt het erg lastig debuggen. Ik heb het idee dat je het overbodig ingewikkeld voor jezelf gemaakt hebt. Het selecteren van de muren gaat voor zover ik kan zien perfect, daar gaat niks fout mee alleen de koppeling met de muur en de kamers gaat het fout mee. Bij mij is het zo namelijk dat het soms voorkomt dat de muren goed gekleurd worden alleen als alle muren van een kamer ingekleurd zijn, deze soms niet ingekleurd wordt. Zou je het niet zo kunnen maken dat wanneer een muur ingekleurd is, meteen een teller in de kamer ++'ed en dat wanneer deze teller 4 is, deze ingekleurd wordt ? Volgensmij heb je het op dit moment zo gemaakt dat alles afgehangt van de coordinaten van de muis. Je hoeft feitelijk maar 1x met coordinaten te werken en dat is wanneer er geklikt wordt op een muur, wanneer de click uitgevoerd is, kan je gewoon met de coordinaat van de muur werken (neem gewoon standaard het middelpunt van de muur en reken daar mee verder).
 
En hoe zie je dit concreet? Een teller maken in de klasse Kamer. Dus ook de ArrayList van het spelbord ophalen in de kamer en zo iets dan proberen?
 
Nou het heeft even geduurd maar heb het voor elkaar :)

wat ik heb gedaan:

de logica dat in bouwKamer stond heb ik in z`n geheel verwijderd (sorry ik snapte echt niet wat je daar precies deed) en vervangen door het volgende:

[cpp]

public void bouwKamer(int x, int y) {


for (Muur m : muren){
if (m.posMuur(x, y)){
System.out.println("Muur gevonden " + m.geefX() + " " +m.geefY());

for (Kamer k : kamers){
if (k.muurInKamer(m)){
k.addMuur();
if (k.muurCount == 4){
k.selecteerK();
k.maakactiefK();
}
System.out.println("In kamer");
}
}
}
}
}

[/cpp]

wat ik dus doe is kijken of een muur in een kamer voorkomt. wanneer dit het geval is wordt er een counter verhoogt met 1. wanneer het getal 4 bereikt is, is de kamer dus "vol" en mag die ingekleurd worden.

de methode in Kamer:

[cpp]

public int muurCount = 0;

public void addMuur(){
muurCount++;
}

public boolean muurInKamer(Muur m){

int muurX = m.geefX();
int muurY = m.geefY();

int kamerXmin = geefX() -1;
int kamerXmax = geefX() + grootte;
int kamerYmin = geefY() -1;
int kamerYmax = geefY() + grootte;

boolean returnValue = (
(muurX >= kamerXmin )
&&
(muurX <= kamerXmax )
&&
(muurY >= kamerYmin )
&&
(muurY <= kamerYmax )
);

return returnValue;

}


[/cpp]


ik heb er overbodig veel "tijdelijke" variabelen in gezet vanwege het debuggen, dit kan je uiteraard zelf even aanpassen om het netter te maken.

Verder nog een tip: het is met dat spel niet echt relevant wie de muur plaatst, enkel degene die de laatste muur plaatst. Het spel zou er een stuk netter uit zien wanneer de muren gewoon zwart waren en de kamers alleen ingekleurd worden. Wat je zou kunnen doen om aan te geven welke speler aan de beurt was, is simpelweg een pijltje ofzo voor de speler plaatsen.


http://dl.dropbox.com/u/3380837/helpmij.rar
 
Amai, daar heb je precies heel wat werk in gestoken. Ik heb het geanalyseerd maar begrijp 1 ding niet goed, waar doe je effectief de controle dat de muur geselecteerd is?

Nu vind ik het wel jammer dat ik de code op zich niet kan gebruiken.( had nooit gedacht dat je het zo ging uitwerken). Het programma dat ik schrijf is voor een taak voor mijn opleiding. Ik mag stukken code overnemen met bron, en dat is geen probleem, maar dit gaat over de essentie van het spel en als ik deze code ga schrijven heb ik het niet zelf geschreven. Snap je? Want ik apprecieer je hulp enorm!

Want jouw oplossing is natuurlijk stukken beter en vindt het daarom wel jammer dat ik ze niet kan gebruiken :(.

bedankt trouwens voor de tip beneden aan je bericht, kga het eens bekijken!

edit: Ik heb het even aangepast zodat nu de speler die aan de beurt is in het vet wordt geschreven.
 
Laatst bewerkt:
wat ik feitelijk gedaan heb is je methode posKamer(int xco, int yco) in je Kamer class, enigsinds veranderd zodat het werkt (je zat dus al heel er op goede weg).

verder:

if (m.posMuur(x, y)) die haalt de geselecteerde muur op.

vervolgens loop ik door alle kamers heen om te kijken in welke kamers deze muur voor komt. Komt de muur in de kamer voor, dan verhoogt die de counter met 1. je zou het nog verder kunnen optimaliseren door een break er in te zetten aangezien 1 muur maximaal in 2 kamers kan bevinden.

de regels die ik toegevoegt heb, is niks anders dan een samenstelling van methodes die je al gemaakt had dus wat dat betreft is het geen nieuwe code en zou je het kunnen gebruiken toch ? gezien de hoeveelheid werk dat je er in hebt gestoken denk ik niet dat je docent het bezwaarlijk zal vinden. immers, je was er al bijna alleen werkte jou aloritme niet zoals het zou moeten. Wat ik uit jou algoritme begrijp is dat je precies hetzelfde wilt doen als dat ik nu gedaan heb. Verder kan wat ik ik gemaakt heb, nog verder geoptimaliseerd worden want volgensmij heb je al een manier waarmee je kan uitlezen welke muur geselecteerd is ( m.IsGeselecteerd() ?? ).
 
Ik ga er eens over nadenken :p Maandag moet ik de taak opsturen.
 
logische fout kan zijn u gaat de segmenten van 0 plaatsen op het bord merk op als je dan
|-|
|_|
stel dat de - boven muur is en je de muur in het midden vult zullen de vlakken geen aanduiden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan