Javaの実際の戦闘倉庫番-初心者への道

    当時、私は長い間検索しましたが、実用的なチュートリアルビデオはほとんど見つかりませんでした。結局、インターネットでソースコードやアイデアを読んでから、これを書くのに長い時間がかかりました。私が書いたものはまだ非常に悪いと感じています。これを書いたとき、私は地図を書きませんでしたが、インターネットで地図を引用しました(異なる地図をマークするために0〜9を使用することは実際に地図を描くのにはるかに低い難易度です。 )。

    まず、私たちがやろうとしていることについてお話ししましょう。私たちが達成したいのは、伝統的な倉庫番ミニゲームです。伝統的な倉庫番ミニゲームとは?背景がとても大きく、地図をマークする場所が違うので、次のプログラムを例に取ってみましょう。伝統的な倉庫番ゲーム(en ...これらの機能は子供の頃にキャンディーバーの電話で利用できたのを覚えています)。次のレベルに応じて、最初のレベル、前のレベル、次のレベル、最後のレベルにスキップできます。ユーザーの要件。ゲームを再開することもできます。チェスを開始、後悔し、レベルを選択し、その他の操作を行います。ここで、4つの単語が書かれているのにボタンに2つの単語しか表示されない理由を質問したいと思います。ボタンのサイズを変えてみたら、ちょっと面白かったです。

  あまりナンセンスだと言ったので、達成する必要のある要件を要約しましょう。

  1.ユーザーインターフェイス上の何か

  (1)オプションメニューバーがありますので、以下のサブメニュー機能を実現する必要があります。再起動し、前のレベル、次のレベル、レベルを選択し、1つのステップを後悔して、終了します。もちろん、分割線も含まれています。

  (2)設定の音楽メニューバーがあり、あなたが書いた曲の名前があります、私のものは非常に低いです。もちろん、これらは相互に排他的であるため、次の曲のメニューバーボタンをクリックすると、現在再生中の音楽をユーザーに視覚的にフィードバックする必要があります。

  (3)ヘルプメニューバーがあり、その下に「このゲームについて」というオプションがあります。メッセージダイアログボックスなど、メッセージを無差別にポップアップするだけです。

  (4)操作に対応するボタンがいくつかあります。ここに追加、再生、後悔1ステップ、最初のレベル、前のレベル、次のレベル、選択したレベル、最終レベル、音楽をオフにし、クリックして音楽をオンにします(つまり、音楽をオフにし、オンにします)ここの音楽)私のローは4文字を超えることはできないので、代わりに3文字を使用しました)。

  (5)音楽を変更するためのドロップダウンメニューもあります。これについては何も言うことはありません。黄色の「音楽を変える」は、テキストを直接表示するだけです。

  (6)各パスの後に、次のレベルに入るかどうかを尋ねるメッセージダイアログボックスがポップアップ表示されます

  2.地図は製図板です。ここでは、20 * 20枚の小さな写真で構成される地図を定義しました。エム。個人的には、審美的に醜いpはありません。

  ここではあまり詳しく説明しませんが、基本的にはコードのコメントで説明しました。このゲームの判断についてもう少し話してください。ここで使用する方法は、さまざまな数字を使用してさまざまな画像、つまりさまざまな正方形を表すことです。これにより、移動やマップの生成がより便利になります。勝つか負けるかを判断します。個人的には、JFrameを見れば基本的にそれほど難しくないと思います。コードの唯一の問題は動きの判断です。実際、あなたはそれを書いて下付き文字をコピーして変更するだけです。繰り返しになりますが、下付き文字に注意してください。そのときに作成されたウィンドウ座標は、2次元配列の座標と同じではないため、変更の量を増やすのが面倒です。ご理解いただければ幸いです。

  私のバグは4つの異なる方向の写真です。そのため、移動できないときに別のキーを押すことを検討する必要があり、画像を更新する必要があります。さて、最初にコードを示しましょう。JFrameの詳細なアプリケーションと理解、コードの詳細な説明、およびいくつかのゲームの詳細な説明を追加します。さて、クラスからの脱出はもうすぐ終わります、そして私は逃げる準備ができています。

まず、クライアントのクラスコードの実装を示します。

package xyz.lzw.box;
/**
 * 游戏实现 客户端
 */
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;


public class mainFrame extends JFrame implements ActionListener,ItemListener {
	JLabel lb;
	JLabel lb2;
	JButton renew1,last1,choose1,first1,over1,muc1,back1,next1;
	MainPanel panel;
	Sound sound;
	//菜单栏
	JComboBox jc = new JComboBox();
	MenuItem renew = new MenuItem("重新开始");
	MenuItem back = new MenuItem("悔一步");
	MenuItem last = new MenuItem("上一关");
	MenuItem next = new MenuItem("下一关");
	MenuItem choose = new MenuItem("选择关卡");
	MenuItem exit = new MenuItem("退出");
	MenuItem qin = new MenuItem("琴箫合奏");
	MenuItem guang = new MenuItem("BGM");
	MenuItem mid1 = new MenuItem("mid1");
	MenuItem mid2 = new MenuItem("mid2");
	MenuItem nor = new MenuItem("默认");
	MenuItem about = new MenuItem("关于此游戏");
	//构造函数,实现图形用户界面
	mainFrame(){
		super("Puppet制作 恶搞小游戏");
		setSize(720,720);
		setVisible(true);
		setResizable(false);  //设置窗体的大小不可随意改变
		setLocation(320,20);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//创建一个容器 并将JFrame窗体转换为容器
		Container conter = getContentPane();
		conter.setLayout(null);
		conter.setBackground(Color.BLACK);
		lb = new JLabel("推箱子~",SwingConstants.CENTER);
		lb2 = new JLabel("更换音乐",SwingConstants.CENTER);
		add(lb);
		add(lb2);
		lb.setBounds(100,20,400,20);
		lb.setForeground(Color.YELLOW);
		lb2.setBounds(625, 500, 55, 20);
		lb2.setForeground(Color.YELLOW);
		//按钮
		renew1 = new JButton("重玩");
		add(renew1);
		back1 = new JButton("悔一步");
		add(back1);
		last1 = new JButton("上一关");
		add(last1);
		next1 = new JButton("下一关");
		add(next1);
		choose1 = new JButton("选关");
		add(choose1);
		first1 = new JButton("第1关");
		add(first1);
		over1 = new JButton("最终关");
		add(over1);
		muc1 = new JButton("音乐关");
		add(muc1);
		renew1.setBounds(625, 100, 80, 40);
		renew1.addActionListener(this);
		
		back1.setBounds(625, 150, 80, 40);
		back1.addActionListener(this);
		
		first1.setBounds(625, 200, 80, 40);
		first1.addActionListener(this);

		last1.setBounds(625, 250, 80, 40);
		last1.addActionListener(this);

		next1.setBounds(625, 300, 80, 40);
		next1.addActionListener(this);
		
		choose1.setBounds(625, 350, 80, 40);
		choose1.addActionListener(this);
	
		over1.setBounds(625, 400, 80, 40);
		over1.addActionListener(this);

		muc1.setBounds(625, 450, 80, 40);
		muc1.addActionListener(this);
		//更换音乐里的下拉菜单标题
		jc.setBounds(625, 530, 80, 25);
		jc.addItem("默认");
		jc.addItem("琴箫合奏");
		jc.addItem("BGM");
		jc.addItem("经典");
		jc.addItem("流行");
		jc.addItemListener(this);
		conter.add(jc);
		//子菜单栏
		Menu choices = new Menu("选项");
		choices.add(renew);
		choices.add(last);
		choices.add(next);
		choices.add(choose);
		choices.add(back);
		choices.addSeparator();
		choices.add(exit);
		renew.addActionListener(this);
		last.addActionListener(this);
		next.addActionListener(this);
		choose.addActionListener(this);
		back.addActionListener(this);
		exit.addActionListener(this);
		//子菜单栏
		Menu setmusic = new Menu("设置音乐");
		setmusic.add(nor);
		setmusic.add(qin);
		setmusic.add(guang);
		setmusic.add(mid1);
		setmusic.add(mid2);
		nor.addActionListener(this);
		qin.addActionListener(this);
		guang.addActionListener(this);
		mid1.addActionListener(this);
		mid2.addActionListener(this);
		Menu help = new Menu("帮助");
		help.add(about);
		about.addActionListener(this);
		//菜单
		MenuBar bar = new MenuBar();
		bar.add(choices);
		bar.add(setmusic);
		bar.add(help);
		setMenuBar(bar);
		nor.setEnabled(false);
		
		sound = new Sound();
		sound.loadSound();
		panel = new MainPanel();
		add(panel);
		panel.PutBox(panel.level);
		panel.requestFocus();
		validate();
	}
	//返回画板上按钮的监听,来看用户点下了什么按钮,同时进行不同操作
	@Override
	public void actionPerformed(ActionEvent e) {
		//重玩
		if(e.getSource()==renew1||e.getSource()==renew) {
			panel.PutBox(panel.level);
			panel.requestFocus();
			panel.remove();
		}
		//上一关
		else if(e.getSource()==last||e.getSource()==last1) {
			panel.level--;
			//判断是否为第一关 从而执行不同操作
			if(panel.level<1) {
				panel.level++;
			JOptionPane.showMessageDialog(this, "本关是是第一关,无法继续返回上一关卡");
			panel.requestFocus();
			}
			else {
				panel.PutBox(panel.level);
				panel.requestFocus();
			}
			panel.remove();
		}
		//下一关
		else if(e.getSource()==next||e.getSource()==next1) {
			panel.level++;
			//判断是否是最后一关 从而进行不同操作
			if(panel.level>panel.maxlevel()) {
				panel.level--;
				JOptionPane.showMessageDialog(this, "本关已经是最后一关 无法进入下一关");
				panel.requestFocus();
			}
			else {
				panel.PutBox(panel.level);
				panel.requestFocus();
			}
			panel.remove();
		}
		//最终关
		else if(e.getSource()==over1) {
			panel.level=panel.maxlevel();
			panel.PutBox(panel.level);
			panel.requestFocus();
			panel.remove();
		}
		//退出 结束游戏
		else if(e.getSource()==exit) {
			System.exit(0);
		}
		//帮助
		else if(e.getSource()==about) {
			JOptionPane.showMessageDialog(this, "PUPPET制作 非完善版");
		}
		//选关
		else if(e.getSource()==choose||e.getSource()==choose1) {
			String tmpp = JOptionPane.showInputDialog(this,"请输入您要跳转到的关卡号:(1~50)");
			panel.level=Integer.parseInt(tmpp);
			panel.remove();
			if(panel.level>panel.maxlevel()||panel.level<1) {
				JOptionPane.showMessageDialog(this, "不存在该关卡!!!!");
				panel.requestFocus();
			}
			else {
				panel.PutBox(panel.level);
				panel.requestFocus();
			}
		}
		//第一关
		else if(e.getSource()==first1) {
			panel.level=1;
			panel.PutBox(panel.level);
			panel.requestFocus();
			panel.remove();
		}
		//音乐开/关
		else if(e.getSource()==muc1) {
			if(sound.isplay()) {
				sound.mystop();
				muc1.setLabel("音乐开");
			}
			else {
				sound.loadSound();
				muc1.setLabel("音乐关");
			}
			panel.requestFocus();
		}
		//上一步
		else if(e.getSource()==back1||e.getSource()==back) {
			if(panel.isMystackEmpty()) {
				JOptionPane.showMessageDialog(this, "你还未进行移动,无法返回上一步~~~");
			}
			else {
				switch(panel.back()) {
				case 10:panel.backup(10);break;
				case 11:panel.backup(11);break;
				case 20:panel.backdown(20);break;
				case 21:panel.backdown(21);break;
				case 30:panel.backleft(30);break;
				case 31:panel.backleft(31);break;
				case 40:panel.backright(40);break;
				case 41:panel.backright(41);break;
				}
			}
			panel.requestFocus();
		}
		//音乐下拉菜单里的默认音乐
		else if(e.getSource()==nor) {
			jc.setSelectedIndex(0);
		}
		//音乐下拉菜单里的琴箫合奏音乐
		else if(e.getSource()==qin) {
			jc.setSelectedIndex(1);
		}
		//音乐下拉菜单里的灌篮高手音乐
		else if(e.getSource()==guang) {
			jc.setSelectedIndex(2);
		}
		//音乐下拉菜单里的经典音乐
		else if(e.getSource()==mid1) {
			jc.setSelectedIndex(3);
		}
		//音乐下拉菜单里的流行音乐
		else if(e.getSource()==mid2) {
			jc.setSelectedIndex(4);
		}
	}
	//更换音乐
	@Override
	public void itemStateChanged(ItemEvent ie) {
		int numm = jc.getSelectedIndex();
		switch(numm) {
			case 0:
				sound.setMusic("nor.mid");
				if(sound.isplay()) {
					sound.mystop();
				}
				sound.loadSound();
				muc1.setLabel("音乐关");
				nor.setEnabled(false);
				qin.setEnabled(true);
				guang.setEnabled(true);
				mid1.setEnabled(true);
				mid2.setEnabled(true);
				panel.requestFocus();
				break;
			case 1: 
				sound.setMusic("qin.mid");
				if(sound.isplay()) {
					sound.mystop();
				}
				sound.loadSound();
				muc1.setLabel("音乐关");
				nor.setEnabled(true);
				qin.setEnabled(false);
				guang.setEnabled(true);
				mid1.setEnabled(true);
				mid2.setEnabled(true);
				panel.requestFocus();
				break;
			case 2: 
				sound.setMusic("guang.mid");
				if(sound.isplay()) {
					sound.mystop();
				}
				sound.loadSound();
				muc1.setLabel("音乐关");
				nor.setEnabled(true);
				qin.setEnabled(true);
				guang.setEnabled(false);
				mid1.setEnabled(true);
				mid2.setEnabled(true);
				panel.requestFocus();
				break;
			case 3: 
				sound.setMusic("mid1.mid");
				if(sound.isplay()) {
					sound.mystop();
				}
				sound.loadSound();
				muc1.setLabel("音乐关");
				nor.setEnabled(true);
				qin.setEnabled(true);
				guang.setEnabled(true);
				mid1.setEnabled(false);
				mid2.setEnabled(true);
				panel.requestFocus();
				break;
			case 4: 
				sound.setMusic("mid2.mid");
				if(sound.isplay()) {
					sound.mystop();
				}
				sound.loadSound();
				muc1.setLabel("音乐关");
				nor.setEnabled(true);
				qin.setEnabled(true);
				guang.setEnabled(true);
				mid1.setEnabled(true);
				mid2.setEnabled(false);
				panel.requestFocus();
				break;
		}
	}
}

その後は、製図板クラスのコード(つまり、一般にマップの描画として知られているもの)です。

package xyz.lzw.box;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Stack;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 * 画板 界面
 */
public class MainPanel extends JPanel implements KeyListener {
	int max = 50;
	int[][] map,maptmp;
	int X,Y,boxnum;
	Image[] myImage;
	Map Levelmap;
	Map Levelmaptmp;
	int len = 30;
	public int level = 1;
	Stack mystack = new Stack();
	//构造函数 将图片导入
	MainPanel(){
		setBounds(15,50,600,600);
		setBackground(Color.WHITE);
		addKeyListener(this);
		myImage = new Image[10];
		for(int i = 0;i < 10;i++) {
			myImage[i] = Toolkit.getDefaultToolkit().getImage("pic\\"+i+".gif");
		}
		setVisible(true);
	}
	//加载地图
	void PutBox(int i) {
		Levelmap = new Map(i);
		Levelmaptmp = new Map(i);
		map = Levelmap.getmap();
		X = Levelmap.getX();
		Y = Levelmap.getY();
		maptmp = Levelmaptmp.getmap();
		repaint(); //重画
	}
	//返回最高的关卡
	int maxlevel() {
		return max;
	}
	//画地图
	public void paint(Graphics g) {
		for(int i = 0;i < 20;i++)
			for(int j = 0;j < 20;j++) {
				g.drawImage(myImage[map[j][i]], i*len, j*len, this);
			}
		g.setColor(new Color(0,0,0));
		g.setFont(new Font("楷体_2312",Font.BOLD,30));
		g.drawString("第", 240, 40);
		g.drawString(String.valueOf(level), 310, 40);
		g.drawString("层", 360, 40);
	}
	@Override
	public void keyPressed(KeyEvent e) {
		//由键盘返回上下左右四个方向上的移动
		if(e.getKeyCode()==KeyEvent.VK_UP){
			moveup();
		}
		else if(e.getKeyCode()==KeyEvent.VK_DOWN) {
			movedown();
		}
		else if(e.getKeyCode()==KeyEvent.VK_LEFT) {
			moveleft();
		}
		else if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
			moveright();
		}
		//判断过关后进行的不同操作
		if(win()) {
			//通关了则提示打通全关
			if(level == max) {
				JOptionPane.showMessageDialog(this, "恭喜您打通全关!!!");
			}
			//弹出一个对话框提示是否进行下一关
			else {
				String message = "恭喜您通过了第" + level +"关!\n是否要进入下一关?";
				int type = JOptionPane.YES_NO_OPTION;
				String title = "恭喜过关!!!";
				int option = JOptionPane.showConfirmDialog(null, message,title,type);
				if(option == 1)
					System.exit(0);
				else if(option == 0) {
					level++;
					PutBox(level);
				}	
			}
			mystack.removeAllElements();
		}
	}
	@Override
	public void keyReleased(KeyEvent e) {
	}
	@Override
	public void keyTyped(KeyEvent e) {
	}
	//判空
	boolean isMystackEmpty() {
		return mystack.isEmpty();
	}
	int back() {
		return (Integer)mystack.pop();
	}
	//清空
	void remove() {
		mystack.removeAllElements();
	}
	//四个方向的移动和悔步 这里要考虑走这一步时能不能走 走过去是什么情况
	void moveup() {
		if(map[Y-1][X]==2||map[Y-1][X]==4) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9)
				map[Y][X]=4;
			else
				map[Y][X]=2;
			map[Y-1][X]=8;
			repaint();
			Y--;
			mystack.push(10);
		}
		else if(map[Y-1][X]==3) {
			if(map[Y-2][X]==4) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y-1][X]=8;
				map[Y-2][X]=9;
				repaint();
				Y--;
				mystack.push(11);
			}
			else if(map[Y-2][X]==2) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y-1][X]=8;
				map[Y-2][X]=3;
				repaint();
				Y--;
				mystack.push(11);
			}
			else {
				map[Y][X]=8;
				repaint();
			}
		}
		else if(map[Y-1][X]==9) {
			if(map[Y-2][X]==4) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y-1][X]=8;
				map[Y-2][X]=9;
				repaint();
				Y--;
				mystack.push(11);
			}
			else if(map[Y-2][X]==2) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y-1][X]=8;
				map[Y-2][X]=3;
				repaint();
				Y--;
				mystack.push(11);
			}
			else {
				map[Y][X]=8;
				repaint();
			}
		}
		if(map[Y-1][X]==1) {
			map[Y][X]=8;
			repaint();
		}
	}
	void backup(int t) {
		int cnt = t;
		if(cnt == 10) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9) {
				map[Y][X]=4;
			}
			else
				map[Y][X]=2;
		}
		else if(cnt == 11) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9)
			{
				map[Y][X]=9;
			}
			else
				map[Y][X]=3;
			if(maptmp[Y-1][X]==4||maptmp[Y-1][X]==9) {
				map[Y-1][X]=4;
			}
			else 
				map[Y-1][X]=2;
		}
		map[Y+1][X]=8;
		repaint();
		Y++;
	}
	void movedown() {
		if(map[Y+1][X]==2||map[Y+1][X]==4) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9)
				map[Y][X]=4;
			else
				map[Y][X]=2;
			map[Y+1][X]=5;
			repaint();
			Y++;
			mystack.push(20);
		}
		else if(map[Y+1][X]==3) {
			if(map[Y+2][X]==4) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y+1][X]=5;
				map[Y+2][X]=9;
				repaint();
				Y++;
				mystack.push(21);
			}
			else if(map[Y+2][X]==2) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y+1][X]=5;
				map[Y+2][X]=3;
				repaint();
				Y++;
				mystack.push(21);
			}
			else {
				map[Y][X]=5;
				repaint();
			}
		}
		else if(map[Y+1][X]==9) {
			if(map[Y+2][X]==4) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y+1][X]=5;
				map[Y+2][X]=9;
				repaint();
				Y++;
				mystack.push(21);
			}
			else if(map[Y+2][X]==2) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y+1][X]=5;
				map[Y+2][X]=3;
				repaint();
				Y++;
				mystack.push(21);
			}
			else {
				map[Y][X]=5;
				repaint();
			}
		}
		if(map[Y+1][X]==1) {
			map[Y][X]=5;
			repaint();
		}
	}
	void backdown(int t) {
		int cnt = t;
		if(cnt == 20) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9) {
				map[Y][X]=4;
			}
			else
				map[Y][X]=2;
		}
		else if(cnt == 21) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9)
			{
				map[Y][X]=9;
			}
			else
				map[Y][X]=3;
			if(maptmp[Y+1][X]==4||maptmp[Y+1][X]==9) {
				map[Y+1][X]=4;
			}
			else 
				map[Y+1][X]=2;
		}
		map[Y-1][X]=5;
		repaint();
		Y--;
	}
	void moveleft() {
		if(map[Y][X-1]==2||map[Y][X-1]==4) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9)
				map[Y][X]=4;
			else
				map[Y][X]=2;
			map[Y][X-1]=6;
			repaint();
			X--;
			mystack.push(30);
		}
		else if(map[Y][X-1]==3) {
			if(map[Y][X-2]==4) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y][X-1]=6;
				map[Y][X-2]=9;
				repaint();
				X--;
				mystack.push(31);
			}
			else if(map[Y][X-2]==2) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y][X-1]=6;
				map[Y][X-2]=3;
				repaint();
				X--;
				mystack.push(31);
			}
			else {
				map[Y][X]=6;
				repaint();
			}
		}
		else if(map[Y][X-1]==9) {
			if(map[Y][X-2]==4) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y][X-1]=6;
				map[Y][X-2]=9;
				repaint();
				X--;
				mystack.push(31);
			}
			else if(map[Y][X-2]==2) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y][X-1]=6;
				map[Y][X-2]=3;
				repaint();
				X--;
				mystack.push(31);
			}
			else {
				map[Y][X]=6;
				repaint();
			}
		}
		if(map[Y][X-1]==1) {
			map[Y][X]=6;
			repaint();
		}
	}
	void backleft(int t)
	{
		int cnt=t;
		if(cnt == 30){
			if(maptmp[Y][X]==4||maptmp[Y][X]==9){
				map[Y][X]=4;
			}
			else 
				map[Y][X]=2;
		}
		else if(cnt==31){
			if(maptmp[Y][X]==4||maptmp[Y][X]==9){
				map[Y][X]=9;
			}
			else 
				map[Y][X]=3;
			if(maptmp[Y][X-1]==4||maptmp[Y][X-1]==9){
				map[Y][X-1]=4;
			}
			else 
				map[Y][X-1]=2;
		}
		map[Y][X+1]=6;
		repaint();
		X++;
	}
	void moveright() {
		if(map[Y][X+1]==2||map[Y][X+1]==4) {
			if(maptmp[Y][X]==4||maptmp[Y][X]==9)
				map[Y][X]=4;
			else
				map[Y][X]=2;
			map[Y][X+1]=7;
			repaint();
			X++;
			mystack.push(40);
		}
		else if(map[Y][X+1]==3) {
			if(map[Y][X+2]==4) {
				if(maptmp[Y][X]==4)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y][X+1]=7;
				map[Y][X+2]=9;
				repaint();
				X++;
				mystack.push(41);
			}
			else if(map[Y][X+2]==2) {
				if(maptmp[Y][X]==4)
					map[Y][X]=4;
				else 
					map[Y][X]=2;
				map[Y][X+1]=7;
				map[Y][X+2]=3;
				repaint();
				X++;
				mystack.push(41);
			}
			else {
				map[Y][X]=7;
				repaint();
			}
		}
		else if(map[Y][X+1]==9) {
			if(map[Y][X+2]==4) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y][X+1]=7;
				map[Y][X+2]=9;
				repaint();
				X++;
				mystack.push(41);
			}
			else if(map[Y][X+2]==2) {
				if(maptmp[Y][X]==4||maptmp[Y][X]==9)
					map[Y][X]=4;
				else
					map[Y][X]=2;
				map[Y][X+1]=7;
				map[Y][X+2]=3;
				repaint();
				X++;
				mystack.push(41);
			}
			else {
				map[Y][X]=7;
				repaint();
			}
		}
		else if(map[Y][X+1]==1) {
			map[Y][X]=7;
			repaint();
		}
	}
	void backright(int t)
	{
		int cnt=t;
		if(cnt == 40){
			if(maptmp[Y][X]==4||maptmp[Y][X]==9){
				map[Y][X]=4;
			}
			else 
				map[Y][X]=2;
		}
		else if(cnt == 41){
			if(maptmp[Y][X]==4||maptmp[Y][X]==9){
				map[Y][X]=9;
			}
			else 
				map[Y][X]=3;
			if(maptmp[Y][X+1]==4||maptmp[Y][X+1]==9){
				map[Y][X+1]=4;
			}
			else 
				map[Y][X+1]=2;
		}
		map[Y][X-1]=7;
		repaint();
		X--;
	}
	//判断是否通关 遍历以便看是否要求位置的标号是否存在即可
	boolean win() {
		boolean flag =false;
		out:for(int i = 0;i < 20;i++)
			  for(int j = 0;j< 20; j++) {
				  if(maptmp[i][j]==4||maptmp[i][j]==9)
					  if(map[i][j] == 9)
						  flag = true;
					  else {
						  flag = false;
						  break out;
					  }
			  }
		return flag;
	}
}

マップクラスのコード:

package xyz.lzw.box;
/**
 * 地图类
 */
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Map {
	private int level,x,y;
	private int[][] mymap = new int[20][20];
	FileReader r;
	BufferedReader br;
	String b="";
	int t = 0;
	//主要是将地图文件导入到String中 然后改为int型存入到mymap中 存成一个表
	Map(int k){
		level = k;
		String s;
		try {
			File f =new File("maps\\" + level + ".map");
			r = new FileReader(f);
			br = new BufferedReader(r);
		}	catch(IOException e) {
			System.out.println(e);
		}
		
		try {
			while((s=br.readLine())!=null) {
				b = b + s;
			}
		}	catch(IOException g) {
			System.out.println(g);
		}
		byte[] db =b.getBytes();
		int len = b.length();
		int[] x1 = new int[len];
		for(int i = 0;i < b.length();i++)//转成int型
			x1[i] = db[i] -48;
		for(int i = 0;i < 20;i++) {
			for(int j = 0;j < 20 ;j++) {
				mymap[i][j] = x1[t];
				if(mymap[i][j]==5) {//记录虫子当前所在位置
					x = j;
					y = i;
				}
				t++;
			}
		}
	}
	//获得地图
	int[][] getmap(){
		return mymap;
	}
	//获得X
	int getX() {
		return x;
	}
	//获得Y
	int getY() {
		return y;
	}
}

サウンドカテゴリ:

package xyz.lzw.box;
/**
 * 声音类
 */
import java.io.File;

import javax.sound.midi.*;

public class Sound {
	String path = new String("musics\\");
	String file = new String("nor.mid");
	Sequence sq;
	Sequencer mid;
	boolean sign;
	//加载音乐
	void loadSound() {
		try {
			sq = MidiSystem.getSequence(new File(path + file));
			mid = MidiSystem.getSequencer();
			mid.open();
			mid.setSequence(sq);
			mid.start();
			mid.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
		}
		catch(Exception exit) {
			exit.printStackTrace();
		}
		sign = true;
	}
	//关闭音乐
	void mystop() {
		mid.stop();
		mid.close();
		sign = false;
	}
	//查看是否开着音乐
	boolean isplay() {
		return sign;
	}
	//更改音乐
	void setMusic(String e) {
		file = e;
	}
}

テストクラス:

package xyz.lzw.box;
/**
 * 测试类
 * @author 栾兆威
 *
 */
public class TEXT {
		public static void main(String[] args) {
			new mainFrame();
		}
}

最後に、ソースコードを添付してあまり嫌いにならないでください。リンク:https://pan.baidu.com/s/1IVIK73NbUzlK2SHtk008Yw抽出コード:xe3yが失敗した場合は、私に個人的にメッセージを送ることができます

おすすめ

転載: blog.csdn.net/Puppet__/article/details/83313006