質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

0回答

2740閲覧

java でブラックジャックを作っています、ご教授願います。

riku0108

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/03/05 01:50

前提・実現したいこと

javaでブラックジャックを作成しています。

該当のソースコード

java

1package game; 2 3/** 4 * 実行 5 */ 6public class Exec { 7 public static void main(String[] args) { 8 BlackJack bj = new BlackJack("ディーラー", "プレイヤー"); 9 bj.play(); 10 } 11} 12
package game; import java.util.Scanner; /** * ブラックジャッククラス */ public class BlackJack { /**カードデッキ*/ private CardDeck deck; /**ディーラー*/ private Dealer dealer; /**プレイヤー*/ private Player player; static final String DEALER_ICON = "□"; static final String PLAYER_ICON = "■"; static final String BANNER = "\n■□■□■□■□■□ BlackJack ■□■□■□■□■□"; static final int CARDS = 52; static final String Q_CONTINUE = "続けますか(y/n)"; static final int LIMIT = 17; static final String Q_DEAL = "さらにカードを引きますか(y/n)"; static final String EVEN = "引き分け"; static final String WIN = "あなたの勝ち"; static final String LOST = "ディーラーの勝ち"; static final String ANIMATION_ICON = "□■"; static final int TIMES = 20; static final int DELAY = 20; /** * コンストラクタ * @param dname ディーラーの名前 * @param pname プレイヤーの名前 */ public BlackJack(String dname, String pname) { deck = new CardDeck(CARDS); dealer = new Dealer(dname, DEALER_ICON, deck); player = new Player(pname, PLAYER_ICON, deck); } /** * 初期化する */ public void initialize() { if(deck.size() < LIMIT) { deck.initialize(); } dealer.initialize(); player.initialize(); } /** * ゲームをプレイする */ public void play() { do { System.out.println(BANNER); animation(TIMES, DELAY, ANIMATION_ICON); }while(getString(Q_CONTINUE).equals("y")); } /** * ディーラーとプレイヤーの情報を表示する */ public void show() { System.out.println(); System.out.println(dealer); System.out.println(player); } /** * ディーラーとプレイヤーの情報を表示する * ディーラーの情報は一部非公開とする。 */ public void showHalf() { System.out.println(); System.out.println(dealer.half()); System.out.println(player); } /** * カードを配る */ public void deal() { while(player.score() < 21) { if(getString(Q_DEAL).equals("n")) break; player.addACard(); showHalf(); } } /** * 勝敗を判定する */ public void judge() { int d = dealer.score(); int p = player.score(); if(d > 21 && p > 21 || d == p) { System.out.println(EVEN); }else if(d > 21 && p < 21 || d > 21 && p > 21 ) { System.out.println(WIN); }else{ System.out.println(LOST); } } /** * アイコンの表示をアニメーション表示する * @param times 回数 * @param delay 遅延時間(ミリ秒) * @param icon アイコン */ public void animation(int times, int delay, String icon) { System.out.println(); try { for(int i = 0; i < times; i++) { System.out.print(icon); Thread.sleep(delay); } } catch (InterruptedException e) { e.printStackTrace(); } } /** * 標準入力から文字列を取得する * @param message 表示メッセージ * @return 取得した文字列 */ public String getString(String message) { System.out.print("[" + message + "]> "); Scanner sc = new Scanner(System.in); return sc.nextLine(); } }
package game; /** * トランプのカードを表すクラス * カードは種類番号(0~3)と札番号の二つのフィールドを持つ。 * また、種類番号×13+札番号をカード番号という。 * カードの並び替えにはカード番号をキーとして使う。 */ public class Card { /**種類番号(0=スペード、1=ハート、2=クラブ、3=ダイヤ)*/ private int suit; /**札番号(1~13)*/ private int number ; /** * 種類と札番号を指定するコンストラクタ * @param suit 種類番号(0=スペード、1=ハート、2=クラブ、3=ダイヤ) * @param number 札番号(1~13) */ public Card(int suit, int number) { this.suit = suit; this.number = number; } /** * カード番号を指定するコンストラクタ * カード番号は1から52(13×4種類)の番号 * @param n カード番号(1~52) */ public Card(int n) { this(n, n); } /** * トランプの種類番号を返す * @return 種類番号(0~3) */ public int getSuit() { return suit; } /** * トランプの札番号を返す * @return 札番号(1~13) */ public int getNumber() { return number; } /** * トランプの種類番号に対応する種類名文字列を返す * @return 種類番号に対応して次のような文字列を返す * 0=スペード、1=ハート、2=クラブ、3=ダイヤ */ public String getSuitString() { String[] name = {"スペード", "ハート", "クラブ", "ダイヤ"}; return getSuitString(); } /** * 札番号を2桁の文字列に直して返す * 札番号が1桁の場合は、" 5"のように前に半角空白をひとつ付ける * 札番号が10の場合は、"10"とする * 札番号1, 11, 12, 13は、" A", "J", " Q", " K"とする */ public String numberString() { return numberString(); } /** * トランプの種類番号と札番号とからカード番号を計算して返す * @return カード番号(13×種類番号+札番号) */ public int seqNumber() { int n; return n = 13*suit+number; } /** * カードのスコアを返す * @return カードのスコア */ public int score() { int[] s = {1,2,3,4,5,6,7,8,9,10,10,10}; return score(); } /** * トランプカードの内容を表す文字列を返す * @return 種類名と札番号からなる文字列 */ public String toString() { return toString(); } }
package game; import java.util.ArrayList; import java.util.Collections; /** * カードデッキ(山札)を管理するクラス */ public class CardDeck { /**セットするカード枚数*/ private int max; /**カードデッキ(山札)*/ private ArrayList<Card> deck; /** * セットするカード枚数を指定して生成する * @param max セットするカード枚数 */ public CardDeck(int max) { this.max = max; } /** * カードデッキを初期化する * カードデッキにカードをmax枚セットし、シャッフルする * (ヒント) シャッフルには、Collections クラスの shuffleメソッドを使用する */ public void initialize() { int deck = max; Collections.shuffle(null); } /** * 残りのカード枚数を返す * @return 残りのカード枚数 */ public int size() { return max; } /** * 次のカードを取り出す * @return 次のカード。ないときはnull */ public Card next() { return next(); } }
package game; /** * ディーラークラス */ public class Dealer extends Player { /** * コンストラクタ * @param name ディーラーの名前 * @param icon ディーラーのアイコン * @param deck カードデッキ */ public Dealer(String name, String icon, CardDeck deck) { super(name, icon, deck); } /** * スコアが16以下なら(スコアが16を超えるまで)手札にカードを追加する */ public void over16() { } /** * ディーラー情報の文字列を取得する。 * 手札の1枚目は公開するが、2枚目以降は公開しない。 * @return ディーラー情報 */ public String half() { return icon; } /** * 1枚目の手札を文字列で取得する * @param sbuf */ void halfStr(StringBuilder sbuf) { Card c = hand.get(0); sbuf.append(c); sbuf.append("\t"); } }
package game; import java.util.ArrayList; /** * プレイヤークラス */ public class Player { /**カードデッキ(山札)*/ protected CardDeck deck; /**プレイヤーの手札*/ protected ArrayList<Card> hand; /**プレイヤーの名前*/ protected String name; /**プレイヤーのアイコン*/ protected String icon; public Player(String name, String icon, CardDeck deck) { this.name=name; this.icon=icon; this.deck=deck; } /** * 手札を初期化する */ public void initialize() { int deck=0; } /** * 手札を1枚引く */ public void addACard() { } /** * スコアを求める * @return スコア */ public int score() { return 0; } /** * プレイヤー情報の文字列を取得する * @return プレイヤー情報 */ public String toString() { StringBuilder sbuf = new StringBuilder(); sbuf.append(icon); sbuf.append(name); sbuf.append("\t["); int num = score(); String str = num<10 ? " "+num : ""+num; sbuf.append(str); sbuf.append("]\t"); cardStr(sbuf); return sbuf.toString(); } /** * 手札の一覧を文字列で取得する * @param sbuf */ void cardStr(StringBuilder sbuf) { } }

試したこと

実行はできたものの、実行例とは全く違うものが出力されてしまいます。
いろいろ調べてはいるものの、全くわからないのでご教授願います。

補足情報(FW/ツールのバージョンなど)

java

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/03/05 01:53

「実行例」がなんなのか不明なので応えようがないです。設計はどの程度された上で実装にされたのでしょうか。
1T2R3M4

2021/03/05 02:00

実行例とは? 自分で書いているのですか。 それともコピペしているのですか。
dodox86

2021/03/05 02:03

「全然分からないので一から教えてください。」的な質問は回答は付かない可能性があります。プログラムが完成するまで回答者が付き合う訳にはいきませんよね。teratailは先生を求めるところでは無いので、分からないところを絞りましょう。 [質問するときのヒント] https://teratail.com/help/question-tips 一気に全部作ってできたつもりになるのではなく、機能をひとつずつ完成させましょう。
riku0108

2021/03/05 02:13

実行例は以下の形になっています. ■□ ■□ ■□ ■□ BlackJack ■□ ■□ ■□ ■ □ディー ラー[??] スペード K ********** ■プレー ヤー[16] ダイヤ 6 クラブ J [さらにカードを引きますか (y/n)]> y □ディー ラー[??] スペード K ********** ■プレー ヤー[22] ダイヤ 6 クラブ J ハート 6 □■ □■ □■ □■ □■ □■ □■ □■ □■ □■ □■ □■ □■ □■ □ディー ラー[17] スペード K スペード 7 ■プレー ヤー[22] ダイヤ 6 クラブ J ハート 6 ディーラの勝ち [続けますか(y/n)]> n そして以下が私のコードの実行結果です ■□ ■□ ■□ ■□ BlackJack ■□ ■□ ■□ ■ □■□■□■□■□■[続けますか(y/n)]> n
m.ts10806

2021/03/05 02:21

質問は編集できます。 現在の自身の理解度や起きている現象、調べたこと試したことを記載してください。 あと、課題なら出題者へ 書籍ならこれまでを復習してから
1T2R3M4

2021/03/05 02:22

あなたの書いたコードと実行例のコードのdiffをとってみてはいかがでしょうか。
dodox86

2021/03/05 02:32 編集

コードの見た目の整然さに比べ、質問内容からするとどこからか写したものでしょうか。コードの内容の理解はこの際置いておいて、とりあえず想定通りに動くようにしたいと言うことかな?
TN8001

2021/03/05 09:40

riku0108さん 出典は質問に明示してください(いつでも編集できます) 「わかりやすいJava オブジェクト指向編」か、その改訂版かなんかのようですね。 [わかりやすいJava オブジェクト指向編|サポート|秀和システム](https://www.shuwasystem.co.jp/support/7980html/2571.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問