Frederik.89
Legacy Member
Hallo,
Als taak voor school heb ik het spel Pac-Xon gekozen. Dit moeten we in BLUEJ programmeren.
Pac-xon spel - FunnyGames.be
Ik heb in feite niet zoveel java kennis, sinds dit jaar krijgen we pas java (hogeschool).
Mijn 2 vragen (heb al verschillende dagen er tijd ingestoken maar zit nu toch wel vast)
- Hoe kan ik het veld achter mijn 'Pacman' speler kleuren in het licht blauw (CYAN). Ik heb al geprobeerd met mijn huidigeX en huidigeY te werken, maar krijg er geen goed resultaat van.
- Hoe kan ik ervoor zorgen dat de controller op het zwart veld bij het aanraken van een toets blijft gaan en op het blauw ingesloten veld vakje per vakje gaat? (Heb al gewerkt met booleans zoals bv isKleurbaar en dan dit neergeschreven bij de beweging van de pacman maar zonder enig resultaat).
Als ik dees 2 vragen weet kan ik verder, heb al veel geprobeerd
.
Het is de bedoeling om wegwijs te geraken.
Code (View):
Code (Spelbord):
Code (Controller):
Het spel van wat ik tot nu toe al heb:
https://rapidshare.com/files/228893149/Pac-Xon_v1.0.rar
Alvast bedankt!
Frederik
Als taak voor school heb ik het spel Pac-Xon gekozen. Dit moeten we in BLUEJ programmeren.
Pac-xon spel - FunnyGames.be
Ik heb in feite niet zoveel java kennis, sinds dit jaar krijgen we pas java (hogeschool).
Mijn 2 vragen (heb al verschillende dagen er tijd ingestoken maar zit nu toch wel vast)
- Hoe kan ik het veld achter mijn 'Pacman' speler kleuren in het licht blauw (CYAN). Ik heb al geprobeerd met mijn huidigeX en huidigeY te werken, maar krijg er geen goed resultaat van.
- Hoe kan ik ervoor zorgen dat de controller op het zwart veld bij het aanraken van een toets blijft gaan en op het blauw ingesloten veld vakje per vakje gaat? (Heb al gewerkt met booleans zoals bv isKleurbaar en dan dit neergeschreven bij de beweging van de pacman maar zonder enig resultaat).
Als ik dees 2 vragen weet kan ik verder, heb al veel geprobeerd
.Het is de bedoeling om wegwijs te geraken.
Code (View):
Code:
import java.awt.*;
import javax.swing.ImageIcon;
import java.awt.event.*;
import java.awt.geom.*;
public class View extends Canvas
{
private Spelbord spelbord;
private int b, h; // breedte en hoogte van elk vakje
private int marge;
private Image buffer;
/**
* Constructor for objects of class View
*/
public View(Spelbord spelbord)
{
this.spelbord = spelbord;
b = 0;
h = 0;
marge = 25;
}
public void paint(Graphics g)
{
if (buffer == null ||
buffer.getWidth(this) < getWidth() ||
buffer.getHeight(this) < getHeight()
) {
buffer = createImage(getWidth(), getHeight());
}
// teken op de buffer ipv op de canvas
teken(buffer.getGraphics());
// teken de buffer op de canvas
g.drawImage(buffer, 0, 0, this);
}
public void update(Graphics g)
{
// standaard: eerst wissen, dan tekenen
// nu nog alleen tekenen
paint(g);
}
private void teken(Graphics g)
{
g.clearRect(0,0, getWidth(), getHeight());
b = getWidth()/spelbord.getBreedte();
h = (getHeight()-marge)/spelbord.getHoogte();
g.setColor(Color.BLACK);
g.drawString("Aantal levens: " + spelbord.getLevens() + " " + "Score: " + spelbord.getPunten() + " " + "Progressie: " + spelbord.getProgressie() + "/" + "80%",
10, 15);
for (int i=0; i < spelbord.getBreedte(); i++)
{
for (int j=0; j < spelbord.getHoogte(); j++)
{
Voorwerp vw = spelbord.getVoorwerpOp(i, j);
if (vw == null)
{
g.setColor(Color.BLACK);
g.fillRect(i*b,j*h+marge, b,h);
}
else if (vw instanceof Omkadering)
{
tekenOmkadering(g, i*b,j*h+marge);
}
else if (vw instanceof Speler)
{
tekenSpeler(g, i*b,j*h+marge);
}
else if (vw instanceof Inbeslagname)
{
tekenInbeslagname(g, i*b,j*h+marge);
}
else if (vw instanceof Spook)
{
tekenSpook(g, i*b,j*h+marge);
}
g.setColor(Color.WHITE);
g.drawRect(i*b,j*h+marge, b,h);
}
}
// Komende 4 alineas zijn voor de omkadering te tekenen
for (int i=0; i < spelbord.getBreedte(); i++)
{
for (int j=29; j < spelbord.getHoogte(); j++)
{
Voorwerp vw = spelbord.getVoorwerpOp(i, j);
if (vw == null)
{
tekenOmkadering(g, i*b,j*h+marge);
}
g.setColor(Color.WHITE);
g.drawRect(i*b,j*h+marge, b,h);
}
}
for (int i=29; i < spelbord.getBreedte(); i++)
{
for (int j=0; j < spelbord.getHoogte(); j++)
{
Voorwerp vw = spelbord.getVoorwerpOp(i, j);
if (vw == null)
{
tekenOmkadering(g, i*b,j*h+marge);
}
g.setColor(Color.WHITE);
g.drawRect(i*b,j*h+marge, b,h);
}
}
for (int i=0; i < spelbord.getBreedte(); i++)
{
int j = 0;
Voorwerp vw = spelbord.getVoorwerpOp(i, j);
if (vw == null)
{
tekenOmkadering(g, i*b,j*h+marge);
}
g.setColor(Color.WHITE);
g.drawRect(i*b,j*h+marge, b,h);
}
for (int j=0; j < spelbord.getHoogte(); j++)
{
int i = 0;
Voorwerp vw = spelbord.getVoorwerpOp(i, j);
if (vw == null)
{
tekenOmkadering(g, i*b,j*h+marge);
}
g.setColor(Color.WHITE);
g.drawRect(i*b,j*h+marge, b,h);
}
}
private void tekenOmkadering(Graphics g, int x, int y)
{
g.setColor(Color.BLUE);
g.fill3DRect(x,y, b, h,true);
}
private void tekenInbeslagname(Graphics g, int x, int y)
{
g.setColor(Color.CYAN);
g.fillRect(x,y, b, h);
}
private void tekenSpeler(Graphics g, int x, int y)
{
g.setColor(Color.YELLOW);
g.fillOval(x,y, b, h);
}
private void tekenSpook(Graphics g, int x, int y)
{
g.setColor(Color.RED);
g.fillOval(x,y, b, h);
}
}
Code (Spelbord):
Code:
import javax.swing.JOptionPane;
public class Spelbord
{
private Voorwerp[][] rooster;
// private Level 1;
private int breedte, hoogte;
private int progressie, levens, punten;
private int huidigeX, huidigeY;
private Speler pac;
private Inbeslagname kleuren;
private boolean dood;
/**
* Constructor for objects of class Spelbord
*/
public Spelbord()
{
hoogte = 30;
breedte = 30;
rooster = new Voorwerp[breedte][hoogte];
rooster[15][12] = new Spook();
kleuren = new Inbeslagname();
pac = new Speler();
huidigeX = 0;
huidigeY = 0;
rooster[huidigeX][huidigeY] = pac;
progressie = 0;
levens = 3;
}
/**
* Geeft de breedte van het spelbord
*
* @return de breedte (in aantal vakjes)
*/
public int getBreedte() {
return breedte;
}
/**
* Geeft de hoogte van het spelbord
*
* @return de hoogte (in aantal vakjes)
*/
public int getHoogte() {
return hoogte;
}
/**
* welk voorwerp ligt er op vakje (x,y)?
*
* @param x de x-coordinaat van het gewenste vakje
* @param y de y-coordinaat van het gewenste vakje
* @return het voorwerp, null als er niks ligt
*/
public Voorwerp getVoorwerpOp(int x, int y) {
// implementatiebeslissing: fool proof maken
if (x < 0 || x >= breedte || y < 0 || y >= hoogte) return null;
return rooster[x][y];
}
/**
* Hoeveel procent heeft de speler al veroverd?
*
* @return de progressie
*/
public int getProgressie() {
return progressie;
}
/**
* Hoeveel levens heeft de speler?
*
* @return het aantal levens
*/
public int getLevens() {
return levens;
}
/**
* Hoeveel punten heeft de speler al behaald?
*
* @return het aantal punten
*/
public int getPunten() {
return punten;
}
// setters
public void rechts() {
beweeg(1,0);
}
public void links() {
beweeg(-1,0);
}
public void onder() {
beweeg(0,1);
}
public void boven() {
beweeg(0,-1);
}
private void GameOver () {
String options [] = {"Yes", "No"};
int option = JOptionPane.showOptionDialog(null, "Game Over !!" + "\n\n Play again?", "Pac-Xon v1.0 - GAME OVER", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
if (option == JOptionPane.YES_OPTION) {
NieuwSpel();
System.out.println ("Nieuw spel starten");
}
else {
System.exit (0);
}
}
private void NieuwSpel() {
}
private void beweeg(int dx, int dy) {
if (dood) return; // niks doen als het manneke dood is
int doelX = huidigeX + dx;
int doelY = huidigeY + dy;
// niet buiten het rooster lopen
if (doelX < 0) return;
if (doelX >= breedte) return;
if (doelY < 0) return;
if (doelY >= hoogte) return;
if (rooster[doelX][doelY] == null) {
if(rooster[doelX][doelY] == rooster[15][12]){
levens--;
if(levens<0){
GameOver();
}
return;
}
rooster[huidigeX][huidigeY] = null;
huidigeX = doelX;
huidigeY = doelY;
rooster[doelX][doelY] = pac;
}
else {
Voorwerp vw = rooster[doelX][doelY];
if(rooster[doelX][doelY] == rooster[15][12]){
levens--;
if(levens<0){
GameOver();
}
return;
}
if (vw.isBetreedbaar()){
rooster[huidigeX][huidigeY] = null;
huidigeX = doelX;
huidigeY = doelY;
rooster[doelX][doelY] = pac;
}
}
}
}
Code (Controller):
Code:
import java.awt.event.*;
public class Controller implements KeyListener
{
private Spelbord spelbord;
private View view;
/**
* Constructor for objects of class Controller
*/
public Controller(Spelbord spelbord, View view)
{
this.spelbord = spelbord;
this.view = view;
view.addKeyListener(this);
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_RIGHT:
spelbord.rechts();
break;
case KeyEvent.VK_LEFT:
spelbord.links();
break;
case KeyEvent.VK_UP:
spelbord.boven();
break;
case KeyEvent.VK_DOWN:
spelbord.onder();
break;
}
view.repaint();
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}
Het spel van wat ik tot nu toe al heb:
https://rapidshare.com/files/228893149/Pac-Xon_v1.0.rar
Alvast bedankt!
Frederik