| 情報学部 | 菅沼ホーム | Java 目次 | 索引 | 
/*************************/
/* 迷路                  */
/*   coded by Y.Suganuma */
/*************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import main.*;
public class Game {
	public static void main (String[] args)
	{
		Win win = new Win("迷路");
	}
}
class Win extends JFrame
{
	/******************/
	/* コンストラクタ */
	/******************/
	Win(String name)
	{
					// JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す)
		super(name);
					// Windowの大きさ
		setSize(360, 490);   // 40+20, 70+20
					// MainPanel の大きさを決定
		Dimension size = getSize();
		size.width  -=60;
		size.height -=90;
					// ContentPain を取得し,設定
		Container CP = getContentPane();   // ContentPane を取得
		CP.setLayout(null);   // レイアウトマネージャを停止
		CP.setBackground(new Color(220, 255, 220));   // 背景色
					// MainPanel を追加し,設定
		MainPanel pn = new MainPanel(size);   // MainPanel オブジェクトの生成
		CP.add(pn);   // MainPanel オブジェクトを ContentPane に追加
		pn.setSize(size.width, size.height);
		pn.setLocation(10, 10);
					// ウィンドウを表示
		setVisible(true);
					// イベントリスナ
		addWindowListener(new WinEnd());
	}
	/******************************/
	/* 上,左,下,右の余白の設定 */
	/******************************/
	public Insets getInsets()
	{
		return new Insets(50, 20, 20, 20);
	}
	/************/
	/* 終了処理 */
	/************/
	class WinEnd extends WindowAdapter
	{
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}
}
				
package main;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import start.*;
import game.*;
import clear.*;
public class MainPanel extends JPanel implements Runnable
{
	Dimension size;   // パネルの大きさ
	boolean in_game = true;   // ゲーム実行中はtrue
	public int state = 0;   // ゲーム状態(0:表紙,1:ゲーム,2:クリア,3:終了)
	public int level = 1;   // ゲームレベル
	int old_state = 0;   // 直前のゲーム状態
	StartPanel sp;
	GamePanel gp;
	GameClearPanel gcp;
	Thread td;
			// コンストラクタ
	public MainPanel(Dimension size1)
	{
		size = size1;
					// グリッドレイアウト
		setLayout(new GridLayout(1, 1, 0, 0));
					// ゲームパネルの生成
		sp = new StartPanel(size, this);   // スタート(タイトル)
		add(sp);
					// スレッドの生成
		td = new Thread(this);
		td.start();
	}
			// ゲームの状態を変更
	public void run()
	{
		while (in_game) {
			try {
				td.sleep(100);   // 100 ms 毎の実施
			}
			catch (InterruptedException e) {}
			if (state != old_state) {
							// 前のパネルの削除
				if (old_state == 0)
					remove(sp);
				else if (old_state == 1)
					remove(gp);
				else
					remove(gcp);
							// 新しいパネルの追加
				if (state == 3)   // ゲーム終了
					in_game = false;
				else {
					if (state == 0) {   // StartPanel
						sp = new StartPanel(size, this);
						add(sp);
					}
					else if (state == 1) {   // GamePanel
						gp = new GamePanel(size, this);
						add(gp);
					}
					else {   // GameClearPanel
						gcp = new GameClearPanel(size, this);
						add(gcp);
					}
					validate();
					old_state = state;
				}
			}
		}
	}
}
				
001	package start;
002	
003	import java.awt.*;
004	import java.awt.event.*;
005	import javax.swing.*;
006	import main.*;
007	
008	public class StartPanel extends JPanel implements ActionListener
009	{
010		boolean in_game = true;
011		Dimension size;   // パネルの大きさ
012		MainPanel mp;
013		JButton bt;
014				// コンストラクタ
015		public StartPanel(Dimension size1, MainPanel mp1)
016		{
017			size = size1;
018			mp   = mp1;
019						// レイアウトマネージャの停止
020			setLayout(null);
021						// 背景色の設定
022			setBackground(Color.white);
023						// ボタンの配置
024			Font f = new Font("SansSerif", Font.BOLD, 20);
025			FontMetrics fm = getFontMetrics(f);
026			String str = "遊び方";
027			int w = fm.stringWidth(str) + 40;
028			int h = fm.getHeight() + 10;
029			bt = new JButton(str);
030			bt.setFont(f);
031			bt.addActionListener(this);
032			bt.setSize(w, h);
033			bt.setLocation(size.width/2-w/2, 5);
034			add(bt);
035						// マウスリスナの追加
036			addMouseListener(new Mouse());
037		}
038				// 描画
039		public void paintComponent(Graphics g)
040		{
041			super.paintComponent(g);   // 親クラスの描画
042			FontMetrics fm;
043			Font f;
044			String str;
045			int w, h;
046	
047			f   = new Font("SansSerif", Font.BOLD, 40);
048			fm  = g.getFontMetrics(f);
049			str = "迷路";
050			w   = fm.stringWidth(str);
051			h   = fm.getHeight();
052			g.setFont(f);
053			g.drawString(str, size.width/2-w/2, size.height/2);
054	
055			f   = new Font("Serif", Font.PLAIN, 20);
056			fm  = g.getFontMetrics(f);
057			str = "ゲーム開始:ダブルクリック";
058			w   = fm.stringWidth(str);
059			h   = size.height - fm.getHeight() - 10;
060			g.setFont(f);
061			g.drawString(str, size.width/2-w/2, h);
062		}
063				// ボタンがクリックされたときの処理
064		public void actionPerformed(ActionEvent e)
065		{
066			if (e.getSource() == bt) {
067				Method db = new Method();
068				db.setVisible(true);
069				requestFocusInWindow();
070			}
071		}
072				// ダブルクリックされたときの処理
073		class Mouse extends MouseAdapter {
074			public void mouseClicked(MouseEvent e) {
075				if (e.getClickCount() == 2)
076					mp.state = 1;
077			}
078		}
079	}
080	
081	/******************/
082	/* ゲームの遊び方 */
083	/******************/
084	class Method extends JDialog
085	{
086				// コンストラクタ
087		Method()
088		{
089			setTitle("ゲームの遊び方");
090					// ContetPain
091			Container cp = getContentPane();
092			cp.setLayout(new FlowLayout(FlowLayout.CENTER));
093			cp.setBackground(new Color(220, 255, 220));   // 背景色
094			Font f = new Font("MS 明朝", Font.PLAIN, 20);
095			setSize(550, 160);
096					// TextArea の追加
097			JTextArea ta = new JTextArea(5, 50);
098			ta.setFont(f);
099			ta.setEditable(false);
100			ta.setLineWrap(true);
101			ta.setText("・ゲーム開始: 画面上でダブルクリック\n");
102	
103			ta.append("・主人公の移動: 「上」,「下」,「左」,「右」ボタンをクリックする\n");
104			JScrollPane scroll = new JScrollPane(ta);
105			cp.add(scroll);
106					// Window を閉じるため
107			addWindowListener(new WinEnd());
108		}
109					// 終了処理
110		class WinEnd extends WindowAdapter
111		{
112			public void windowClosing(WindowEvent e) {
113				setVisible(false);
114			}
115		}
116	}
				
001	package game;
002	
003	import java.awt.*;
004	import javax.swing.*;
005	import main.*;
006	
007	public class GamePanel extends JPanel
008	{
009				// コンストラクタ
010		public GamePanel(Dimension size, MainPanel mp)
011		{
012						// レイアウトマネージャの停止
013			setLayout(null);
014						// 背景色の設定
015			setBackground(new Color(220, 255, 220));   // 背景色
016						// パネルの配置
017			Maze mz = new Maze(size, mp);
018			mz.setSize(size.width, size.width);
019			mz.setLocation(0, 0);
020			add(mz);
021	
022			Operation op = new Operation(size.width, size.height-size.width-10, mp, mz);
023			op.setSize(size.width, size.height-size.width-10);
024			op.setLocation(0, size.width+10);
025			add(op);
026		}
027	}
028	
029	package game;
030	
031	import java.awt.*;
032	import javax.swing.*;
033	import main.*;
034	
035	class Maze extends JPanel
036	{
037				// コンストラクタ
038		public Maze(Dimension size, MainPanel mp)
039		{
040						// レイアウトマネージャの停止
041			setLayout(null);
042						// 背景色の設定
043			setBackground(Color.white);
044		}
045	}
046	
047	package game;
048	
049	import java.awt.*;
050	import java.awt.event.*;
051	import javax.swing.*;
052	import main.*;
053	
054	public class Operation extends JPanel implements ActionListener
055	{
056		MainPanel mp;
057		Maze mz;
058		JButton left, right, up, down;
059				// コンストラクタ
060		public Operation(int width, int height, MainPanel mp1, Maze mz1)
061		{
062			mp = mp1;
063			mz = mz1;
064						// レイアウトマネージャの停止
065			setLayout(null);
066						// 背景色の設定
067			setBackground(Color.white);
068						// ボタンの配置
069			Font f = new Font("SansSerif", Font.BOLD, 12);
070			FontMetrics fm = getFontMetrics(f);
071	
072			String str1 = "左";
073			int w1 = fm.stringWidth(str1) + 40;
074			int h1 = fm.getHeight() + 10;
075			left = new JButton(str1);
076			left.setFont(f);
077			left.addActionListener(this);   // アクションリスナ
078			left.setSize(w1, h1);
079	
080			String str2 = "右";
081			int w2 = fm.stringWidth(str2) + 40;
082			int h2 = fm.getHeight() + 10;
083			right = new JButton(str2);
084			right.setFont(f);
085			right.addActionListener(this);   // アクションリスナ
086			right.setSize(w2, h2);
087	
088			String str3 = "上";
089			int w3 = fm.stringWidth(str3) + 40;
090			int h3 = fm.getHeight() + 10;
091			up = new JButton(str3);
092			up.setFont(f);
093			up.addActionListener(this);   // アクションリスナ
094			up.setSize(w3, h3);
095	
096			String str4 = "下";
097			int w4 = fm.stringWidth(str4) + 40;
098			int h4 = fm.getHeight() + 10;
099			down = new JButton(str4);
100			down.setFont(f);
101			down.addActionListener(this);   // アクションリスナ
102			down.setSize(w4, h4);
103	
104			int w = w1 + w2 + 5;
105			left.setLocation(width/2-w/2, height/2-h1/2);
106			add(left);
107			right.setLocation(width/2-w/2+w1+5, height/2-h1/2);
108			add(right);
109			up.setLocation(width/2-w3/2, height/2-h1/2-h3-5);
110			add(up);
111			down.setLocation(width/2-w4/2, height/2+h1/2+5);
112			add(down);
113		}
114				// ボタンがクリックされたときの処理
115		public void actionPerformed(ActionEvent e)
116		{
117			if (e.getSource() == left)   // ゲームクリア
118				mp.state = 2;
119		}
120	}
				
package clear;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import main.*;
public class GameClearPanel extends JPanel implements ActionListener
{
	Dimension size;   // パネルの大きさ
	MainPanel mp;
	JButton bt1, bt2;
			// コンストラクタ
	public GameClearPanel(Dimension size1, MainPanel mp1)
	{
		size = size1;
		mp   = mp1;
					// レイアウトマネージャの停止
		setLayout(null);
					// 背景色の設定
		setBackground(Color.white);
					// ボタンの配置
		Font f = new Font("SansSerif", Font.BOLD, 20);
		FontMetrics fm = getFontMetrics(f);
		String str1 = "ゲーム終了";
		int w1 = fm.stringWidth(str1) + 40;
		int h1 = fm.getHeight() + 10;
		bt1 = new JButton(str1);
		bt1.setFont(f);
		bt1.addActionListener(this);   // アクションリスナ
		bt1.setSize(w1, h1);
		bt1.setLocation(size.width/2-w1-5, size.height-h1-20);
		add(bt1);
		String str2;
		if (mp.level == 2)
			str2 = "最初から再開";
		else
			str2 = "次のレベル";
		int w2 = fm.stringWidth(str2) + 40;
		int h2 = fm.getHeight() + 10;
		bt2 = new JButton(str2);
		bt2.setFont(f);
		bt2.addActionListener(this);   // アクションリスナ
		bt2.setSize(w2, h2);
		bt2.setLocation(size.width/2+5, size.height-h2-20);
		add(bt2);
	}
			// 描画
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);   // 親クラスの描画
		Font f = new Font("SansSerif", Font.BOLD, 40);
		FontMetrics fm = g.getFontMetrics(f);
		String str = "Game Clear!";
		int w = fm.stringWidth(str);
		g.setFont(f);
		g.drawString(str, size.width/2-w/2, size.height/2);
	}
			// ボタンがクリックされたときの処理
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource() == bt1) {
			mp.state = 3;
			bt1.setEnabled(false);
			bt2.setEnabled(false);
		}
		else {
			mp.level++;
			if (mp.level > 2) {   // 最初からゲーム再開
				mp.state = 0;
				mp.level = 1;
			}
			else   // レベルアップ
				mp.state = 1;
		}
	}
}
				
package game;
import java.awt.*;
class Hero
{
	Color color = new Color(0, 255, 0);   // 主人公の色
	int x, y;   // 主人公の位置
	int w = 13;   // 主人公の直径
			// コンストラクタ
	Hero()
	{
		x = 19;
		y = 19;
	}
}
			

001 package game; 002 003 import java.awt.*; 004 import java.awt.image.*; 005 import javax.swing.*; 006 import main.*; 007 008 class Maze extends JPanel 009 { 010 int x, y; // 迷路の位置 011 int width = 40; // 迷路の幅 012 int height = 40; // 迷路の高さ 013 int blk = 15; // 迷路におけるブロックのサイズ 014 Image image; // 迷路 015 int map1[][] = 016 {{1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 017 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 018 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 019 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 020 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 021 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 022 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 023 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 024 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 025 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 026 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 027 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 028 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 029 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 030 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 031 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1}, 032 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, 033 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1}, 034 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1}, 035 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1}, 036 {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 037 {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 038 {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 039 {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 040 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 041 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 042 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 043 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 044 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1}, 045 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1}, 046 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, 047 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, 048 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 049 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 050 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 051 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 052 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 053 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 054 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 055 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}; 056 int map2[][] = 057 {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 058 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 059 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 060 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 061 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 062 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 063 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, 064 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, 065 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}, 066 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}, 067 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 068 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 069 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 070 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 071 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}, 072 {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1}, 073 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1}, 074 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1}, 075 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1}, 076 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1}, 077 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 078 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 079 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 080 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 081 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 082 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 083 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 084 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1}, 085 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1}, 086 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1}, 087 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, 088 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, 089 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 090 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 091 {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 092 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 093 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 094 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 095 {1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1}, 096 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}; 097 int map[][]; // 迷路の地図(0:道,1:壁) 098 Hero hr; // 主人公 099 // コンストラクタ 100 public Maze(Dimension size, MainPanel mp) 101 { 102 // レイアウトマネージャの停止 103 setLayout(null); 104 // 背景色の設定 105 setBackground(Color.white); 106 // 迷路の生成 107 if (mp.level == 1) 108 map = map1; 109 else 110 map = map2; 111 int w = blk * width, h = blk * height; 112 int pixels[] = new int [w * h]; 113 for (int i1 = 0; i1 < height; i1++) { 114 int k1 = i1 * blk ; 115 for (int i2 = 0; i2 < width; i2++) { 116 int k2 = i2 * blk; 117 int cl = (map[i1][i2] > 0) ? 0xff404040 : 0xffffffff; 118 for (int i3 = k1; i3 < k1+blk; i3++) { 119 for (int i4 = k2; i4 < k2+blk; i4++) { 120 int k = i3 * w + i4; 121 pixels[k] = cl; 122 } 123 } 124 } 125 } 126 MemoryImageSource mis = new MemoryImageSource(w, h, pixels, 0, w); 127 image = createImage(mis); 128 // 迷路の初期位置 129 x = -9; 130 y = -9; 131 // 主人公の生成 132 hr = new Hero(); 133 } 134 // 描画 135 public void paintComponent(Graphics g) 136 { 137 super.paintComponent(g); // 親クラスの描画 138 // 迷路 139 g.drawImage(image, x*blk, y*blk, this); 140 // 主人公 141 g.setColor(hr.color); 142 int px = (hr.x + x) * blk + (blk - hr.w) / 2; 143 int py = (hr.y + y) * blk + (blk - hr.w) / 2; 144 g.fillOval(px, py, hr.w, hr.w); 145 } 146 }
int x[][] = new int [2][3];
int x[][] = new int [2][]; x[0] = new int [3]; // 以下,繰り返し文を使用可能 x[1] = new int [3];
	int x[][] = {{1, 2, 3}, {4, 5, 6}};   // 内側の括弧が各行に相当				
	int x1[] = {1, 2, 3};
	int x2[] = {4, 5, 6};
	int x[][] = {x1, x2};				
y[0] : x[0][0] y[1] : x[0][1] y[2] : x[0][2] y[3] : x[0][3] y[4] : x[1][0] y[5] : x[1][1] y[6] : x[1][2] y[7] : x[1][3] y[8] : x[2][0] y[9] : x[2][1] y[10] : x[2][2] y[11] : x[2][3]
変数 = (論理式) ? 式1 : 式2
001	package game;
002	
003	import java.awt.*;
004	import java.awt.event.*;
005	import javax.swing.*;
006	import main.*;
007	
008	public class Operation extends JPanel implements ActionListener
009	{
010		MainPanel mp;
011		Maze mz;
012		JButton left, right, up, down;
013				// コンストラクタ
014		public Operation(int width, int height, MainPanel mp1, Maze mz1)
015		{
016			mp = mp1;
017			mz = mz1;
018						// レイアウトマネージャの停止
019			setLayout(null);
020						// 背景色の設定
021			setBackground(Color.white);
022						// ボタンの配置
023			Font f = new Font("SansSerif", Font.BOLD, 12);
024			FontMetrics fm = getFontMetrics(f);
025	
026			String str1 = "左";
027			int w1 = fm.stringWidth(str1) + 40;
028			int h1 = fm.getHeight() + 10;
029			left = new JButton(str1);
030			left.setFont(f);
031			left.addActionListener(this);   // アクションリスナ
032			left.setSize(w1, h1);
033	
034			String str2 = "右";
035			int w2 = fm.stringWidth(str2) + 40;
036			int h2 = fm.getHeight() + 10;
037			right = new JButton(str2);
038			right.setFont(f);
039			right.addActionListener(this);   // アクションリスナ
040			right.setSize(w2, h2);
041	
042			String str3 = "上";
043			int w3 = fm.stringWidth(str3) + 40;
044			int h3 = fm.getHeight() + 10;
045			up = new JButton(str3);
046			up.setFont(f);
047			up.addActionListener(this);   // アクションリスナ
048			up.setSize(w3, h3);
049	
050			String str4 = "下";
051			int w4 = fm.stringWidth(str4) + 40;
052			int h4 = fm.getHeight() + 10;
053			down = new JButton(str4);
054			down.setFont(f);
055			down.addActionListener(this);   // アクションリスナ
056			down.setSize(w4, h4);
057	
058			int w = w1 + w2 + 5;
059			left.setLocation(width/2-w/2, height/2-h1/2);
060			add(left);
061			right.setLocation(width/2-w/2+w1+5, height/2-h1/2);
062			add(right);
063			up.setLocation(width/2-w3/2, height/2-h1/2-h3-5);
064			add(up);
065			down.setLocation(width/2-w4/2, height/2+h1/2+5);
066			add(down);
067	
068			check();   // ボタンの有効性のチェック
069		}
070				// ボタンがクリックされたときの処理
071		public void actionPerformed(ActionEvent e)
072		{
073						// 移動
074			if (e.getSource() == left) {
075				mz.hr.x--;
076				mz.x++;
077			}
078			else if (e.getSource() == right) {
079				mz.hr.x++;
080				mz.x--;
081			}
082			else if (e.getSource() == up) {
083				mz.hr.y--;
084				mz.y++;
085			}
086			else {
087				mz.hr.y++;
088				mz.y--;
089			}
090						// ゲームクリア?
091			if (mz.hr.x < 0 || mz.hr.x >= mz.width || mz.hr.y < 0 || mz.hr.y >= mz.height)
092				mp.state = 2;
093						// ボタンの設定
094			else {
095				left.setEnabled(true);
096				right.setEnabled(true);
097				up.setEnabled(true);
098				down.setEnabled(true);
099				check();   // ボタンの有効性のチェック
100			}
101						// 再描画
102			mz.repaint();
103		}
104				// ボタンの有効性のチェック
105		void check()
106		{
107			if (mz.hr.x > 0 && mz.map[mz.hr.y][mz.hr.x-1] > 0)
108				left.setEnabled(false);
109			if (mz.hr.x < mz.width-1 && mz.map[mz.hr.y][mz.hr.x+1] > 0)
110				right.setEnabled(false);
111			if (mz.hr.y > 0 && mz.map[mz.hr.y-1][mz.hr.x] > 0)
112				up.setEnabled(false);
113			if (mz.hr.y < mz.height-1 && mz.map[mz.hr.y+1][mz.hr.x] > 0)
114				down.setEnabled(false);
115		}
116	}
			
| 情報学部 | 菅沼ホーム | Java 目次 | 索引 |