Javaでカードゲームを作成する方法を現役エンジニアが解説【初心者向け】
初心者向けにJavaでカードゲームを作成する方法について解説しています。ここでは、ババ抜きのゲームを実装する例を見ていきます。各種処理の書き方と実行結果を、サンプルコードで確認しましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Javaでカードゲームを作成する方法について解説します。
実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。
そもそもJavaについてよく分からないという方は、Javaとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプJava講座の内容をもとに作成しています。
今回は、Javaに関する内容だね!
どういう内容でしょうか?
カードゲームを作成する方法について詳しく説明していくね!
お願いします!
Javaでカードゲームを作成
Javaでババ抜きを実装します。コンソールに出力し、カードの描写は”[” + カードの数値 + “]”で簡易化して表示します。
プレイヤーと相手のそれぞれが保持しているカードの情報はString型のリストに格納します。最初に分配するカードや、相手によって選ばれるカードはMath.random()を用いてランダムに選びます。
例えば1,2,3,4,5という5つの要素が格納されたリストから、ランダムにひとつの要素を取得する場合は
(int) (Math.random() * リストの要素数)
で得られる値を要素番号に指定してリストから取得します。
相手のカードを選んだら、自分のリストに追加します。自分の保有するリストに同じ値が2つある場合はその2つの要素をリストから削除します。プレイヤーと相手で交互に繰り返し、どちらかのリストが0件になったら終わりです。
実際に書いてみよう
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Babanuki { //相手のカードのリスト static List<String> player1_cards = new ArrayList<String>(); //プレイヤーのカードのリスト static List<String> player2_cards = new ArrayList<String>(); //ゲーム継続降らす static boolean continue_game = true; public static void main(String[] args) throws Exception { initGame(); Scanner sc = new Scanner(System.in); System.out.println("-------------------------------------------------------------"); System.out.println("重複を削除します: y:yes"); String s = sc.next(); if (s.equals("y")) { displayCardsReverse(clearCards(player1_cards)); displayCards(clearCards(player2_cards)); System.out.println("-------------------------------------------------------------"); } boolean isPlayer2 = true; while (continue_game) { if (isPlayer2) { System.out.println("何番目のカードを選びますか(0~" + (player1_cards.size() - 1) + "までの数値を入力): "); String n = sc.next(); int i = 0; i = Integer.parseInt(n); String choose = player1_cards.get(i); System.out.println("あなたの選んだカード:[" + choose + "]"); System.out.println("-------------------------------------------------------------"); player1_cards.remove(i); player2_cards.add(choose); displayCardsReverse(player1_cards); displayCards(clearCards(player2_cards)); System.out.println("-------------------------------------------------------------"); isPlayer2 = false; } else { int i = (int) (Math.random() * player2_cards.size()); System.out.println("相手の選んだカード :[" + player2_cards.get(i) + "]"); System.out.println("-------------------------------------------------------------"); player1_cards.add(player2_cards.get(i)); player2_cards.remove(i); displayCardsReverse(clearCards(player1_cards)); displayCards(player2_cards); System.out.println("-------------------------------------------------------------"); isPlayer2 = true; } } sc.close(); } //リスト内に同じ数字がある場合は削除する private static List<String> clearCards(List<String> list) { int i = 0; out: while (true) { //リストの要素数が0、または最後の値まで検証し終わったらループを抜ける if (list.size() == 0 || i == list.size() - 1) { break; } String text = list.get(i); int j = i + 1; while (true) { //最後の値まで検証し終わったらループを抜ける if (j == list.size()) { break; } String t = list.get(j); // 同一数値の要素を削除 if (text.equals(t)) { list.remove(j); list.remove(i); i = 0; continue out; } else { j++; } } i++; } return list; } private static void initGame() { // 1~10までとJQKをそれぞれ2枚づつ+Joker List<String> list = new ArrayList<String>(); for (int i = 1; i <= 10; i++) { list.add(String.valueOf(i)); list.add(String.valueOf(i)); } list.add("J"); list.add("J"); list.add("Q"); list.add("Q"); list.add("K"); list.add("K"); list.add("Joker"); // player1、player2にランダムにカードを配る while (list.size() > 1) { int select_num = (int) (Math.random() * list.size()); //相手のリストに追加 player1_cards.add(list.get(select_num)); list.remove(select_num); select_num = (int) (Math.random() * list.size()); //プレイヤーのリストに追加 player2_cards.add(list.get(select_num)); list.remove(select_num); } player1_cards.add(list.get(list.size() - 1)); displayCardsReverse(player1_cards); displayCards(player2_cards); } private static void displayCards(List<String> list) { //プレイヤーのカードを出力する if (list.size() == 0) { //プレイヤーのカードが0枚の場合はプレイヤーの勝ち System.out.println(" YOU WIN!!"); continue_game = false; } else { System.out.print("あなたのカード :"); for (String l : list) { //リストに保持している値を出力 System.out.print("["); System.out.print(l); System.out.print("]"); } System.out.println(); } } private static void displayCardsReverse(List<String> list) { //相手のカードを出力する if (list.size() == 0) { //相手のカードが0枚の場合は、プレイヤーの負け System.out.println(" YOU LOSE!!"); continue_game = false; } else { System.out.print("相手のカード :"); for (String l : list) { //数値を見せずに出力する System.out.print("[X]"); } System.out.println(); } } }
実行例は以下のようになります。
相手のカード :[X][X][X][X][X][X][X][X][X][X][X][X][X][X] あなたのカード :[2][K][8][8][1][3][6][9][Joker][10][4][7][1] ------------------------------------------------------------- 重複を削除します: y:yes y 相手のカード :[X][X][X][X][X][X][X][X] あなたのカード :[2][K][3][6][9][Joker][10][4][7] ------------------------------------------------------------- 何番目のカードを選びますか(0~7までの数値を入力): 0 あなたの選んだカード:[6] ------------------------------------------------------------- 相手のカード :[X][X][X][X][X][X][X] あなたのカード :[2][K][3][9][Joker][10][4][7] ------------------------------------------------------------- 相手の選んだカード :[2] ------------------------------------------------------------- 相手のカード :[X][X][X][X][X][X] あなたのカード :[K][3][9][Joker][10][4][7] ------------------------------------------------------------- 何番目のカードを選びますか(0~5までの数値を入力): 1 あなたの選んだカード:[4] ------------------------------------------------------------- 相手のカード :[X][X][X][X][X] あなたのカード :[K][3][9][Joker][10][7] ------------------------------------------------------------- 相手の選んだカード :[Joker] ------------------------------------------------------------- 相手のカード :[X][X][X][X][X][X] あなたのカード :[K][3][9][10][7] ------------------------------------------------------------- 何番目のカードを選びますか(0~5までの数値を入力): 2 あなたの選んだカード:[3] ------------------------------------------------------------- 相手のカード :[X][X][X][X][X] あなたのカード :[K][9][10][7] ------------------------------------------------------------- 相手の選んだカード :[9] ------------------------------------------------------------- 相手のカード :[X][X][X][X] あなたのカード :[K][10][7] ------------------------------------------------------------- 何番目のカードを選びますか(0~3までの数値を入力): 1 あなたの選んだカード:[10] ------------------------------------------------------------- 相手のカード :[X][X][X] あなたのカード :[K][7] ------------------------------------------------------------- 相手の選んだカード :[7] ------------------------------------------------------------- 相手のカード :[X][X] あなたのカード :[K] ------------------------------------------------------------- 何番目のカードを選びますか(0~1までの数値を入力): 1 あなたの選んだカード:[Joker] ------------------------------------------------------------- 相手のカード :[X] あなたのカード :[K][Joker] ------------------------------------------------------------- 相手の選んだカード :[K] ------------------------------------------------------------- YOU LOSE!! あなたのカード :[Joker] -------------------------------------------------------------
監修してくれたメンター
長屋雅美
独立系SIerで7年勤務後、現在はフリーのエンジニアとして自宅をオフィスとして活動しています。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもJavaやServletの技術を使ってWebアプリケーション開発を習得できるオンラインブートキャンプJava講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。