BlackDevil-619
Legacy Member
Hey forumleden,
Als periode opdracht moeten we een spel maken, samen met men partner hebben we Slangen & Ladders.
Ik zit momenteel redelijk vast bij volgende punten.
Even een kleine toelichting op voorhand, het gehele project moet gemaakt worden volgens het modelview principe.
- De klasse pion laten erven van de klasse speler, waarbij de spelers variëren van 2 tot 4 dus ook de pion en aan iedere pion op voorhand een bepaalde kleur aan vast hangt.
Daarbij zitten we momenteel ook met het probleem dat er in de run klasse verwacht wordt een cijfer mee te geven van het aantal pionnen.
- Ook moet het hele spel grafisch zijn en eigenlijk ook enkel werken in de view.
Daarbij zitten we met het probleem dat de buttons die we momenteel hebben op ons start scherm.
De knoppen hangen bovenaan en zouden we eigenlijk op maat moeten kunnen plaatsen op het startscherm.
Dit door middel van een afbeelding van hoe de knop er moet uitzien op de knop te plaatsen
- Op het spelscherm zitten we met het probleem dat we geen horizontale lijnen krijgen om een overzicht te houden tussen de vakken.
Ook wilden we de 4 spelers telkens in een hoek zetten, een icoontje van een pion met daarnaast hun opgegeven naam. In het midden wilde we een afbeelding frame plaatsen dat een afbeelding toont van de geworpen zijde van een dobbelsteen.
Het grootste probleem momenteel is eigenlijk hoe we onze slangen en ladders op het spelbord moeten plaatsen. Wij hebben afbeeldingen, maar nu is de vraag hoe we deze op het spelbord moeten plaatsen.
Bedankt voor mee met ons te denken.
Als periode opdracht moeten we een spel maken, samen met men partner hebben we Slangen & Ladders.
Ik zit momenteel redelijk vast bij volgende punten.
Even een kleine toelichting op voorhand, het gehele project moet gemaakt worden volgens het modelview principe.
- De klasse pion laten erven van de klasse speler, waarbij de spelers variëren van 2 tot 4 dus ook de pion en aan iedere pion op voorhand een bepaalde kleur aan vast hangt.
Daarbij zitten we momenteel ook met het probleem dat er in de run klasse verwacht wordt een cijfer mee te geven van het aantal pionnen.
Code:
public class Spel {
private LinkedList<Speler> spelers;
private Speler aanZetSpeler;
private boolean gedaan = false;
int huidigPionNummer = 1;
private Pion[] pionnen;
public Spel(int aantalPionnen){
pionnen = new Pion[aantalPionnen];
for (int i = 0; i < aantalPionnen; i++) {
pionnen[i] = new Pion();
}
}
public Pion geefHuidigePion ()
{ return pionnen[huidigPionNummer];
}
public void resetSpel(){
spelers.clear();
gedaan= false;
}
public void maakSpeler(String naam,Pion pion){//speler aanmaken
Speler speler = new Speler();
spelers.add(0,speler);
}
public int gooien(){//dobbelsteen gooien
return Dobbelsteen.werpDobbelsteen();
}
public int[][] maakBord(){
SpelBord bord= new SpelBord();
return bord.getBord();
}
}
Code:
public class Speler {
ArrayList<Speler> spelers = new ArrayList<Speler>();
private String naam;
//private Pion pion;
/* public Speler(String naam,Pion pion){
this.pion=pion;
this.naam=naam;
}*/
public String toString(){
return naam;
}
public String getNaam(){
return naam;
}
public void SetNaam(){
this.naam=naam;
}
}
Code:
public class Pion {
public int positie = 1;
private Icon afbeeldingpion;
private String[] kleuren = {"Rood", "Blauw", "Geel", "Groen"};
//TODO: pion maken + laten werken
public class maakPion {
protected int positie;
public maakPion(int kleur, int positie) {
this.positie = positie;
}
public void verplaatsNaar(int nieuwePositie) {
positie = +nieuwePositie;
}
}
public String getkleuren(int kleur) {
return kleuren[kleur];
}
public int getPositie() {
return this.positie;
}//positie van pion ophalen
public void setPositie(int nieuwePositie) {
this.positie = nieuwePositie;
}
}
Code:
public class Dobbelsteen {
private static final Random random = new Random();
public static int werpDobbelsteen() {
return random.nextInt(6) + 1;
}
}
Code:
public class RunSpel {
public static void main(String[] args) {
Spel spel= new Spel(4);
new StartScherm(spel);
}
}
Code:
public class SpelBord {
private static int bord[][] = {
{100, 99, 98, 97, 96, 95, 94, 93, 92, 91},
{81, 82, 83, 84, 85, 86, 87, 88, 89, 90},
{80, 79, 78, 77, 76, 75, 74, 73, 72, 71},
{61, 62, 63, 64, 65, 66, 67, 68, 69, 70},
{60, 59, 58, 57, 56, 55, 54, 53, 52, 51},
{41, 42, 43, 44, 45, 46, 47, 48, 49, 50},
{40, 39, 38, 37, 36, 35, 34, 33, 32, 31},
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30},
{20, 19, 18, 17, 16, 15, 14, 13, 12, 11},
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
};
public int[][] getBord() {
return bord;
}
}
- Ook moet het hele spel grafisch zijn en eigenlijk ook enkel werken in de view.
Daarbij zitten we met het probleem dat de buttons die we momenteel hebben op ons start scherm.
De knoppen hangen bovenaan en zouden we eigenlijk op maat moeten kunnen plaatsen op het startscherm.
Dit door middel van een afbeelding van hoe de knop er moet uitzien op de knop te plaatsen
Code:
public class StartScherm extends JFrame {
private JButton tweeSpelers;
private JButton info;
private JButton drieSpelers;
private JButton vierSpelers;
private JLabel afbeeldingTitel;
private JPanel knoppen;
private Spel controller;
public StartScherm(Spel controller) {
this.controller = controller;
initialiseerComponenten();
layoutComponenten();
maakeventhandlers();
toonFrame();
setSize(800, 800);
}
private void initialiseerComponenten() {
tweeSpelers = new JButton("Twee Spelers");
drieSpelers = new JButton("Drie Spelers");
vierSpelers = new JButton("Vier Spelers");
info = new JButton("Info");
afbeeldingTitel = new JLabel();
knoppen = new JPanel(new FlowLayout());
}
private void layoutComponenten() {
add(afbeeldingTitel, BorderLayout.CENTER);
add(knoppen, BorderLayout.CENTER);
JPanel pnl = new JPanel();
pnl.add(knoppen.add(info));
pnl.add(knoppen.add(tweeSpelers));
pnl.add(knoppen.add(drieSpelers));
pnl.add(knoppen.add(vierSpelers));
add(pnl, BorderLayout.CENTER);
}
//TODO: spelers aanmaken bij drukken op de knop + defaultcloseoperation op tweede frame zetten
private void maakeventhandlers() {
tweeSpelers.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SpelScherm scherm = new SpelScherm(controller);//open het spelscherm voor tweespelers
scherm.setVisible(true);
}
});
drieSpelers.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SpelScherm scherm = new SpelScherm(controller);//open het spelscherm voor driespelers
scherm.setVisible(true);
}
});
vierSpelers.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SpelScherm scherm = new SpelScherm(controller);//open het spelscherm voor vierspelers
scherm.setVisible(true);
}
});
info.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Info info = new Info();
info.setVisible(true);
}
});
}
private void toonFrame() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(this); //centreren op scherm
setVisible(true);
}
}
- Op het spelscherm zitten we met het probleem dat we geen horizontale lijnen krijgen om een overzicht te houden tussen de vakken.
Ook wilden we de 4 spelers telkens in een hoek zetten, een icoontje van een pion met daarnaast hun opgegeven naam. In het midden wilde we een afbeelding frame plaatsen dat een afbeelding toont van de geworpen zijde van een dobbelsteen.
Het grootste probleem momenteel is eigenlijk hoe we onze slangen en ladders op het spelbord moeten plaatsen. Wij hebben afbeeldingen, maar nu is de vraag hoe we deze op het spelbord moeten plaatsen.
Code:
public class SpelScherm extends JFrame {
private JPanel knoppen;
private JButton gooiDobbelsteen;
private JButton stop;
private JLabel dobbelsteen;
private JLabel speler1;
private JLabel speler2;
private JLabel speler3;
private JLabel speler4;
private Spel controller;
private static final int AANTAL = 10;
private JLabel[][] vakjes = new JLabel[AANTAL][AANTAL];
public SpelScherm(Spel controller) {
super("Slangen en Ladders");
this.controller = controller;
initialiseerComponenten();
layoutComponenten();
maakeventhandlers();
toonFrame();
setSize(800, 800);
}
private void initialiseerComponenten() {
gooiDobbelsteen = new JButton("Gooi Dobbelsteen");
stop = new JButton("stop het programma");
//TODO:ervoor zorgen dat afbeelding van dobbeslteen in de label voorkomst
speler1 = new JLabel("Speler 1");
speler2 = new JLabel("Speler 2");
speler3 = new JLabel("Speler 3");
speler4 = new JLabel("Speler 4");
dobbelsteen = new JLabel();
knoppen = new JPanel(new FlowLayout());
//bord aanmaken moet er nog voor zorgen dat even en oneven een andere kleur krijgen
for (int i = 0; i < controller.maakBord().length; i++) {
for (int j = 0; j < controller.maakBord()[i].length; j++) {
vakjes[i][j] = new JLabel();
vakjes[i][j].setText(String.valueOf(controller.maakBord()[i][j]));
System.out.println(vakjes[i][j].getText());
}
}
}
private void layoutComponenten() {
JPanel rechterPanel = new JPanel(new BorderLayout(10, 10));
JPanel spelers = new JPanel(new GridLayout(7, 2, 10, 10));
spelers.add(speler1, BorderLayout.EAST);
spelers.add(speler2, BorderLayout.EAST);
spelers.add(speler3, BorderLayout.EAST);
spelers.add(speler4, BorderLayout.EAST);
spelers.add(dobbelsteen, BorderLayout.EAST);
JPanel center = new JPanel(new GridLayout(10, 10, 0, 0));//
//labels in bord zetten plus achtergrond geven
for (int i = 0; i < controller.maakBord().length; i++) {
for (int j = 0; j < controller.maakBord()[i].length; j++) {
if ((j % 2) == 0) {
System.out.println(j);
vakjes[i][j].setBackground(Color.ORANGE);
vakjes[i][j].setOpaque(true);
center.add(vakjes[i][j]);
} else {
vakjes[i][j].setBackground(Color.YELLOW);
vakjes[i][j].setOpaque(true);
center.add(vakjes[i][j]);
}
}
}
JPanel pnl = new JPanel();
add(pnl, BorderLayout.CENTER);
JPanel knoppenPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
knoppenPanel.add(gooiDobbelsteen);
knoppenPanel.add(stop);
rechterPanel.add(knoppenPanel, BorderLayout.SOUTH);
rechterPanel.add(spelers, BorderLayout.NORTH);
add(rechterPanel, BorderLayout.EAST);
add(center, BorderLayout.CENTER);
}
//TODO:spelers aanmaken(for loop)
private void maakeventhandlers() {
gooiDobbelsteen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
controller.gooien();
dobbelsteen.setText(String.valueOf(controller.gooien()));
}
});
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
private void toonFrame() {
// pack();
setLocationRelativeTo(this); //centreren op scherm
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
Bedankt voor mee met ons te denken.
