Javaでゲームを作ろう<テキストアドベンチャーゲーム>5回目

プログラム

本日の課題

完成したものはこちら
showGameScreen と updateGameScreen メソッドは、ゲームのメイン画面を表示し、ユーザーが選択肢をクリックすることでゲームの進行を管理します。
以下がその流れです:
showGameScreen メソッドは、基本的なウィンドウの設定を行い、updateGameScreen メソッドを呼び出します。
updateGameScreen メソッドは、現在のストーリーと選択肢を表示し、ユーザーの選択に応じて画面を更新します。
各ボタンは、次のストーリーインデックスを取得し、セーブデータを更新し、必要に応じてスタート画面に戻るか、ゲーム画面を更新します。

ソースコード


// ゲーム画面の表示
private static void showGameScreen(int index) {
JFrame frame = new JFrame(“Text Adventure Game”);
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
updateGameScreen(frame, index);
}

// ゲーム画面の更新
private static void updateGameScreen(JFrame frame, int index) {
frame.getContentPane().removeAll();
frame.setLayout(new BorderLayout());

// ストーリーの文章を表示するエリア
JTextArea storyArea = new JTextArea(story[index][0]);
storyArea.setEditable(false);
storyArea.setLineWrap(true);
storyArea.setWrapStyleWord(true);
storyArea.setPreferredSize(new Dimension(WIDTH, 280));
frame.add(storyArea, BorderLayout.NORTH);

// 行動1のボタン
JButton action1Button = new JButton(story[index][1]);
action1Button.setPreferredSize(new Dimension(WIDTH, 100));
action1Button.addActionListener(e -> {
int nextIndex = Integer.parseInt(story[index][3]);
saveData(nextIndex);
if (nextIndex == 999) {
frame.dispose();
showStartScreen();
} else {
updateGameScreen(frame, nextIndex);
}
});
frame.add(action1Button, BorderLayout.CENTER);

// 行動2のボタン
JButton action2Button = new JButton(story[index][2]);
action2Button.setPreferredSize(new Dimension(WIDTH, 100));
action2Button.addActionListener(e -> {
int nextIndex = Integer.parseInt(story[index][4]);
saveData(nextIndex);
if (nextIndex == 999) {
frame.dispose();
showStartScreen();
} else {
updateGameScreen(frame, nextIndex);
}
});
frame.add(action2Button, BorderLayout.SOUTH);

frame.pack();
frame.setVisible(true);
}

結果

解説

showGameScreen メソッド
このメソッドは、ゲーム画面を表示するための基本的な設定を行います。

詳細解説
1.フレームの作成
JFrame frame = new JFrame(“Text Adventure Game”);
・JFrame:ウィンドウを作成するためのクラス。
・new JFrame(“Text Adventure Game”):タイトルが “Text Adventure Game” の新しいウィンドウを作成します。

2.フレームの設定
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
・frame.setSize(WIDTH, HEIGHT):ウィンドウのサイズを設定します(幅 WIDTH (640ピクセル)、高さ HEIGHT (480ピクセル))。
・frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):ウィンドウが閉じられたときにプログラムが終了するように設定します。
・frame.setResizable(false):ウィンドウのサイズを変更できないように設定します。

3.ゲーム画面の更新
updateGameScreen(frame, index);
・updateGameScreen メソッドを呼び出して、ゲーム画面を更新します。

updateGameScreen メソッド
このメソッドは、ゲーム画面のコンテンツを設定し、ユーザーの行動に応じて画面を更新します。

詳細解説
コンテンツのクリア
frame.getContentPane().removeAll();
frame.setLayout(new BorderLayout());
・frame.getContentPane().removeAll():フレームの中身をすべて削除します。
・frame.setLayout(new BorderLayout()):レイアウトマネージャを BorderLayout に設定します。これにより、コンポーネントを北(上)、南(下)、東(右)、西(左)、中央に配置できます。

ストーリーの文章エリアの設定
JTextArea storyArea = new JTextArea(story[index][0]);
storyArea.setEditable(false);
storyArea.setLineWrap(true);
storyArea.setWrapStyleWord(true);
storyArea.setPreferredSize(new Dimension(WIDTH, 280));
frame.add(storyArea, BorderLayout.NORTH);
・JTextArea:テキストエリアを作成します。
・story[index][0]:現在のストーリーの文章を設定します。
・storyArea.setEditable(false):テキストエリアを編集不可に設定します。
・storyArea.setLineWrap(true):行の折り返しを有効にします。
・storyArea.setWrapStyleWord(true):単語単位で折り返すように設定します。
・storyArea.setPreferredSize(new Dimension(WIDTH, 280)):テキストエリアのサイズを設定します。
・frame.add(storyArea, BorderLayout.NORTH):テキストエリアをフレームの北(上)に追加します。

行動1のボタンの設定
JButton action1Button = new JButton(story[index][1]);
action1Button.setPreferredSize(new Dimension(WIDTH, 100));
action1Button.addActionListener(e -> {
int nextIndex = Integer.parseInt(story[index][3]);
saveData(nextIndex);
if (nextIndex == 999) {
frame.dispose();
showStartScreen();
} else {
updateGameScreen(frame, nextIndex);
}
});
frame.add(action1Button, BorderLayout.CENTER);
・JButton:ボタンを作成します。ここではストーリーの行動1のテキストを設定します。
・action1Button.setPreferredSize(new Dimension(WIDTH, 100)):ボタンのサイズを設定します。
・action1Button.addActionListener(e -> { … }):ボタンがクリックされたときに実行されるアクションを設定します。
・int nextIndex = Integer.parseInt(story[index][3]):次のストーリーインデックスを取得します。
・saveData(nextIndex):セーブデータを更新します。
・if (nextIndex == 999) { frame.dispose(); showStartScreen(); } else { updateGameScreen(frame, nextIndex); }:次のインデックスが999ならスタート画面に戻り、それ以外ならゲーム画面を更新します。
・frame.add(action1Button, BorderLayout.CENTER):ボタンをフレームの中央に追加します。

行動2のボタンの設定
JButton action2Button = new JButton(story[index][2]);
action2Button.setPreferredSize(new Dimension(WIDTH, 100));
action2Button.addActionListener(e -> {
int nextIndex = Integer.parseInt(story[index][4]);
saveData(nextIndex);
if (nextIndex == 999) {
frame.dispose();
showStartScreen();
} else {
updateGameScreen(frame, nextIndex);
}
});
frame.add(action2Button, BorderLayout.SOUTH);
・JButton:ボタンを作成します。ここではストーリーの行動2のテキストを設定します。
・action2Button.setPreferredSize(new Dimension(WIDTH, 100)):ボタンのサイズを設定します。
・action2Button.addActionListener(e -> { … }):ボタンがクリックされたときに実行されるアクションを設定します。
・int nextIndex = Integer.parseInt(story[index][4]):次のストーリーインデックスを取得します。
・saveData(nextIndex):セーブデータを更新します。
・if (nextIndex == 999) { frame.dispose(); showStartScreen(); } else { updateGameScreen(frame, nextIndex); }:次のインデックスが999ならスタート画面に戻り、それ以外ならゲーム画面を更新します。
・frame.add(action2Button, BorderLayout.SOUTH):ボタンをフレームの南(下)に追加します。

フレームの表示
frame.pack();
frame.setVisible(true);
・frame.pack():フレームのサイズを適切に調整します。
・frame.setVisible(true):フレームを表示します。

目次に戻る

スポンサーリンク

コメント

タイトルとURLをコピーしました