Diskuze: Hra 'Snake' - vypsání skóre po ukončení hry
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Pošli nám kód znova, pro přehlednost předchozí komentáře smažu
Jednoduše tam kde zjistíš prohru (nezapomeň i na výhru) to uložíš. Ukládání je popsáno v tutoriálu http://www.itnetwork.cz/java/soubory
Nešlo by to prosím upřesnit v mém kódu. Já jsem to právě zkoušela přidat na místo, kde zjišťuji prohru, bohužel se to potom stále vypisovalo ve smyčce dokola, takže se mi skóre vypisovalo neustále, dokud jsem program nezastavila (nezavřela křížkem či ve vývojovém prostředí).
Edituj ho pokud ti to ještě jde a vlož ho do tagů code, je tady v tom
editoru hned vedle panáčka ikonka.
Sice Javu neznám, ale napadá mě přidat při akci ukončení což jak jsi
popsala bylo naražení do zdi/kousnutí sebe sama to aby jsi tam zapsala to
skóre a potom funkci ukončila, nevím jestli tam máš nějakou hlavní
smyčku ale potom bych jí nastavil něco jako break, aby se hned při tom
ukončila a pokračovalo se s dalším kódem za cyklem, což by bylo vypsání
ukončovacího textu, nebo tak..
Snad je nápad srozumitelný... Kód jsem nepročítal 1. je v téhle podobě
těžko čitelný 2. Javu neumím, a asi bych to moc nepochytil..
Editovat mi nejde, vkládám znovu, snad to ještě víc nezkazím:
Had2D.java
package had2d;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author fidelio
*/
public class Had2D extends JFrame implements KeyListener, Runnable{
private final Bod bod = new Bod(3, this);
private boolean up, down, left, right;
private final Jidlo jidlo = new Jidlo(this);
public Had2D(String title){
super(title);
this.setFocusable(true);
this.addKeyListener(this);
jidlo.createLocation();
}
public void paint(Graphics g){
super.paint(g);
//Kreslení
g.drawImage(Toolkit.getDefaultToolkit().getImage("Images/pozadi.png"), 0, 0, this);
//Body, vykreslí bod(y), délku hada určuje první parametr
bod.paint(g);
//Malování jídla
jidlo.paint(g);
//Konec hry
if(bod.getGameOver()){
g.setFont(new Font("Arial", Font.BOLD, 50));
g.drawString("Game Over", 100, 200);
}
//Sychronizuje komunikaci s HW (...linux)
Toolkit.getDefaultToolkit().sync();
}
/**
* @param args the command line argumen
*/
public static void main(String[] args) {
Had2D had = new Had2D("Had2D");
had.setSize(500,500);
new Thread(had).start();
had.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
had.setVisible(true);
//had.setUndecorated(true);
had.setLocation(100, 100);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_LEFT && !right){
left = true;
up = false;
down = false;
right = false;
} else if(e.getKeyCode()==KeyEvent.VK_UP && !down){
up = true;
right = false;
left = false;
down = false;
} else if(e.getKeyCode()==KeyEvent.VK_RIGHT && !left){
right = true;
up = false;
left = false;
down = false;
} else if(e.getKeyCode()==KeyEvent.VK_DOWN && !up){
down = true;
up = false;
left = false;
right = false;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void run() {
while (true){
if(!bod.getGameOver())
if (up){
bod.move("up");
} else if (down){
bod.move("down");
} else if (left){
bod.move("left");
} else if (right){
bod.move("right");
}
bod.snezJidlo(jidlo);
bod.narazilDoZdi();
repaint();
try {
Thread.sleep(150);
} catch (InterruptedException ex) {
Logger.getLogger(Had2D.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Bod.java
package had2d;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Toolkit;
/**
*
* @author fidelio
*/
public class Bod {
private int body;
private final int[] bodyX = new int[2500];
private final int[] bodyY = new int[2500];
private final Component comp;
private boolean gameOver;
public int points;
public Bod(int body, Component comp){
this.body = body;
this.comp = comp;
for (int i = 0; i < body; i++){
bodyX[i] = 100 - i*10;
bodyY[i] = 100;
}
}
public void move(String position){
for(int i = body; i > 0; i--){
bodyX[i] = bodyX[(i - 1)];
bodyY[i] = bodyY[(i - 1)];
}
switch (position) {
case "left":
bodyX[0] -= 10;
break;
case "right":
bodyX[0] += 10;
break;
case "down":
bodyY[0] += 10;
break;
case "up":
bodyY[0] -= 10;
break;
}
}
public void snezJidlo(Jidlo jidlo){
if(bodyX[0] == jidlo.getX() && bodyY[0] == jidlo.getY()){
jidlo.createLocation();
body++;
points++;
}
}
public void narazilDoZdi(){
if(bodyX[0] <= 0){
gameOver = true;
} else if (bodyX[0] >= 500 -10){
gameOver = true;
}
if(bodyY[0] <= 0){
gameOver = true;
} else if (bodyY[0] >= 500 -10){
gameOver = true;
}
for (int i = 1; i < body; i++){
if(bodyX[0] == bodyX[i] && bodyY[0] == bodyY[i]){
gameOver = true;
}
}
}
public boolean getGameOver(){
return gameOver;
}
public void paint(Graphics g){
for (int i = 0; i < body; i++){
g.drawImage(Toolkit.getDefaultToolkit().getImage("Images/telo.png"), bodyX[i], bodyY[i],comp);
drawPoints(g);
}
}
public void drawPoints(Graphics g){
g.setColor(Color.BLACK);
g.drawString("points:" + points, 40, 60);
}
}
Jidlo.java
package had2d;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Toolkit;
/**
*
* @author fidelio
*/
public class Jidlo {
private final Component comp;
private int x,y;
public Jidlo(Component comp){
this.comp = comp;
}
public void createLocation(){
x = 10 * (int) (Math.random()*50);
y = 10 * (int) (Math.random()*50);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void paint(Graphics g){
g.drawImage(Toolkit.getDefaultToolkit().getImage("Images/telo.png"), x, y, comp);
}
}
Kód jsem vložila níže pod příspěvky, příště již budu poučenější, omlouvám se za zmatky. Děkuji
Děkuji všem lidem, kteří se mi snažili pomoci, především uživatelům Misaz a Alesseon. V metodě run() mi po prvním if chyběly složené závorky. Netbeans mě toto normálně ihned hlásí a mě začátečnici vůbec nenapadlo, že by mě na to prostředí neupozornilo. Je to pro mě trochu záhada. Teď vše funguje jak má. Ještě jednou děkuji
Zobrazeno 9 zpráv z 9.