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講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。