Diskuze: Prosím o radu s kódem 2.0
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 15 zpráv z 15.
//= 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.
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 :-)");
}
}
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ť
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();
}
}
}
Hm tak toto je úplne iné ako to čo mi skopírovalo naposledy, čudné
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);
}
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"
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
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...
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?
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
"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)
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.
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.