当時、私は長い間検索しましたが、実用的なチュートリアルビデオはほとんど見つかりませんでした。結局、インターネットでソースコードやアイデアを読んでから、これを書くのに長い時間がかかりました。私が書いたものはまだ非常に悪いと感じています。これを書いたとき、私は地図を書きませんでしたが、インターネットで地図を引用しました(異なる地図をマークするために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が失敗した場合は、私に個人的にメッセージを送ることができます