package com.txz.pb;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Game extends JPanel implements KeyListener {
int len = 30;//地图格子的长度
Image[] img;//定义图像数组
public int flag = 0;//定义关数,因为数组下表第一个是0,所以0代表第一关
int mx, my;//定义任务初始位置下标
int[][] newmap;//定义目前的地图数组(这个就是实时显示的,会根据移动改变)
int[][] oldmap;//定义加载的地图数组(这个就是一开始的地图数据,不会改变)
Read fnewmap;
Read foldmap;
Game() {
setBounds(40, 40, 360, 360);
setBackground(Color.white);
addKeyListener(this);
img = new Image[7];
for (int i = 0; i < 7; i++) {
//图片资源存放的相对路径
img[i] = Toolkit.getDefaultToolkit().getImage(".\\pushing_boxes\\src\\main\\java\\com\\txz\\img\\" + i + ".png");
}
setVisible(true);
Load(flag);
}
void Load(int i)//加载地图函数
{
fnewmap = new Read(i);//调用Read
foldmap = new Read(i);//调用Read
newmap = fnewmap.getmap();//获取地图数据给newmap数组
mx = fnewmap.getmx();//获取初始人物的X位置
my = fnewmap.getmy();//获取初始人物的Y位置
oldmap = foldmap.getmap();//获取地图数据给oldmap数组
repaint();//刷新界面并绘制地图
}
@Override
public void paint(Graphics g)//绘制地图函数,(自带的库函数),调用repaint()时就会调用这个函数,重写画界面
{
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 12; j++) {
g.drawImage(img[newmap[j][i]], i * len, j * len, this);
}
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e)//键盘响应函数
{
if (e.getKeyCode() == KeyEvent.VK_UP) {
up();
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
down();
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
left();
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
right();
}
if (win()) {
if (flag == 2) {
JOptionPane.showMessageDialog(this, "恭喜您通过最后一关!!!");
} else {
String a = "恭喜您通过第" + (flag + 1) + "关!!!\n是否要进入下一关?";
String title = "恭喜过关";
int text = JOptionPane.YES_NO_OPTION;
int choice = 0;
choice = JOptionPane.showConfirmDialog(null, a, title, text);
if (choice == 0) {
flag++;
Load(flag);
} else if (choice == 0) {
System.exit(0);
}
}
}
}
void up()//上移函数
{
if (newmap[my - 1][mx] == 2 || newmap[my - 1][mx] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my - 1][mx] = 5;
repaint();
my--;
} else if (newmap[my - 1][mx] == 3) {
if (newmap[my - 2][mx] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my - 1][mx] = 5;
newmap[my - 2][mx] = 6;
repaint();
my--;
} else if (newmap[my - 2][mx] == 2) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my - 1][mx] = 5;
newmap[my - 2][mx] = 3;
repaint();
my--;
}
} else if (newmap[my - 1][mx] == 6) {
if (newmap[my - 2][mx] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my - 1][mx] = 5;
newmap[my - 2][mx] = 6;
repaint();
my--;
} else if (newmap[my - 2][mx] == 2) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my - 1][mx] = 5;
newmap[my - 2][mx] = 3;
repaint();
my--;
}
}
}
void down()//下移函数
{
if (newmap[my + 1][mx] == 2 || newmap[my + 1][mx] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my + 1][mx] = 5;
repaint();
my++;
} else if (newmap[my + 1][mx] == 3) {
if (newmap[my + 2][mx] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my + 1][mx] = 5;
newmap[my + 2][mx] = 6;
repaint();
my++;
} else if (newmap[my + 2][mx] == 2) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my + 1][mx] = 5;
newmap[my + 2][mx] = 3;
repaint();
my++;
}
} else if (newmap[my + 1][mx] == 6) {
if (newmap[my + 2][mx] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my + 1][mx] = 5;
newmap[my + 2][mx] = 6;
repaint();
my++;
} else if (newmap[my + 2][mx] == 2) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my + 1][mx] = 5;
newmap[my + 2][mx] = 3;
repaint();
my++;
}
}
}
void left()//左移函数
{
if (newmap[my][mx - 1] == 2 || newmap[my][mx - 1] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my][mx - 1] = 5;
repaint();
mx--;
} else if (newmap[my][mx - 1] == 3) {
if (newmap[my][mx - 2] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my][mx - 1] = 5;
newmap[my][mx - 2] = 6;
repaint();
mx--;
} else if (newmap[my][mx - 2] == 2) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
}
newmap[my][mx - 1] = 5;
newmap[my][mx - 2] = 3;
repaint();
mx--;
}
} else if (newmap[my][mx - 1] == 6) {
if (newmap[my][mx - 2] == 4) {
if (oldmap[my][mx] == 4) {
newmap[my][mx] = 4;
} else {
newmap[my][mx] = 2;
没有合适的资源?快使用搜索试试~ 我知道了~
基于JAVA的推箱子小游戏,一起来实现自己的趣味小游戏
共33个文件
png:8个
java:7个
class:7个
需积分: 0 0 下载量 67 浏览量
2024-04-23
11:13:18
上传
评论
收藏 132KB ZIP 举报
温馨提示
一、软件架构 #软件架构说明 #Bmain.java//主函数类(主函数) #Pass.java//关卡类(存了关卡的地图) #Read.java//读取类(读取地图确定人物初始点) #Pushbox.java//窗口类(主要窗口显示) #Game.java//游戏类(显示游戏地图,和控件操作) #二、运行环境 #Windows #IDEA
资源推荐
资源详情
资源评论
收起资源包目录
pushing_boxes.zip (33个子文件)
pushing_boxes
HELP.md 404B
mvnw.cmd 7KB
pom.xml 2KB
src
test
java
com
txz
PushingBoxesApplicationTests.java 214B
main
resources
templates
static
application.yml 21B
java
com
txz
.settings
org.eclipse.jdt.core.prefs 587B
img
3.png 9KB
0.png 135B
1.png 5KB
6.png 7KB
5.png 14KB
4.png 2KB
2.png 6KB
pb
Read.java 609B
Pass.java 2KB
Game.java 11KB
Bmain.java 106B
Pushbox.java 2KB
PushingBoxesApplication.java 324B
.mvn
wrapper
maven-wrapper.properties 233B
maven-wrapper.jar 61KB
target
classes
application.yml 21B
com
txz
pb
Pass.class 3KB
Pushbox.class 3KB
Bmain.class 451B
Game.class 7KB
Read.class 889B
PushingBoxesApplication.class 739B
test-classes
com
txz
PushingBoxesApplicationTests.class 537B
generated-test-sources
test-annotations
generated-sources
annotations
mvnw 11KB
.gitignore 395B
img.png 2KB
pushing_boxes.iml 8KB
共 33 条
- 1
资源评论
小蜜蜂vs码农
- 粉丝: 1742
- 资源: 153
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功