Java Dama – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java Dama – Java – Fórum – Programujte.comJava Dama – Java – Fórum – Programujte.com

 

Šulin Hrozný
~ Anonymní uživatel
26 příspěvků
7. 12. 2012   #1
-
0
-

Ahoj všem.
Mám jako semestrálku vytvořit hru Dáma. Něco už mám a chtěl bych poradit abych to privedl o lvl víš.


import java.util.*;

public class Dama
{

public static void main(String[]args){

boolean hraBezi = true;
int bilaFigurka = 1;
int cernaFigurka = 2;
int prazdnePole = 0;

while(hraBezi){
int sachovnice [][] = {
{1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0},
{0, 2, 0, 2, 0, 2, 0, 2},
};
//System.out.println("**********************");

for (int i = 0; i < sachovnice.length; i++) { //pruchod pres pole poli
for (int j = 0; j < sachovnice[i].length; j++) { //pruchod samotnym polem (radkem)
System.out.print(sachovnice[i][j] + " "); //bez odradkovani
}
System.out.println(""); //odradkovani
}

Scanner sc = new Scanner(System.in);
System.out.println("Zadejte odkud chcete táhnout:");
String odkud = sc.next();
System.out.println("Zadejte kam chcete táhnout:");
String kam = sc.next();

int i, j;
//bilaFigurka = sachovnice[i][j];
//cernaFigurka = sachovnice[i][j];
//sachovnice[i][j] = 0;

odkud = "A1";
i = odkud.charAt(0) - 'A';
j = odkud.charAt(1) - '1';

kam = "B1";
i = kam.charAt(0) - 'A';
j = kam.charAt(1) - '1';

if(sachovnice [i][j] == 0){
sachovnice [i][j] = prazdnePole;
}
if(sachovnice [i][j] == 1){
sachovnice [i][j] = bilaFigurka;
}
if(sachovnice [i][j] == 2){
sachovnice [i][j] = cernaFigurka;
}


/* if(neco abz to zkoncilo){
// cyklus na projiti celeho pole, u kazdeho pole zkontrolovat hodnotu
konecHry = true;
System.out.println("Konec hry!");
}*/
}
}
}

Nahlásit jako SPAM
IP: 88.102.105.–
TheOndrap+2
Super člen
7. 12. 2012   #2
-
0
-

Sem nějak nějak nepochopil otázku :)

Nahlásit jako SPAM
IP: 88.102.250.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
Šulin Hrozný
~ Anonymní uživatel
26 příspěvků
8. 12. 2012   #3
-
0
-

Chtěl bych poradit jak ukončit cyklus aby se to přeplo na true. dále tu hru rozchodit.

Nahlásit jako SPAM
IP: 88.102.105.–
Šulin Hrozný
~ Anonymní uživatel
26 příspěvků
9. 12. 2012   #4
-
0
-

Nikdo neví?

Nahlásit jako SPAM
IP: 88.102.105.–
Buco0
Newbie
9. 12. 2012   #5
-
0
-

#4 Šulin Hrozný
Kedy konci hra Damy? No ked nie je mozny ziadny dalsi tah (remiza) alebo ak jeden z hracov uz nema figurky. Toto ti staci zapisat do cyklu, ktory prejde sachovnicu a otestuje tieto podmienky pre kazde policko.

Preco uz chces ukoncovat hru, ked v kode nemas napisane preskakovanie dam a ich vyhadzovanie, osetrene hranice sachovnice (co ak uzivatel zada A9?) a povinnost preskakovat?

Nahlásit jako SPAM
IP: 195.91.111.–
Šulin Hrozný
~ Anonymní uživatel
26 příspěvků
10. 12. 2012   #6
-
0
-

import java.util.*;

public class Dama
{    

    public static void main(String[]args){

        boolean hraBezi = true;
        int bilaFigurka = 1;
       // int cernaFigurka = 2;
        int prazdnePole = 0;
        int x, y;
        int sachovnice [][] = {      
            {1, 0, 1, 0, 1, 0, 1, 0},
            {0, 1, 0, 1, 0, 1, 0, 1},
            {1, 0, 1, 0, 1, 0, 1, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 2, 0, 2, 0, 2, 0, 2},
            {2, 0, 2, 0, 2, 0, 2, 0},
            {0, 2, 0, 2, 0, 2, 0, 2},
            };
            System.out.println("**********************");
           
        while(hraBezi){
                
            for (int i = 0; i < sachovnice.length; i++) {     //pruchod pres pole poli
                for (int j = 0; j < sachovnice[i].length; j++) {  //pruchod samotnym polem (radkem)      
                    System.out.print(sachovnice[i][j] + " ");        //bez odradkovani      
                }
                System.out.println("");                                //odradkovani      
            }
           
           
            Scanner sc = new Scanner(System.in);
            System.out.println("Odkud budeme táhnout?");
            String odkud = sc.next();
            System.out.println("Kam budeme táhnout?");
            String kam = sc.next();
                                          
           
            x = odkud.charAt(0) - 'A';
            y = odkud.charAt(1) - '1';
            sachovnice[x][y] = 1;
            sachovnice[x][y] = 0;
                     
            x = kam.charAt(0) - 'A';
            y = kam.charAt(1) - '1';
            sachovnice [x][y] = bilaFigurka;
           
            if(sachovnice [x][y] == 0){
                sachovnice [x][y] = bilaFigurka;
            }
                      
            boolean jeBila = false;
            boolean jeCerna = false;
            for (int i = 0; i < sachovnice.length; i++) {
                for (int j = 0; j < sachovnice[i].length; j++) {
                    if (sachovnice[i][j] == 1) jeBila = true;
                    if (sachovnice[i][j] == 2) jeCerna = true;
                }
            }
            hraBezi = jeBila && jeCerna;
                     
    }
}
}

zatim ten code mam takle ale nevím jak na to aby mi ty zadaný tahy fungovali v poli

Nahlásit jako SPAM
IP: 160.217.135.–
zlz
~ Anonymní uživatel
634 příspěvků
10. 12. 2012   #7
-
0
-

   

x = odkud.charAt(0) - 'A';
y = odkud.charAt(1) - '1';
int figurka = sachovnice[x][y];
/*
if (figurka == 0) tadynicneni;
if (figurka != hrajiciHrac) tonenitvojefigurka;
*/
x = kam.charAt(0) - 'A';
y = kam.charAt(1) - '1';

if(sachovnice[x][y] == 0){
	sachovnice [x][y] = figurka;
}
Nahlásit jako SPAM
IP: 78.156.159.–
Šulin Hrozný
~ Anonymní uživatel
26 příspěvků
10. 12. 2012   #8
-
0
-
Nahlásit jako SPAM
IP: 88.102.105.–
Buco0
Newbie
10. 12. 2012   #9
-
0
-

Na riadku 56 sa snazis narabat s indexom pola, ktory je mimo rozsah. V jave sa polia zacinaju indexom 0, cize velkost pola je vzdy n-1. A prekladac preskakuje to co je v komentari, tak tym to urcite nebude.

Nahlásit jako SPAM
IP: 195.91.111.–
Šulin Hrozný
~ Anonymní uživatel
26 příspěvků
11. 12. 2012   #10
-
0
-

Takže aby se to hýbalo a abych nevybrousil z pole tak zadám co?

Nahlásit jako SPAM
IP: 160.217.134.–
Buco0
Newbie
11. 12. 2012   #11
-
0
-

#10 Šulin Hrozný
Do indexu pola hodnotu, ktora neprevysuje jeho velkost. Vloz sem kod aj s cislami riadkov, alebo aspon ten 56. riadok a mozno poradim presnejsie.

Nahlásit jako SPAM
IP: 195.178.73.–
11. 12. 2012   #12
-
0
-

import java.util.*;

public class Dama
{    

    public static void main(String[]args){

        boolean hraBezi = true;
        int bilaFigurka = 1;
        int cernaFigurka = 2;
        int prazdnePole = 0;
        boolean jeBila = true;
        boolean jeCerna = true;
        int sachovnice [][] = {      
            {1, 0, 1, 0, 1, 0, 1, 0},
            {0, 1, 0, 1, 0, 1, 0, 1},
            {1, 0, 1, 0, 1, 0, 1, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 2, 0, 2, 0, 2, 0, 2},
            {2, 0, 2, 0, 2, 0, 2, 0},
            {0, 2, 0, 2, 0, 2, 0, 2},
            };
            System.out.println("**********************");
           
        while(hraBezi){
                
            for (int i = 0; i < sachovnice.length; i++) {     //pruchod pres pole poli
                for (int j = 0; j < sachovnice[i].length; j++) {  //pruchod samotnym polem (radkem)      
                    System.out.print(sachovnice[i][j] + " ");        //bez odradkovani      
                }
                System.out.println("");                                //odradkovani      
            }
           
            for (int i = 0; i < sachovnice.length; i++) {
                for (int j = 0; j < sachovnice[i].length; j++) {
                    if (sachovnice[i][j] == 1) jeBila = true;
                    if (sachovnice[i][j] == 2) jeCerna = true;
                    if (jeBila == false || jeCerna == false){
                        System.out.println("Konec hry!");
                        System.exit(1);
                    }
                    }
            }
            hraBezi = jeBila && jeCerna;
           
            Scanner sc = new Scanner(System.in);
            System.out.println("Odkud budeme táhnout?");
            String odkud = sc.next();
            System.out.println("Kam budeme táhnout?");
            String kam = sc.next();
           
            int x, y;
            x = odkud.charAt(0) - 'A';
            y = odkud.charAt(1) - '1';
            int figurka = sachovnice[x][y];
            /*
             * if (figurka == 0) tadynicneni;
             * if (figurka != hrajiciHrac) tonenitvojefigurka;
                */
            x = kam.charAt(0) - 'A';
            y = kam.charAt(1) - '1';

            if(sachovnice[x][y] == 0){
                sachovnice [x][y] = figurka;
            }
           
            }
    }
}

kod zde a zde je 56 radek: 

int figurka = sachovnice[x][y]; // zde

Nahlásit jako SPAM
IP: 160.217.135.–
Buco0
Newbie
11. 12. 2012   #13
-
0
-

#12 Šulin Hrozný
Nemas osetrene ak na vstupe bude male pismeno napr. 'a5' 

int x, y;
           if(Character.isLowerCase(odkud.charAt(0)))	{
        	   x = odkud.charAt(0) - 'a';
           }
           else {
        	   x = odkud.charAt(0) - 'A';
           }
           y = odkud.charAt(1) - '1';
           System.out.println(x);
           int figurka = sachovnice[x][y];
           /*
            * if (figurka == 0) tadynicneni;
            * if (figurka != hrajiciHrac) tonenitvojefigurka;
               */
           if(Character.isLowerCase(kam.charAt(0)))	{
        	   x = kam.charAt(0) - 'a';
           }
           else {
        	   x = kam.charAt(0) - 'A';
           }
           y = kam.charAt(1) - '1';

Preco si nevytvaras viacere metody a triedy? Ked vsetko napises v jednej main funkcii tak kod bude strasne neprehladny a bude obsahovat vela duplicitnych casti.

Nahlásit jako SPAM
IP: 195.178.73.–
11. 12. 2012   #14
-
0
-

Dekuju. Super uz se vytiskla 1 po zadani A1 do A2:)

1 1 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 2 0 2 0 2 0 2
2 0 2 0 2 0 2 0
0 2 0 2 0 2 0 2

Nahlásit jako SPAM
IP: 160.217.135.–
23. 12. 2012   #15
-
0
-

Jeste mi prosim poradte jak na preskoceni figurky figurkou a jeji odebrani.

Nahlásit jako SPAM
IP: 88.102.105.–
23. 12. 2012   #16
-
0
-

Zde je současny kod

import java.util.*;

public class Dama
{   
    public int prazdnePole;
    public int bilaFigurka;
    public int cernaFigurka;
    public boolean bilaTah;
    public boolean hraBezi;
    public boolean jeBila;
    public boolean jeCerna;
    public int sachovnice;
   
    Dama(){
        hra();
    }
   
    public void hra(){
       System.out.println("Hra Dáma 1.0");
       System.out.println("Dodržte všechna pravidla");
        int bilaFigurka = 1;
        int cernaFigurka = 2;
        int prazdnePole = 0;
        boolean hraBezi = true;
        boolean bilaTah = false;
        boolean jeBila = true;
        boolean jeCerna = true;
        int sachovnice [][] = {      
       {1, 0, 1, 0, 1, 0, 1, 0},
       {0, 1, 0, 1, 0, 1, 0, 1},
       {1, 0, 1, 0, 1, 0, 1, 0},
       {0, 0, 0, 0, 0, 0, 0, 0},
       {0, 0, 0, 0, 0, 0, 0, 0},
       {0, 2, 0, 2, 0, 2, 0, 2},
       {2, 0, 2, 0, 2, 0, 2, 0},
       {0, 2, 0, 2, 0, 2, 0, 2},
       };
      
        while(hraBezi){
            System.out.println("*****************");    
            for (int i = 0; i < sachovnice.length; i++) {     //tisk sachovnice
                for (int j = 0; j < sachovnice[i].length; j++) {        
                    System.out.print(sachovnice[i][j] + " ");         
                }
                System.out.println("");                                 
            }
            System.out.println("*****************");
            for (int i = 0; i < sachovnice.length; i++) {   //kontrola pro konec hry
                for (int j = 0; j < sachovnice[i].length; j++) {
                    if (sachovnice[i][j] == 1) jeBila = true;
                    if (sachovnice[i][j] == 2) jeCerna = true;
                    if (jeBila == false || jeCerna == false){
                        System.out.println("Konec hry!");
                        System.exit(1);
                    }
                    }
            }
            hraBezi = jeBila && jeCerna;
           
            if(bilaTah == false){
                bilaTah = true;
            }else{if(bilaTah == true){
                    bilaTah = false;
                }
           
            }
           
            if(bilaTah == true){
                System.out.println("Na tahu je Bily");
            }
            else{
                if(bilaTah == false)
                    System.out.println("Na tahu je Cerny");
            }
            zadaniTahu(sachovnice, bilaTah);
           
       }
   
    }

    public void zadaniTahu(int sachovnice[][], boolean bilaTah){
        Scanner sc = new Scanner(System.in);
        System.out.println("Odkud budeme táhnout?");
        String odkud = sc.next();
        System.out.println("Kam budeme táhnout?");
        String kam = sc.next();
       
  
       
        int x, y;
           
        if(Character.isLowerCase(odkud.charAt(0)))  {
            x = odkud.charAt(0) - 'a';
        }
        else {
            x = odkud.charAt(0) - 'A';
        }
           
        y = odkud.charAt(1) - '1';

        bilaFigurka = sachovnice[x][y]; //pohyb figurek
        cernaFigurka = sachovnice[x][y];
        sachovnice[x][y] = prazdnePole; //vytisknuta 0
       
        if(Character.isLowerCase(kam.charAt(0)))    {
            x = kam.charAt(0) - 'a';
        }
        else {
            x = kam.charAt(0) - 'A';
        }
           
        y = kam.charAt(1) - '1';
       
        if(odkud.equals(kam)){
            neplatnyTah();
        }
        /*if(kam == bilaFigurka){
           neplatnyTah();
        }*/
       
        if(bilaTah == true){
            if(sachovnice[x][y] == 0){
                sachovnice [x][y] = bilaFigurka;
            }
        }else{
            if(sachovnice[x][y] == 0){
                sachovnice [x][y] = cernaFigurka;
            }
        }
        bilaTah = false;
    }
   
   
   
    public void neplatnyTah(){
       System.out.println("Neplatny tah!");
       System.exit(1);
       //return 0;
    }
}

Nahlásit jako SPAM
IP: 88.102.105.–
Flowy
~ Anonymní uživatel
449 příspěvků
23. 12. 2012   #17
-
0
-

negacia sa jednoduchsie robi negaciou ... bilaTah = !bilaTah

elseif sa vykonava inak ... to co si ty spravil ti moze robit problemy

chybaju ti popisy riadkov a stlpcov pri tlaceni

... ja by som cely pripad riesil dvoma poliami boolean jedno pre biele a jedno pre cierne ... ulahcilo by to urcite kroky ... pre zistenie moznosti skoku musis zistit ci je na danej pozicii ina figurka a poziciu zistis podla suradnic v poli ... budes potrebovat prekladac ktory ti zadavane adresy prelozi do suradnic pouzitelnych pre pole (int)

Nahlásit jako SPAM
IP: 178.41.234.–
25. 12. 2012   #18
-
0
-

dobře tu negaci tak udělám. popisky řádků nevím jak udělat aby se to nepletlo s polem. Jen uz potrebuju to odebirani tech figurek protože je to moje semestralni prace tak je to pro me akutni a sem vdecni za kazdy kus kodu :)

Nahlásit jako SPAM
IP: 88.102.105.–
Buco0
Newbie
25. 12. 2012   #19
-
0
-

Na vypis sachovnice pouzi dva cykly for, s tym za na kazdy riadok vypises na zaciatku jeho cislo. A ako posledny riadok (9. v poradi) vypises nazvy stlpcov.

Postup pri odoberani figuriek:

zistis, ci miesto kam chces skocit je volne - nie je obsadene inou figurkou.

Potom zistis suradnice preskakovaneho policka (neviem ci uvazujes o viacnasobnom preskakovanie alebo len cez jedno policko) a overis, ci sa tam nachadza figurka supera. Ak berieme, ze skaces vzdy len cez jedno policko a oznacime riadky a stlpce sachovnice cislami od 1 po 8, tak preskovane policko bude mat suradnice priemeru policiek odkud a kam.

Priklad: odkud 4,1 a kam 2,3. Preskakovane policko bude mat suradnice (4+1)/2, (3+1)/2 cize 2,2. Ak tomu nechapes tak si to nakresli alebo vyskusaj na sachovnici.

Ak sa tam nachadza figurka supera tak ju odoberies - priradis danej pozicii hodnotu nula.

Ak sa tam nenachadza tak vypises oznam, ze dany tah nie je mozny.

Mam toho moc na praci a navyse ten tvoj kod je neohybny na upravy a pridavanie dalsej funkcionality takze ti s kodom nepomozem.

Nahlásit jako SPAM
IP: 195.91.111.–
Flowy
~ Anonymní uživatel
449 příspěvků
25. 12. 2012   #20
-
0
-

Ten priemer som nepochopil ... Odkial si ziskal 4+1 a 3+1 a kde si stratil x suradnicu z druheho -dvojku ... Stred medzi nimi sa asi najlahsie spravi absolutnou hodnotou rozdielu kazdej suradnice

Btw ak trvas na pouziti array pre sachovnicu tak pocitaj s tym ze array sa zacina 0 a tvoje pozicie zacinaju na 1 resp A ... Pocitaj s tymto ked budes robit prekladac alebo jednoduchsie bude obsadit pozicie nazvami

Nahlásit jako SPAM
IP: 178.41.234.–
Buco0
Newbie
25. 12. 2012   #21
-
0
-

#20 Flowy
Mas pravdu, spravil som chybu. Ma tam byt 4+2 a 3+1 a vysledna suradnica ma byt 3, 2

Nahlásit jako SPAM
IP: 195.91.111.–
31. 12. 2012   #22
-
0
-

public void odebraniFig(String odkud, String kam){
        int odebratFig = odkud % kam;
       
        if(odebratFig = cernaFigurka){
            sachovnice[x][y] = prazdnePole;//tiskne se 0
        }
        if(odebratFig = bilaFigurka){
            sachovnice[x][y] = prazdnePole;
        }
       
       
    }

asi by to mělo vypadat nějak takto. ale přišel další problém "odkud" a "kam" je String a nejde proto použít operátor %. takže asi nejspíš to bude chtít přetypovat. nebo to lze udělat i jinak?

Nahlásit jako SPAM
IP: 88.102.105.–
3. 1. 2013   #23
-
0
-

tak už to mám. děkuji za nasměrování Buco.

jen ještě potřebuju poradit. musel jsem převést Scanner ze Stringu na int a pole mi počítá od 0. Já ale potřebuji až od 1 aby to počítalo prosím o radu

Nahlásit jako SPAM
IP: 88.102.105.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Podobná vlákna

Dama — založil arny

Dáma — založil Marek Hanuš

AI u hry Dáma — založil Mutagen

Hra Dáma — založil emigrate

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý