Diskuze: Prosím o radu s kódem 2.0
package blackjack;
import java.util.Scanner;
import java.util.Random;
/**
*
* @author senfik
*/
public class BlackJack {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in, "Windows-1250");
Hrac hrac = new Hrac();
Dealer dealer = new Dealer();
String znovu1 = "1";
while (znovu1.equals("1")) {
hrac.hra();
dealer.turn();
dealer.vysledek();
System.out.println("");
System.out.println("dealer má " + dealer.hodnotaD);
System.out.println("hráč má "+ hrac.hodnotaH);
if(hrac.hodnotaH > dealer.hodnotaD) {
System.out.println("\nVyhrál jsi kámo!!!!\n");
}
else if (hrac.hodnotaH == dealer.hodnotaD){
System.out.println("Stejně!!");
}
else if(dealer.hodnotaD >21){
System.out.println("");
}
else
{
System.out.println("Prohrál si bro...");
}
System.out.println("Chceš znovu hrát?? 1ano/2ne");
znovu1 = sc.nextLine();
dealer.hodnotaD = 0;
hrac.hodnotaH = 0;
}
System.out.println("díky za hru :-)");
}
}
Matúš Olejník:6.7.2018 23:15
Ako veľmi ti to funguje? Pretože všimol som si ešte z pôvodného príspevku že tam generuješ náhodné čísla ale bez nejakých obmedzení. Taktiež by som skôr čakal, že Dealer bude dediť od hráča a nie naopak. Chcelo by to povedať si čím treba začať
Petr Šenfeld:6.7.2018 23:18
package blackjack;
import java.util.Random;
/**
*
* @author senfik
*/
public class Dealer {
public int hodnotaD;
private int pocetKaret;
private Random random;
public int hodnotaH;
public Dealer() {
pocetKaret = 10;
random = new Random();
}
public void turn() {
if(hodnotaD < 17&& hodnotaD <22){
while(hodnotaD < 17 && hodnotaD <22){
hodnotaD = hodnotaD + random.nextInt((pocetKaret));
if(hodnotaD < 22) {
hodnotaD++;
System.out.printf("Dealer má: %s\n",hodnotaD);
try {
Thread.sleep(500);
}
catch (InterruptedException ex) {
System.err.println("error");
}
}
else{
System.out.printf("Dealer má: %s PŘES!!\n ",hodnotaD);
}
}
}
}
public void vysledek() {
if(hodnotaD >21)
System.out.println("Vyhrál jsi!!!!");
/*if(hodnotaH > hodnotaD) {
System.out.println("Vyhrál jsi kámo");
}
else
{
System.out.println("Prohrál si bro...");
}
*/
}
}
package blackjack;
import java.util.Scanner;
import java.util.Random;
/**
*
* @author senfik
*/
public class Hrac extends Dealer {
public int hodnotaH;
private int pocetKaret;
private Random random;
Scanner sc = new Scanner(System.in, "Windows-1250");
public Hrac() {
pocetKaret = 10;
random = new Random();
}
public void kartu() {
hodnotaH = hodnotaH + random.nextInt((pocetKaret));
if(hodnotaH < 22) {
hodnotaH++;
System.out.printf("Máš: %s cheš další kartu? 1ano/2ne\n",hodnotaH);
}
else{
System.out.printf("Přes, končíš..(%s)",hodnotaH);
System.out.println("Chceš hrát znovu?? 1ano/2ne");
hodnotaH = 0;
}
}
public void hra() {
String znovu = "1";
System.out.println("Možnosti: ");
System.out.println("1-kartu");
System.out.println("2-stačí");
System.out.println("----------");
int volba = Integer.parseInt(sc.nextLine());
while (znovu.equals("1")){
switch (volba) {
case 1:
kartu();
break;
case 2:
System.out.println("stačí");
break;
}
znovu = sc.nextLine();
}
}
}
Matúš Olejník:6.7.2018 23:19
Hm tak toto je úplne iné ako to čo mi skopírovalo naposledy, čudné
Matúš Olejník:6.7.2018 23:31
Tuto najprv navýšiš aktuálnu hodnotu v ruke o potiahnutú kartu a potom ak je hodnota < 22 tak ju ešte inkrementuješ o 1, to je cielené?
handValue = handValue + random.nextInt((pocetKaret));
if (handValue < 22) {
handValue++;
System.out.printf("Máš: %s cheš další kartu? 1ano/2ne\n", handValue);
}
Petr Šenfeld:6.7.2018 23:34
No měl jsem za to, že když dám < 21, tak aby mi to nešlo přes, když padne 21... samozřejmě cíl je aby cokoliv nad 21 bylo vyhodnoceno jako "přes"
Matúš Olejník:6.7.2018 23:38
Mne tam ide o to hodnotaH++, (sorry už som si to u seba refaktoroval) že za každým keď potiahnem kartu a na ruke mám menej ako 22 tak mi bezdôvodne zvýšiš aktuálnu hodnotu o 1, ale to len tak na okraj
Petr Šenfeld:6.7.2018 23:43
Už chápu co tím myslíš, tak nějak ani nevím proč to tam mám ale když to dám pryč tak mi to tam háže nuly a ty nechci...
Matúš Olejník:7.7.2018 0:12
Takže ja by som pridal zopár ďalších tried a trochu inak to
rozčlenil.
Player - ktorý bude mať aktuálnu hodnotu kariet v ruke a počet kariet ..
alebo zoznam kariet keby si chcel do budúcna aj vykreslovať aké karty má (ak
hej tak aj triedu Card). Bude si vedieť vypýtať kartu.
Dealer - to isté ako Player, ale bez toho že by od neho dedil a bude ovládať
miešačku kariet
CardShuffler - miešačka kariet, ktora bude obsahovať celkový počet kariet,
zostávajúci počet, bude vedieť´vypluť nejakú náhodnú kartu, do budúcna
unikátne karty bez niekoľkonásobného opakovania
BlackJackTable - stôl ktorý bude mať jedného dealera a zoznam hráčov
Casino - a nakoniec kasíno v ktorom si budeme môcť vybrať hru BlackJack a
pripraví nám potrebné veci.
Chce sa ti to ísť takto rozbiť alebo chceš nasilu upraviť aktuálny kód?
Petr Šenfeld:7.7.2018 0:58
Děkuji za myšlenku. Beru tvé poznámky na vědomí. Rád bych to prozatím
nechal tak jak to je, jen bych chtěl poradit s těmi problémy, které tam
momentálně mám a nevím si rady. viz Ad1) Ad3)...
Ad2) jsem už odstranil.. díky
Matúš Olejník:7.7.2018 13:35
"Stačí" ti to nevypíše kvôli tomu ako máš napísanú metódu hra
public void hra() {
String znovu = "1";
System.out.println("Možnosti: ");
System.out.println("1-kartu");
System.out.println("2-stačí");
System.out.println("----------");
int volba = Integer.parseInt(sc.nextLine());
while (znovu.equals("1")) {
switch (volba) {
case 1:
kartu();
break;
case 2:
System.out.println("stačí");
break;
}
znovu = sc.nextLine();
}
}
Už to, že ti ide požiadať o ďalšiu a ďalšiu kartu je len "náhoda"
pretože pred cyklom dáš do premennej volba prvú voľbu int
volba = Integer.parseInt(sc.nextLine()); , ale potom keď by si mal
zistiť ďalšiu voľbu tak si to uložíš do premennej znovu ->
znovu = sc.nextLine(); no a keďže vo switchi sa rozhoduješ
podľa premennej volba ktorá bude vždy len tá úplne prvá. Takže
keď najprv požiadaš o kartu uložíš do nej 1 ale keď chceš zrazu povedať
že stači tak sa načíta do premennej znovu text "2"číim sa
ukončí celý cyklus a do switchu sa nevojde.
Bez nejakých väčších zmien by to mohlo byť nejako takto, kde sa mi aj tak
nepáči že otázka či chcem ďalšiu kartu sa pokladá v metóde
kartu() a nie priamo v hra().
public void hra() {
System.out.println("Možnosti: ");
System.out.println("1-kartu");
System.out.println("2-stačí");
System.out.println("----------");
while (true){
int volba = Integer.parseInt(sc.nextLine());
if(volba == 1){
kartu();
} else if (volba == 2){
System.out.println("stačí");
break;
} else {
System.out.println("Neplatna volba");
}
}
}
Ten prvý problém by som skôr vyriešil tým rozčlenením, ktoré som napísal skorej alebo proste treba Dealerovi dať vedieť o hráčovi ktorý hrá, pridať mu atribút player ktorý bude odkazovať na toho hráča a potom bude Dealer schopný na hráčovi volať niečo ako player.setHodnotaH(hodnota) a player.getHodnotaH()..
Ďalšia vec je to čo sme spomínali s tým vynútením inkrementovaním
hodnotyH. Si písal, že si to tam dal kvôli tomu že ti to generovalo aj
číslo 0, čo sa dá ľahko vyriešiť tým, že nastavíš spodnú a vrchnú
hranicu.
random.nextInt(hornaHranica - spodnaHranica + 1) +
spodnaHranica ti vygeneruje čísla od <spodnaHranica,
hornaHranica>
Na záver, ak máš takúto podmienku if (handValue < 17 && handValue < 22) ak plati ze handValue < 17 tak bude určite platiť aj tá podmienka za tým, čiže handValue < 22 a teda môžeš to zjednodušiť na if (handValue < 17)
+20 Zkušeností
+2,50 Kč
Petr Šenfeld:8.7.2018 21:24
Děkuji hodně za tvoji pomoc, určitě jsi s tím musel strávit nějaký čas(minimálně tím psaním na webu , ikdyž mě to trvalo 7h jsem na sebe celkem pyšný, je to můj první program z mé hlavy a hádám, že tak se člověk učí nejlépe. Do budoucna bych chtěl udělat celé kasino a vytvořit tak celou hru a ještě to mít třeba s podporou na android.
Matúš Olejník:8.7.2018 21:42
Nie je za čo rád pomôžem a aspoň sa nenudím Jasné veď všetci nejako začíname ak s tým chceš ďalej pracovať odporúčam robiť si rôzne verzie napr. pomocou Gitu, tutorial aj tu na itnetwork a teda nemusíš sa báť že by si si znefunkčnil funkčný program, uvidíš všetky zmeny ktoré si urobil atď. A keby náhodou kľudne sa pýtaj
Zobrazeno 15 zpráv z 15.