Skip to content

Instantly share code, notes, and snippets.

@HaruhiroTakahashi
Created June 3, 2015 06:02
Show Gist options
  • Save HaruhiroTakahashi/a8ed70bb4903f7a0dc6f to your computer and use it in GitHub Desktop.
Save HaruhiroTakahashi/a8ed70bb4903f7a0dc6f to your computer and use it in GitHub Desktop.
package Java;
//==========================================================================================
// メイン(インスタント化練習に使用したため、ほぼ抜け殻)
// ==========================================================================================
public class part18 {
public static void main(String[] args) throws java.io.IOException {
System.out.println("ゲームブラウザを表示します。");
new MyFrame();
}
}
package Java;
import java.awt.Color;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MyFrame extends JFrame {
JLabel jlMsg;
JPanel jpChild2;
BufferedImage biMonster;
JLabel jlChild;
JLabel jlMain;
Player m_player;
public MyFrame() throws java.io.IOException {
m_player = new Player();
File file = new File("test1.jpeg"); // ファイルを開く
biMonster = ImageIO.read(file); // 画像全体を読み込む
setBounds(0, 0, 1100, 1400); // フレームサイズ設定
setDefaultCloseOperation(EXIT_ON_CLOSE); // ×ボタン有効化
add(createBasePanel()); // 親パネルを作成し、フレームに貼り付け
setVisible(true); // フレームを表示状態へ
enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK); // キー入力有効化
}
// ==========================================================================================
// 選択イベント処理
// ==========================================================================================
protected void processKeyEvent(java.awt.event.KeyEvent e) {
if (e.getID() == java.awt.event.KeyEvent.KEY_PRESSED) {
System.out.println("キー " + e.getKeyCode() + "のイベント" + e.getID()
+ "が、発生");
if (e.getKeyCode() == java.awt.event.KeyEvent.VK_1) {
if (m_player.getLV() < 150) {//ギムレーを倒せるレベル設定
jlMsg.setText("<HTML>レベルが足りなくて負けてしまった・・・!<br>"
+ "      【GAME OVER】<br><br>"
+ "         retry ? → push ENTER");
reStart();
} else {
jlMsg.setText("<HTML>ようやくギムレーを倒し、平和な未来が訪れた!<br>"
+ "      【GAME CLEAR】<br><br>" + "        ~fin~");
reStart();
}
}
if (e.getKeyCode() == java.awt.event.KeyEvent.VK_2) {
jpChild2.removeAll();
addMonster();
}
if (e.getKeyCode() == java.awt.event.KeyEvent.VK_3) {
if (m_player.gold >= 5) {
m_player.gold -= 5;
setHP(m_player.getLV());
jlMsg.setText("<html>宿屋で休んだおかげで体力が全回復した!<br><br>" + "ENTERで戻る");
} else {
jlMsg.setText("<html>金がないけど泊まりたい?(・∀・)カエレ!! <br><br>"
+ "ENTERで戻る");
}
}
if (e.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
jpChild2.removeAll();
jpChild2.add(jlMain);
if (m_player == null) {
jlMsg.setText("再び邪竜ギムレーが世界を滅ぼそうとしています。"); // リスタート画面
reStart();
} else {
jlMsg.setText("<html>何をしますか?<br><br>" + "1.ギムレーを倒しに行こう<br>"
+ "2.修行するべきだ<br>" + "3.宿屋で休みたい");
}
}
}
}
void setHP(int a) {// HP表示処理
m_player.hp = a;
jlChild.setText(m_player.getStatusString());
}
void setLV(int a) {// LV表示処理
m_player.setLV(jlChild, a);
}
void reStart() {//リスタート表示処理
m_player = new Player();
jlChild.setText(m_player.getStatusString());
}
// ==========================================================================================
// 基盤パネル作成
// ==========================================================================================
JPanel createBasePanel() throws java.io.IOException {
// 親パネル
JPanel jp = MyLib.createPanel(Color.BLACK);
// ルキナ画像表示
JLabel jlImage = new JLabel(new javax.swing.ImageIcon("ルキナ.jpeg"));
jlImage.setBounds(0, 0, 384, 384);
// jlImage.setSize(384, 384);
jp.add(jlImage);
// フォントを作成
Font f = new Font("メイリオ", Font.BOLD, 40);
// レイアウト1行目
// パネルを作成し、親パネルに貼り付け
JPanel jpChild = MyLib.createPanel(Color.blue);
jp.add(jpChild);
// ラベルを作成し、子パネルに貼り付け
jlChild = new JLabel(m_player.getStatusString());
jlChild.setFont(f);
jlChild.setForeground(Color.WHITE);
jlChild.setPreferredSize(new java.awt.Dimension(1000, 60));
jpChild.add(jlChild);
// レイアウト2行目
// パネルを作成し、親パネルに貼り付け
jpChild2 = MyLib.createPanel(Color.CYAN);
jp.add(jpChild2);
// 選択肢をパネルに貼り付け JLabel jlMain = new
jlMain = new JLabel("<html>1. 魔王を倒しに行く<br>2. 修行する<br>3. 宿屋に泊まる");
jlMain.setFont(f);
jpChild2.add(jlMain);
// 区切り線(白)
JPanel jpHR = MyLib.createPanel(Color.white);
jpHR.setPreferredSize(new java.awt.Dimension(1000, 4));
jp.add(jpHR);
// レイアウト3行目
// ラベルを作成し、親パネルに貼り付け
jlMsg = new JLabel("<html>邪竜ギムレーが世界を滅ぼそうとしています<br><br>"
+ "1.ギムレーを倒せそうな気がする<br>" + "2.まずは修行する<br>"
+ "3.とりあえず精神的に疲れてるので宿屋に泊る");
jlMsg.setFont(f);
jlMsg.setForeground(new Color(255, 128, 0));
jp.add(jlMsg);
return (jp);
}
// ==========================================================================================
// モンスターをパネルに貼り付け and 選択2番処理
// ==========================================================================================
void addMonster() {
java.util.Random r = new java.util.Random(); // 敵出現
int e = r.nextInt(6) + 1; // 敵の数
// 敵グラフィック表示
int cw = 41; // セルサイズ・幅
int ch = 48; // セルサイズ・高さ
int sw = cw * 4; // 表示サイズ・幅
int sh = ch * 4; // 表示サイズ・高さ
for (int i = 0; i < e; i = i + 1) {
MyLib.putMonster(jpChild2, biMonster, 0, 9, cw, ch, sw, sh); // モンスター0-9番目表示
}
// HPを減らす
int d = r.nextInt(8);
String s = "<html> 敵を " + e + " 匹、倒した<br>" + m_player.name + "は、" + d
+ " ポイントのダメージを受けた!<br>";
m_player.hp -= d;
jlChild.setText(m_player.getStatusString()); //メモ setTextは1行でしか文字列を表わせれない
if (m_player.hp < 0) {
m_player = null;
}
//2番選択後処理
try {
m_player.setLV(jlChild, m_player.getLV() + e);
s += "<html>レベルが" + m_player.getLV() + "になった<br><br>"
+ "1.たぶんもうギムレー余裕だから倒しに行く<br>" + "2.さらに修行をする<br>"
+ "3.休憩したいから宿屋へ行こう";
} catch (NullPointerException npe) {
s += "<html>=======ルキナの体力がもう限界です=======<br>" + "「くっ…一時撤退します…<br>"
+ " 私は、ここで倒れるわけにはいきません…!」<br>" + ""
+ "       【GAME OVER】<br>"
+ "              retry ? → push ENTER";
}
jlMsg.setText(s);// メッセージ表示
}
}
package Java;
import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MyLib {
// ==========================================================================================
// パネルを作成し、背景色を設定します。
// ==========================================================================================
static JPanel createPanel(Color c) {
JPanel jp = new JPanel();
jp.setBackground(c);
return (jp);
}
/**
* モンスターを表示します。
*
* @param jpChild2
* 表示対象パネル
* @param ba
* 画像全体
* @param x
* 表示するセル座標x
* @param y
* 表示するセル座標y
* @param cw
* セルの大きさ・幅
* @param ch
* セルの大きさ・高さ
* @param sw
* 表示サイズ・幅
* @param sh
* 表示サイズ・高さ
*/
static void putMonster(JPanel jpChild2, BufferedImage ba, int x, int y,
int cw, int ch, int sw, int sh) {
BufferedImage bs = ba.getSubimage(cw * x, ch * y, cw, ch);
Image im = bs.getScaledInstance(sw, sh, Image.SCALE_DEFAULT);
ImageIcon ii = new ImageIcon(im); // JLabel用に型変換
JLabel jlImage = new JLabel(ii); // 画像部品を作成
jlImage.setSize(sw, sh); // 画像サイズを設定
jpChild2.add(jlImage); // 画像を貼り付け
}
}
package Java;
import javax.swing.JLabel;
//==========================================================================================
// プレイヤー設定
// ==========================================================================================
public class Player {
String name; // プレイヤーの名前
private int lv; // プレイヤーのレベル
int hp; // プレイヤーのHP
int gold; // プレイヤーの所持金
public Player() { // ここの値を変更してステータスを反映させる
name = "ルキナ"; // 名前
lv = 1; // レベル
hp = 30; // HP
gold = 50; // 所持金
}
public String getStatusString() {
return (" " + name + " LV" + lv + " HP" + hp + " " + gold + "GOLD");
}
//メモ class Playerちゃんのprivateを覗き見するための関数
public int getLV() {
return (lv);
}
public void setLV(JLabel jlChild, int a) {
lv = a;
jlChild.setText(getStatusString());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment