Hra dáma, potřebuji poradit s polem, zadávání tahů – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Hra dáma, potřebuji poradit s polem, zadávání tahů – Java – Fórum – Programujte.comHra dáma, potřebuji poradit s polem, zadávání tahů – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Buddy
~ Anonymní uživatel
5 příspěvků
28. 11. 2011   #1
-
0
-

Dobrý den,

potřeboval bych poradit, ve škole jsem dostal úkol a nevím si moc rady, jsem začátečník, programuji úkol v Netbeans.

Děkuji za každou radu, hlavně nechápu to zadávání tahů a vykonávání jich v poli..

Zde je mé zadání:

Dáma: vygeneruje a vytiskněte herní plán dámy v základním postavení. Následně umožněte zadávání a provádění tahů s vždy tiskem nové herní situace. Detekujte nesmyslné tahy.

Nahlásit jako SPAM
IP: 160.217.211.–
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
28. 11. 2011   #2
-
0
-

Hrací plán: pole 8x8.

Prázdné pole např. číslo 0, černé číslo 1 a bílé číslo 2.

Pohybovat se dá pouze po diagonálách tj. mění se sloupec i řádek (o jednu).

Pohyb se provede tak, že na stávajícím místě vložíš 0 a na nové místo vložíš odpovídající číslo barva (1, 2).

Nesmyslné tahy: nejsou po diagonále, mimo herní plán, na pozici někdo je (hodnota na dané pozici v poli != 0).

Nahlásit jako SPAM
IP: 78.80.52.–
Buddy
~ Anonymní uživatel
5 příspěvků
28. 11. 2011   #3
-
0
-

Děkuji, tohle bych chápal, ale mám problém s tím, že hráč zadá tah, např. z A1 na B2 a nevím jak to provedu v poli, jak bych to zapsal v javě?

Nahlásit jako SPAM
IP: 178.255.168.–
zlz
~ Anonymní uživatel
634 příspěvků
28. 11. 2011   #4
-
0
-

   

String tah = "A1";
int x = tah.charAt(0) - 'A';
int y = tah.charAt(1) - '1';
pole[x][y] ...
Nahlásit jako SPAM
IP: 213.211.51.–
zlz
~ Anonymní uživatel
634 příspěvků
28. 11. 2011   #5
-
0
-

Samozřejmě s nějakým ošetřením vstupu.

Nahlásit jako SPAM
IP: 213.211.51.–
Buddy
~ Anonymní uživatel
5 příspěvků
28. 11. 2011   #6
-
0
-

#5 zlz
public static void main(String[] args){

int sachovnice [][] = {       
{0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{2, 0, 2, 0, 2, 0, 2, 0},
{0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0},
};
       
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 sn = new Scanner(System.in);
System.out.println("Zadejte odkud chcete táhnout:");
String odkud = sn.next();
System.out.println("Zadejte kam chcete táhnout:");
String kam = sn.next();

Takto vytisknu základní postavení.. a dále se chci zeptat, jestli jsem na dobré cestě? Jsem začátečník a pole mi dělají problém. Vim, že to nefunguje, ale kdyžtak jestli to takhle vůbec nejde, opravte mě. Takhle bych to musel zjistit pro všechna A,B,C,D... a pak nějakým if vykonat tah?

int i;
int j;

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


kam = "B2";
i = kam.charAt(1) - 'B';
j = kam.charAt(2) - '2';
sachovnice [i][j] = 1;

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

}

Nahlásit jako SPAM
IP: 178.255.168.–
liborb
~ Redaktor
+18
Guru
29. 11. 2011   #7
-
0
-

Už se to rýsuje. Na vypsání stavu si udělej funkci (nemusí mít žádné parametry), protože ji budeš volat asi z více míst.

Dále ... pokud do odkud a kam načteš vstup uživatele, tak už si to nesmíš přepsat tou ukázkou od zdendy.

Pokud to má pokračovat, tak ti to musí běžet v cyklu - např. "nekonečný" while(1), ve kterém bude test ukončení hry (výhra/prohra).

A ještě poslední připomínka, máš 2 typy hracích figurek (1 a 2), takže pohyb tomu musíš přizpůsobit:

int i;
int j;
int figurka;

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


kam = "B2";
i = kam.charAt(1) - 'B';
j = kam.charAt(2) - '2';
sachovnice [i][j] = figurka;

A pak ti tam samozřejmě chybí ošetření vstupu uživatele (když někdo zadá třeba S9 :)) a pak dále, když ta nová pozice, na kterou má figurka přejít je obsazená, aby to nešlo atd. atd.

Nahlásit jako SPAM
IP: 78.80.52.–
Buddy
~ Anonymní uživatel
5 příspěvků
29. 11. 2011   #8
-
0
-

#7 liborb

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2

at java.lang.String.charAt(String.java:695)
at damapokus.Damapokus.main(Damapokus.java:57)
Java Result: 1

Co je to za chybu? Co se programu nelíbí? Jinak moc děkuju, dost jste mi pomohli, musím tam ještě co nejdřív dopsat ten cyklus a pak už to snad bude něco dělat :)

Nahlásit jako SPAM
IP: 178.255.168.–
werixon0
Návštěvník
30. 11. 2011   #9
-
0
-

vlakno jsem necetl, ale tohle rika, ze jsi mimo pole/retezec. Z tohodle vystupu to nejde poznat. Koukni na damapokus.Damapokus.main(Damapokus.java:57)

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

Pokoušíš se načíst třetí znak (pozice jsou číslované od 0). Ten kód bude pro 'odkud' i 'kam' stejný.

odkud = "A1";
i = odkud.charAt(0) - 'A'; // prvni znak z odkud a jak daleko je od 'A'
j = odkud.charAt(1) - '1'; // druhy znak z odkud a jak daleko je od '1'

kam = "B2";
i = kam.charAt(0) - 'A'; // prvni znak z kam...
j = kam.charAt(1) - '1'; // druhy...
Nahlásit jako SPAM
IP: 213.211.51.–
Buddy
~ Anonymní uživatel
5 příspěvků
3. 12. 2011   #11
-
0
-

public static void main(String[] args){

int sachovnice [][] = {       
{0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{2, 0, 2, 0, 2, 0, 2, 0},
{0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0},
};
       
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 sn = new Scanner(System.in);
System.out.println("Zadejte odkud chcete táhnout:");
String odkud = sn.next();
System.out.println("Zadejte kam chcete táhnout:");
String kam = sn.next();


int i;
int j;
int figurka;

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

figurka = sachovnice[i][j];
sachovnice[i][j] = 0;

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

if(sachovnice [i][j] == 0){
sachovnice [i][j] = figurka;
}


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

Děkuju za rady :) Chápu, že tam nemám ještě ten cyklus, neboť jsem se k tomu dostal až teď a ještě jsem ho tam nedopsal, ale když zadám jeden tah třeba z C2 na D1, tak by se ten jeden tah měl projevit na šachovnici a mělo by se vytisknout tohle:

{0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0},
{0, 0, 0, 1, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{2, 0, 2, 0, 2, 0, 2, 0},
{0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0},

Ale neni to tak, takže to mám nejspíš blbě? :/ :) 

Nahlásit jako SPAM
IP: 178.255.168.–
zlz
~ Anonymní uživatel
634 příspěvků
3. 12. 2011   #12
-
0
-

To bude asi tím, že tam máš natvrdo ten tah "A1" -> "B2". To samozřejmě vyhoď.

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

Ahoj řeším úplně stejný problém. Nemohl by to někdo aktualizovat?

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, 26 hostů

Podobná vlákna

Potřebuji poradit — založil Tomáš

Potřebuji poradit — založil Robert

Hra Dáma — založil emigrate

Moderátoři diskuze

 

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