Created
June 3, 2015 06:02
-
-
Save HaruhiroTakahashi/a8ed70bb4903f7a0dc6f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package Java; | |
//========================================================================================== | |
// メイン(インスタント化練習に使用したため、ほぼ抜け殻) | |
// ========================================================================================== | |
public class part18 { | |
public static void main(String[] args) throws java.io.IOException { | |
System.out.println("ゲームブラウザを表示します。"); | |
new MyFrame(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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);// メッセージ表示 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); // 画像を貼り付け | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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