import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.GeneralPath;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
//人物可动
public class PushBox_manmove extends JPanel implements KeyListener{
private Image pic[] = null; // 图片
int initX=200,initY=70;
//map1为第一层,map2为第二层
private int [][]map1={//第一层地图,即地板层
{-1,-1,-1,1, 0, 1, 0, 1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1},
{1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,-1,-1,-1},
{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,-1,-1,-1}
};
private int [][]map2={//第二层地图,建筑物
{-1,-1,-1,2, 2, 2, 2, 2,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2},
{2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2},
{2, 0, 0, 0, 1, 0, 2, 0, 0, 2, 0, 0, 0, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2},
{2, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2},
{2, 0, 0, 0, 1, 2, 2, 0, 0, 0, 1, 0, 0, 2},
{2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 0, 2},
{2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2},
{2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2,-1,-1,-1},
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,-1,-1,-1}
};
// 定义一些常量,对应地图的元素
final byte WALL = 2, BOX = 1, BOXONEND = 3, END = 2,
WhiteGRASS = 0, BlackGRASS = 1;
private int row = 7, column = 7;
// 加载图片
Image box=Toolkit.getDefaultToolkit().getImage("images\\box.png");
Image wall = Toolkit.getDefaultToolkit().getImage("images\\wall.png");
Image greenBox= Toolkit.getDefaultToolkit().getImage("images\\greenbox.png");
Image man = Toolkit.getDefaultToolkit().getImage("images\\b1.png");//人物
Image background= Toolkit.getDefaultToolkit().getImage("images\\background.jpg");//背景
private static final int LEFT = 0;
private static final int RIGHT = 1;
private static final int UP = 2;
private static final int DOWN = 3;
//增加计步器
private int count=1;
private Thread threadAnime;
private int direction=LEFT; //角色所对方向
public PushBox_manmove() {
// 设置焦点
setFocusable(true);
this.addKeyListener(this);
//控制人物移动的线程
//实例化内部线程AnimationThread
threadAnime = new Thread(new AnimationThread());
//启动线程
threadAnime.start();
}
public void myDrawRect(Graphics g, int x, int y) {// 绘制多边形
Graphics2D g2D = (Graphics2D) g;
if (g2D == null) {
return;
}
GeneralPath path = new GeneralPath();
path.moveTo(x + 14, y);
path.lineTo(x + 53, y + 10);
path.lineTo(x + 37, y + 37);
path.lineTo(x - 2, y + 26);
path.lineTo(x + 14, y);
g2D.fill(path); // g.draw(myPath);
}
// 画游戏界面
public void paint(Graphics g) {
g.clearRect(0,0,this.getWidth(),getHeight());
g.setColor(Color.BLACK);
g.drawImage(background, 0, 0,800,800,this);//画游戏背景
//绘制第一层,即地板层
//WhiteGRASS = 0, END = 2,BlackGRASS = 1;
for(int i=0; i<map1.length; i++){
for(int j=0; j<map1[i].length; j++){
//根据索引值进行坐标转换
int X = initX+36*j-15*i;
int Y = initY+10*j+25*i;
if(map1[i][j] == WhiteGRASS){//白色空地
/*设置paint的颜色*/
g.setColor(new Color(255, 220, 220, 220));
this.myDrawRect(g, X, Y);
}
else if(map1[i][j] == BlackGRASS){//灰色空地
g.setColor(new Color(255, 170, 170, 170));
this.myDrawRect(g, X, Y);
}
else if(map1[i][j] == END){//目的地
g.setColor(new Color(255, 60, 255, 120));
this.myDrawRect(g, X, Y);
}
}
}
//开始绘制第二层,即建筑所在层
for(int i=0; i<map2.length; i++){
for(int j=0; j<map2[i].length; j++){
//根据索引值进行坐标转换
int X = initX+36*j-15*i;
int Y = initY+10*j+25*i;
if(map2[i][j] == BOX){//第二层上有箱子处
g.drawImage(box, X-1, Y-27,this);
}
else if(map2[i][j] == WALL){//墙
g.drawImage(wall, X, Y-25,this);
}
else if(map2[i][j] == BOXONEND){//目的地的绿色箱子
g.drawImage(greenBox, X-1, Y-27,this);
}
//绘制人
if(i == row && j == column){
g.drawImage(man, X-1, Y-27,this);
}
}
}
}
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if (e.getKeyCode() == KeyEvent.VK_UP) {
// 向上
moveUp();
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
// 向下
moveDown();
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) { // 向左
moveLeft();
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) { // 向右
moveRight();
}
repaint();
if (isWin()) {
JOptionPane.showMessageDialog(this, "恭喜您通过一关!!!");
}
}
private void moveLeft() {
// TODO Auto-generated method stub
// 左一位p1为WALL
if (map2[row][column - 1] == WALL)
return;
// 左一位p1为 BOX
if (map2[row][column - 1] == BOX || map2[row][column - 1] == BOXONEND) {
if (map2[row][column - 2] == WALL)
return;
if (map2[row][column - 2] == BOX)
return;
if (map2[row][column - 2] == BOXONEND)
return;
// 左2位p2为 END,GRASS则向上一步
if (map1[row][column - 2] == END
|| map1[row][column - 2] == WhiteGRASS
|| map1[row][column - 2] == BlackGRASS) {
// 左左一位p2为 END
if (map1[row][column - 2] == END) // 上上一位p2为 END
map2[row][column - 2] = BOXONEND;
if (map1[row][column - 2] == WhiteGRASS // 上上一位p2为GRASS
|| map1[row][column - 2] == BlackGRASS)
map2[row][column - 2] = BOX;
map2[row][column - 1] = -1;// 原来箱子被移掉
// 人离开后修改人的坐标
//man = Toolkit.getDefaultToolkit().getImage("images\\b1.png");// 向左人物
direction=LEFT;
column--;
}
} else {
// 左一位为 GRASS,END,其他情况不用处理
if (map1[row][column - 1] == WhiteGRASS
|| map1[row][column - 1] == BlackGRASS
|| map1[row][column - 1] == END) {
// 人离开后修改人的坐标
//man = Toolkit.getDefaultToolkit().getImage("images\\b1.png");// 人物
direction=LEFT;
column--;
}
}
}
private void moveRight() {
// TODO Auto-generated method stub
// 右一位p1为WALL
if (map2[row][column + 1] == WALL)
return;
// 右一位p1为 BOX
if (map2[row][column + 1] == BOX || map2[row][column + 1] == BOXONEND) {
if (map2[row][column + 2] == WALL)
return;
if (map2[row][column + 2] == BOX)
return;
if (map2[row][column + 2] == BOXONEND)
return;
// 右2�
没有合适的资源?快使用搜索试试~ 我知道了~
详细解读Java25D推箱子游戏的源代码-课程设计
共118个文件
png:99个
jpg:5个
xml:4个
需积分: 5 0 下载量 130 浏览量
2023-08-15
03:17:51
上传
评论
收藏 1.29MB ZIP 举报
温馨提示
详细解读Java25D推箱子游戏的源代码--【课程设计】 本系列校训 用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干! 只要自己有电脑,前后项目都能搞!N年苦学无人问,一朝成名天下知! 喜欢的朋友还可以自己查到本站的N多毕业设计与课程设计, 如果错误或其它需要请留言!或发邮件至8195819@qq.com 本系列校训 用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干! 只要自己有电脑,前后项目都能搞!N年苦学无人问,一朝成名天下知! 喜欢的朋友还可以自己查到本站的N多毕业设计与课程设计, 如果错误或其它需要请留言!或发邮件至8195819@qq.com
资源推荐
资源详情
资源评论
收起资源包目录
详细解读Java25D推箱子游戏的源代码-课程设计 (118个子文件)
.classpath 232B
Thumbs.db 124KB
Thumbs.db 111KB
Java25D推箱子.iml 437B
PushBox_manmove.java 13KB
PushBox.java 11KB
PushBox_easy.java 5KB
BoxFrame2.java 652B
background.jpg 45KB
background.jpg 45KB
menubackground.jpg 18KB
menubackground.jpg 18KB
pic3.JPG 1022B
Java25D推箱子.lnk 899B
menubackground2.png 83KB
menubackground2.png 83KB
image3.png 54KB
image3.png 54KB
image33.png 52KB
image33.png 52KB
image2.png 41KB
image2.png 41KB
image4.png 38KB
image4.png 38KB
wallleft.png 36KB
wallleft.png 36KB
wallright.png 28KB
wallright.png 28KB
mountain2.png 22KB
mountain2.png 22KB
goon.png 14KB
goon.png 14KB
help1.png 10KB
help1.png 10KB
exit1.png 10KB
exit1.png 10KB
sound2.png 9KB
sound2.png 9KB
greenbox.png 8KB
greenbox.png 8KB
box.png 6KB
box.png 6KB
start1.png 5KB
start1.png 5KB
wall.png 5KB
wall.png 5KB
sound1.png 4KB
sound1.png 4KB
g4.png 4KB
g4.png 4KB
f2.png 4KB
f2.png 4KB
g6.png 4KB
g6.png 4KB
c4.png 4KB
c2.png 4KB
a2.png 4KB
f3.png 3KB
f3.png 3KB
e3.png 3KB
e2.png 3KB
e14.png 3KB
a1.png 3KB
e1.png 3KB
a1.png 3KB
a4.png 3KB
e1.png 3KB
e4.png 3KB
d8.png 3KB
d3.png 3KB
c1.png 3KB
c9.png 3KB
c1.png 3KB
c4.png 3KB
g14.png 3KB
g1.png 3KB
g14.png 3KB
g1.png 3KB
a3.png 3KB
c8.png 3KB
c3.png 3KB
h2.png 3KB
h2.png 3KB
h3.png 3KB
h3.png 3KB
e4.png 3KB
e3.png 3KB
d4.png 3KB
d2.png 3KB
h14.png 3KB
d9.png 3KB
d1.png 3KB
d1.png 3KB
h14.png 3KB
d4.png 3KB
h1.png 3KB
h1.png 3KB
b4.png 3KB
b2.png 3KB
b8.png 3KB
共 118 条
- 1
- 2
资源评论
项目花园范德彪
- 粉丝: 5568
- 资源: 219
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功