Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: sudoku solver

Aktivity
Avatar
Tomhaus
Člen
Avatar
Tomhaus:3.9.2014 17:26

Ahojky, mám problém se zobrazením rámečku u jednoho prográmku v Javě. Máte tu kód:Frame

package solver;

import java.awt.GridLayout;

import javax.swing.JFrame;

import solver.graphics.Screen;

public class Frame extends JFrame {
        private static final long serialVersionUID = 1L;

        public Frame(){
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setTitle("Sudoku solver");
                setResizable(false);

                init();
        }

        public void init(){
                setLayout(new GridLayout(1, 1, 0, 0));

                Screen s = new Screen();
                add(s);

                pack();

                setLocationRelativeTo(null);
                setVisible(true);

        }

        public static void main(String[] args){
                new Frame();
        }
}

Screen:

package solver.graphics;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;

import javax.swing.JPanel;

public class Screen extends JPanel{
        private static final long serialVersionUID = 1L;

        private static final int WIDTH = 371, HEIGHT = 500;

        private Border b;
        private ArrayList<Border> borders;

        private int xCoor = 5, yCoor = 5;

        public Screen(){
                setFocusable(true);
                setPreferredSize(new Dimension(WIDTH, HEIGHT));

                borders = new ArrayList<Border>();
                borders.add(b);
                b = new Border(xCoor, yCoor, 44);
        }

        public void paint(Graphics g){
        g.clearRect(0, 0, WIDTH, HEIGHT);

        g.setColor(Color.BLACK);
                // svislé čáry
        g.drawLine(4, 4, 4, 366); // levé zesílení, doplnění horního a dolního levého rohového pixelu
        g.drawLine(5, 5, 5, 365);
        g.drawLine(6, 5, 6, 365); // pravé zesílení
        g.drawLine(45, 5, 45, 365);
        g.drawLine(85, 5, 85, 365);
        g.drawLine(124, 5, 124, 365); // levé zesílení
        g.drawLine(125, 5, 125, 365);
        g.drawLine(126, 5, 126, 365); // pravé zesílení
        g.drawLine(165, 5, 165, 365);
        g.drawLine(205, 5, 205, 365);
        g.drawLine(244, 5, 244, 365); // levé zesílení
        g.drawLine(245, 5, 245, 365);
        g.drawLine(246, 5, 246, 365); // pravé zesílení
        g.drawLine(285, 5, 285, 365);
        g.drawLine(325, 5, 325, 365);
        g.drawLine(364, 5, 364, 365); // levé zesílení
        g.drawLine(365, 5, 365, 365);
        g.drawLine(366, 4, 366, 366); // pravé zesílení, doplnění horního a dolního pravého rohového pixelu

                // vodorovné čáry
        g.drawLine(5, 4, 365, 4); // horní zesílení
        g.drawLine(5, 5, 365, 5);
        g.drawLine(5, 6, 365, 6); // dolní zesílení
        g.drawLine(5, 45, 365, 45);
        g.drawLine(5, 85, 365, 85);
        g.drawLine(5, 124, 365, 124); // horní zesílení
        g.drawLine(5, 125, 365, 125);
        g.drawLine(5, 126, 365, 126); // dolní zesílení
        g.drawLine(5, 165, 365, 165);
        g.drawLine(5, 205, 365, 205);
        g.drawLine(5, 244, 365, 244); // horní zesílení
        g.drawLine(5, 245, 365, 245);
        g.drawLine(5, 246, 365, 246); // dolní zesílení
        g.drawLine(5, 285, 365, 285);
        g.drawLine(5, 325, 365, 325);
        g.drawLine(5, 364, 365, 364); // horní zesílení
        g.drawLine(5, 365, 365, 365);
        g.drawLine(5, 366, 365, 366); // dolní zesílení
        }
}

a rámeček kterej se mi nechce zobrazit:

package solver.graphics;

import java.awt.Color;
import java.awt.Graphics;

public class Border {

        private int xCoor, yCoor, width, height;

        public Border(int xCoor, int yCoor, int tileSize){
                this.xCoor = xCoor;
                this.yCoor = yCoor;
                width = tileSize;
                height = tileSize;

        }

        public void draw(Graphics g){
                g.setColor(Color.RED);
                g.fillRect(xCoor * width, yCoor * height, width, height);
                g.clearRect(xCoor * width + 2, yCoor * height + 2, width - 4, height - 4);
        }
}
Odpovědět
3.9.2014 17:26
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Tomhaus
Ondřej Štorc:3.9.2014 17:48

Nikde nevoláš tu metodu draw z třídy Border

Nahoru Odpovědět
3.9.2014 17:48
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Ondřej Štorc
Tomhaus:3.9.2014 18:10

A kde jí mam vyvolat?

Nahoru Odpovědět
3.9.2014 18:10
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Odpovídá na Tomhaus
Neaktivní uživatel:3.9.2014 18:13

Nejspíš v metodě paint.

Nahoru Odpovědět
3.9.2014 18:13
Neaktivní uživatelský účet
Avatar
Tomhaus
Člen
Avatar
Tomhaus:3.9.2014 18:34
borders.draw(g);

připsal sem tohle do paintu, ale není to definovaný pro třídu Screen. Jak to mam definovat? Nějakym privatem?

Nahoru Odpovědět
3.9.2014 18:34
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Tomhaus
Tomhaus:3.9.2014 18:42

Aby jste to správně pochopili, tohle je jen začátek. Rámeček slouží k tomu, aby bylo vidět kam se zadává číslo, které slouží jako vstupní údaj k řešení sudoku. :D

Nahoru Odpovědět
3.9.2014 18:42
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:3.9.2014 21:34

Tak poradí někdo?

Nahoru Odpovědět
3.9.2014 21:34
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Tomhaus
Ondřej Štorc:3.9.2014 21:59

Neuškodilo by sem napsat co ti to píše za chybu..
btw. jestli ti dělá problém takhle jednoduchý vykreslování tak nevim jak chceš vytvořit celý sudoku...

Nahoru Odpovědět
3.9.2014 21:59
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Ladislav Ondris:4.9.2014 13:14

zkus takto:

private Border b =  new Border(xCoor, yCoor, 44);
private ArrayList<Border> borders = borders = new ArrayList<>(); //zkus toto nevytvářet v konstruktoru, ale ještě nad tím, kde máš proměnné (v třídě Screen)

//následně v metodě paint:
for(Border border : borders) {
    border.draw(g);
}
Nahoru Odpovědět
4.9.2014 13:14
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Avatar
Odpovídá na Ladislav Ondris
Ladislav Ondris:4.9.2014 13:17

pardon..oprava:

private ArrayList<Border> borders = new ArrayList<>();
Nahoru Odpovědět
4.9.2014 13:17
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:4.9.2014 20:38

rámeček se zobrazí, ale za počátek počítá souřadnice [0;0], jak to mam změnit?

Nahoru Odpovědět
4.9.2014 20:38
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:4.9.2014 20:52

tročku jsem to poupravil v třídě: Border ,voidu grafiky: draw a jede to je si to nastavit podle svýho a je to paráda :D díky kluci

Nahoru Odpovědět
4.9.2014 20:52
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:5.9.2014 21:19

Potřeboval bych pomoct s posunováním toho rámečku, buď tam mam něco špatně nebo mi tam chybí kus kódu, já nevim. Prosim o radu.

package solver.graphics;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class Screen extends JPanel{
        private static final long serialVersionUID = 1L;

        private static final int WIDTH = 371, HEIGHT = 500;

        private int xCoor = 3, yCoor = 3;

        private boolean right = false, left = false, up = false, down = false;

        private Border b = new Border(xCoor, yCoor, 44);
        private ArrayList<Border> borders = new ArrayList<>();

        private Key key;

        public Screen(){
                setFocusable(true);
                key = new Key();
                addKeyListener(key);
                setPreferredSize(new Dimension(WIDTH, HEIGHT));

                borders.add(b);

                move();
        }

        public void move(){
                if(right)xCoor += 40;
                if(left)xCoor -= 40;
                if(up)yCoor -= 40;
                if(down)yCoor += 40;
        }

        public void paint(Graphics g){
        g.clearRect(0, 0, WIDTH, HEIGHT);

        g.setColor(Color.BLACK);
                // svislé čáry
        g.drawLine(4, 4, 4, 366); // levé zesílení, doplnění horního a dolního levého rohového pixelu
        g.drawLine(5, 5, 5, 365);
        g.drawLine(6, 5, 6, 365); // pravé zesílení
        g.drawLine(45, 5, 45, 365);
        g.drawLine(85, 5, 85, 365);
        g.drawLine(124, 5, 124, 365); // levé zesílení
        g.drawLine(125, 5, 125, 365);
        g.drawLine(126, 5, 126, 365); // pravé zesílení
        g.drawLine(165, 5, 165, 365);
        g.drawLine(205, 5, 205, 365);
        g.drawLine(244, 5, 244, 365); // levé zesílení
        g.drawLine(245, 5, 245, 365);
        g.drawLine(246, 5, 246, 365); // pravé zesílení
        g.drawLine(285, 5, 285, 365);
        g.drawLine(325, 5, 325, 365);
        g.drawLine(364, 5, 364, 365); // levé zesílení
        g.drawLine(365, 5, 365, 365);
        g.drawLine(366, 4, 366, 366); // pravé zesílení, doplnění horního a dolního pravého rohového pixelu

                // vodorovné čáry
        g.drawLine(5, 4, 365, 4); // horní zesílení
        g.drawLine(5, 5, 365, 5);
        g.drawLine(5, 6, 365, 6); // dolní zesílení
        g.drawLine(5, 45, 365, 45);
        g.drawLine(5, 85, 365, 85);
        g.drawLine(5, 124, 365, 124); // horní zesílení
        g.drawLine(5, 125, 365, 125);
        g.drawLine(5, 126, 365, 126); // dolní zesílení
        g.drawLine(5, 165, 365, 165);
        g.drawLine(5, 205, 365, 205);
        g.drawLine(5, 244, 365, 244); // horní zesílení
        g.drawLine(5, 245, 365, 245);
        g.drawLine(5, 246, 365, 246); // dolní zesílení
        g.drawLine(5, 285, 365, 285);
        g.drawLine(5, 325, 365, 325);
        g.drawLine(5, 364, 365, 364); // horní zesílení
        g.drawLine(5, 365, 365, 365);
        g.drawLine(5, 366, 365, 366); // dolní zesílení

        for(Border border : borders){
                border.draw(g);
                }
        }

        private class Key implements KeyListener {

                public void keyPressed(KeyEvent e) {
                        int key = e.getKeyCode();

                        if(key == KeyEvent.VK_RIGHT && !left){
                                up = false;
                                down = false;
                                right = true;
                        }

                        if(key == KeyEvent.VK_LEFT && !right){
                                up = false;
                                down = false;
                                left = true;
                        }

                        if(key == KeyEvent.VK_UP && !down){
                                right = false;
                                left = false;
                                up = true;
                        }

                        if(key == KeyEvent.VK_DOWN && !up){
                                right = false;
                                left = false;
                                down = true;
                        }

                }

                @Override
                public void keyReleased(KeyEvent e) {
                        // TODO Auto-generated method stub

                }

                @Override
                public void keyTyped(KeyEvent e) {
                        // TODO Auto-generated method stub

                }

        }
}
Nahoru Odpovědět
5.9.2014 21:19
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:6.9.2014 20:39

Nikdo neví?

Nahoru Odpovědět
6.9.2014 20:39
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:6.9.2014 20:41

uža si vim proč, já sem přidal třídu do třídy :D

Nahoru Odpovědět
6.9.2014 20:41
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:6.9.2014 20:47

to ak má bejt, tak nevim v čem mam chybu. :( Poradí někdo prosim?

Nahoru Odpovědět
6.9.2014 20:47
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Odpovídá na Tomhaus
Ladislav Ondris:6.9.2014 21:08

A jak chceš ten rámeček posouvat?

Nahoru Odpovědět
6.9.2014 21:08
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Tomhaus
Jan Vargovský:6.9.2014 21:33

Třída ve třídě nevadí, občas se to používá pro pomocné třídy jako je tahle (říká se jim nested). Btw, proč nevykresuješ v cyklu podle % z výšky/šířky?

 
Nahoru Odpovědět
6.9.2014 21:33
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Ladislav Ondris
Tomhaus:6.9.2014 21:44

Posouvat po mřížce sudoku.

Nahoru Odpovědět
6.9.2014 21:44
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Jan Vargovský
Tomhaus:6.9.2014 21:47

nevím, jestli to jde i jinak, ale o tomhle způsobu, který sem použil, vím.

Nahoru Odpovědět
6.9.2014 21:47
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Ladislav Ondris
Tomhaus:7.9.2014 13:10

Poradíš teda jak by se ten rámeček dal posouvat?

Nahoru Odpovědět
7.9.2014 13:10
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:7.9.2014 17:54

Poradí teda někdo?

Nahoru Odpovědět
7.9.2014 17:54
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Odpovídá na Tomhaus
Ladislav Ondris:7.9.2014 20:14

Pořád nevím, jak ho chceš posouvat a proč vlastně?

Nahoru Odpovědět
7.9.2014 20:14
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Ladislav Ondris
Tomhaus:7.9.2014 21:42

Tady máš obrázky:

Editováno 7.9.2014 21:44
Nahoru Odpovědět
7.9.2014 21:42
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:7.9.2014 21:44

A tady máš ten posun:

Nahoru Odpovědět
7.9.2014 21:44
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:7.9.2014 21:45

Já sem jenom přepsal číslo pozice, ale algoritmus na posouvání tlačítky šipek mi nějak nefachá :D

Editováno 7.9.2014 21:46
Nahoru Odpovědět
7.9.2014 21:45
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:7.9.2014 21:47

nahoře máš ten celej kód

Nahoru Odpovědět
7.9.2014 21:47
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Odpovídá na Tomhaus
Ladislav Ondris:7.9.2014 22:32

Nevidím ten algoritmus..

Tak tam musíš mít nějakou podmínku asi špatně, když ti to pak nejde po změně. Zkus si to sám prohlídnout a hlavně nespolíhat na nás, že ti poradíme. Vím z vlastní zkušenosti... vždycky jsem akorát čekal na odpověď a sám jsem tu chybu ani pořádně nehledal. Takže si to zkus projet očima jen nebo si tam System.out.prin­tln(..); nebo přes debug, abys zjistil, kde je chyba :-)

Nahoru Odpovědět
7.9.2014 22:32
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Ladislav Ondris
Tomhaus:8.9.2014 17:29

Ale stejnak díky za radu :)

Nahoru Odpovědět
8.9.2014 17:29
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:8.9.2014 17:51

už asi vim proč mi to nejede, ono se to musí přece pořád aktualizovat, aby to čekalo než zmáčknu klávesu, jenomže se nic neaktualizuje :DDD

Editováno 8.9.2014 17:51
Nahoru Odpovědět
8.9.2014 17:51
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:8.9.2014 17:54

Takže musim implementovat Runnable :D díky moc za radu, s tim vypisováním se na to dá přijít :D

Nahoru Odpovědět
8.9.2014 17:54
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:8.9.2014 18:28

Teď mam problém ukončit cykl. Když dam šipku do prava, tak se v systémovim oknu začne vypysovat true, jenomže se vypisuje nekonečnokrát a já chci aby se vypsalo jen jednou. Jak to mam udělat?

package solver.graphics;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class Screen extends JPanel implements Runnable {
        private static final long serialVersionUID = 1L;

        private static final int WIDTH = 371, HEIGHT = 500;
        private Thread thread;
        private boolean running = false;

        private int xCoor = 3, yCoor = 3;

        private boolean right = false, left = false, up = false, down = false;

        private Border b = new Border(xCoor, yCoor, 44);
        private ArrayList<Border> borders = new ArrayList<>();

        private int ticks;

        private Key key;

        public Screen(){
                setFocusable(true);
                key = new Key();
                addKeyListener(key);
                setPreferredSize(new Dimension(WIDTH, HEIGHT));

                borders.add(b);

                start();
        }

        public void tick(){
                ticks++;
                if(ticks > 250000){
                        if(right)System.out.println(right);
                        if(left)xCoor -= 40;
                        if(up)yCoor -= 40;
                        if(down)yCoor += 40;
                }
        }

        public void paint(Graphics g){
        g.clearRect(0, 0, WIDTH, HEIGHT);

                // svislé čáry ŠEDÉ
        g.setColor(Color.GRAY);
        g.drawLine(45, 5, 45, 365);
        g.drawLine(85, 5, 85, 365);
        g.drawLine(165, 5, 165, 365);
        g.drawLine(205, 5, 205, 365);
        g.drawLine(285, 5, 285, 365);
        g.drawLine(325, 5, 325, 365);

                // vodorovné čáry ŠEDÉ
        g.drawLine(5, 45, 365, 45);
        g.drawLine(5, 85, 365, 85);
        g.drawLine(5, 165, 365, 165);
        g.drawLine(5, 205, 365, 205);
        g.drawLine(5, 285, 365, 285);
        g.drawLine(5, 325, 365, 325);

                // svislé čáry ČERNÉ
        g.setColor(Color.BLACK);
        g.drawLine(4, 4, 4, 366); // levé zesílení, doplnění horního a dolního levého rohového pixelu
        g.drawLine(5, 5, 5, 365);
        g.drawLine(6, 5, 6, 365); // pravé zesílení
        g.drawLine(124, 5, 124, 365); // levé zesílení
        g.drawLine(125, 5, 125, 365);
        g.drawLine(126, 5, 126, 365); // pravé zesílení
        g.drawLine(244, 5, 244, 365); // levé zesílení
        g.drawLine(245, 5, 245, 365);
        g.drawLine(246, 5, 246, 365); // pravé zesílení
        g.drawLine(364, 5, 364, 365); // levé zesílení
        g.drawLine(365, 5, 365, 365);
        g.drawLine(366, 4, 366, 366); // pravé zesílení, doplnění horního a dolního pravého rohového pixelu
        g.drawLine(3, 5, 3, 365); // pravé  menší zesílení
        g.drawLine(367, 5, 367, 365); // levé menší zesílení

                // vodorovné čáry ČERNÉ
        g.drawLine(5, 4, 365, 4); // horní zesílení
        g.drawLine(5, 5, 365, 5);
        g.drawLine(5, 6, 365, 6); // dolní zesílení
        g.drawLine(5, 124, 365, 124); // horní zesílení
        g.drawLine(5, 125, 365, 125);
        g.drawLine(5, 126, 365, 126); // dolní zesílení
        g.drawLine(5, 244, 365, 244); // horní zesílení
        g.drawLine(5, 245, 365, 245);
        g.drawLine(5, 246, 365, 246); // dolní zesílení
        g.drawLine(5, 364, 365, 364); // horní zesílení
        g.drawLine(5, 365, 365, 365);
        g.drawLine(5, 366, 365, 366); // dolní zesílení
        g.drawLine(5, 3, 365, 3); // horní menší zesílení
        g.drawLine(5, 367, 365, 367); // dolní menší zesílení



        for(Border border : borders){
                border.draw(g);
                }
        }

        public void start(){
                running = true;
                thread = new Thread(this, "Game Loop");
                thread.start();
        }

        public void stop(){
                running = false;
                try {
                        thread.join();
                } catch (InterruptedException e){
                        e.printStackTrace();
                }
        }

        public void run() {
                while(running){
                        tick();
                        repaint();
                }
        }

        private class Key implements KeyListener {

                public void keyPressed(KeyEvent e) {
                        int key = e.getKeyCode();

                        if(key == KeyEvent.VK_RIGHT && !left){
                                up = false;
                                down = false;
                                right = true;
                        }

                        if(key == KeyEvent.VK_LEFT && !right){
                                up = false;
                                down = false;
                                left = true;
                        }

                        if(key == KeyEvent.VK_UP && !down){
                                right = false;
                                left = false;
                                up = true;
                        }

                        if(key == KeyEvent.VK_DOWN && !up){
                                right = false;
                                left = false;
                                down = true;
                        }

                }

                @Override
                public void keyReleased(KeyEvent e) {
                        // TODO Auto-generated method stub

                }

                @Override
                public void keyTyped(KeyEvent e) {
                        // TODO Auto-generated method stub

                }
        }
}
Nahoru Odpovědět
8.9.2014 18:28
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
tomisoka
Tvůrce
Avatar
tomisoka:8.9.2014 20:12

Nějak nechápu jak získáváš stisknuté klávesy.
Zkus použít tohle:

right = key == KeyEvent.VK_RIGHT;

Tím získáš jestli je klávesa zmáčknuta a pak už s tím můžeš pracovat.

BTW ty drawLine na to se nedá koukat, zkus to nějak vyřešit cyklem ;)

 
Nahoru Odpovědět
8.9.2014 20:12
Avatar
Tomhaus
Člen
Avatar
Odpovídá na tomisoka
Tomhaus:8.9.2014 22:08

njn, to sem nějak nepořešil, já sem to přidával postupně a ono se to začalo kupit :D aledíky za radu, jdu to zkusit

Nahoru Odpovědět
8.9.2014 22:08
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:8.9.2014 22:17

Já sem si našel návod, jak udělat hru snake v Javě, mam od toho kód a snažim se použít ty posuny, co tam byli. A tam to funguje. :( takže nevim jak to tam mam zadat :(

Nahoru Odpovědět
8.9.2014 22:17
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Tomhaus
tomisoka:8.9.2014 23:36

Tak už chápu jak ses k tomu dostal. Ale to byl input už předpřipravený pro hada... Raději se zamysli jak to funguje.
Jinak teď koukám, ten můj způsob není asi zrovna ideální, raději použij

if( key == KeyEvent.VK_RIGHT )right=true;

a ještě si musíš hlídat v " keyReleased" jestli jsi tu klávesu už nepustil.

 
Nahoru Odpovědět
8.9.2014 23:36
Avatar
Tomhaus
Člen
Avatar
Odpovídá na tomisoka
Tomhaus:9.9.2014 16:57

To mam zadaný už v té třídě Key, tak proč bych to měl zadávat znova?

Nahoru Odpovědět
9.9.2014 16:57
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:9.9.2014 16:58

A nebo si udělam void s touhle podmínkou. :D

Nahoru Odpovědět
9.9.2014 16:58
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na tomisoka
Tomhaus:9.9.2014 22:03

Takže jak mam zformulovat private, addKeyListener a class s implementací KeyListeneru?

Nahoru Odpovědět
9.9.2014 22:03
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:9.9.2014 22:32

Jak to, že se k xCoor, při stisku šipky do prava, nepřičte 40?

private class Key implements KeyListener {
                public void keyPressed(KeyEvent e) {
                        int key = e.getKeyCode();
                        if(key == KeyEvent.VK_RIGHT){
                                xCoor += 40;
                        }
                        if(key == KeyEvent.VK_LEFT){
                                xCoor -= 40;
                        }
                        if(key == KeyEvent.VK_UP){
                                yCoor -= 40;
                        }
                        if(key == KeyEvent.VK_DOWN){
                                yCoor += 40;
                        }

                }

                @Override
                public void keyReleased(KeyEvent e) {
                        right = false;
                        left = false;
                        up = false;
                        down = false;

                }

                @Override
                public void keyTyped(KeyEvent e) {
                        // TODO Auto-generated method stub

                }
        }
Editováno 9.9.2014 22:34
Nahoru Odpovědět
9.9.2014 22:32
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:9.9.2014 22:36

zapomněl sem smazat vnitřek voidu keyReleased, to tam nemá bejt :D

Nahoru Odpovědět
9.9.2014 22:36
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:15.9.2014 20:11

jak můžu zmáčknutím klávesy změnit private int hodnotu?

Nahoru Odpovědět
15.9.2014 20:11
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 42 zpráv z 42.