import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class GamePanel extends JPanel implements ActionListener,MouseListener,KeyListener{
int leftX=50,leftY=50;
int level,W=100;
int step = 0;//存储当前步数
int record;//存储当前关卡记录
Icon[] icons;
Image[] pics;
Node[] map;
Person[] persons;
Point p1 = new Point(0,0);//鼠标按下时点击的像素坐标
Point p2 = new Point(0,0);//鼠标释放时点击的像素坐标
Rectangle leftBoundary = new Rectangle(leftX-10, leftY, 10, 5*W);
Rectangle rightBoundary = new Rectangle(leftX+4*W, leftY, 10, 5*W);
Rectangle upBoundary = new Rectangle(leftX, leftY-10, 4*W, 10);
Rectangle downBoundary = new Rectangle(leftX, leftY+5*W, 4*W, 10);
public static final int UP=1,DOWN=2,LEFT=3,RIGHT=4;
MapUtil mapUtil = new MapUtil();
public GamePanel(int level){
this.level = level;
map = mapUtil.getMap(level);
persons = new Person[10];
icons = new Icon[15];
pics = new Image[15];
setLayout(null);
setSize(400, 500);
getIcons();
initialize();
HelpPanel.restart.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
step = 0;
for(int i=0;i<10;i++){
GameClient.gamePanel.remove(persons[i]);
}
repaint();
map = mapUtil.getMap(level);
GameClient.panel.remove(GameClient.helpPanel);
GameClient.helpPanel = new HelpPanel(level);
GameClient.panel.add(GameClient.helpPanel,BorderLayout.EAST);
GameClient.helpPanel.validate();
GameClient.gamePanel.validate();
GameClient.panel.validate();
initialize();
setVisible(true);
GameClient.gamePanel.requestFocus();
repaint();
}
});;
}
public void paint(Graphics g){
setLayout(null);
g.clearRect(0, 0, getWidth(), getHeight());
for(int i=0;i<10;i++){
persons[i].requestFocus();
persons[i].paintComponents(g);
}
}
//获取图片
private void getIcons() {
for(int i=0;i<15;i++){
if(i==0){
pics[i] = Toolkit.getDefaultToolkit().getImage("image/pic"+i+".png").getScaledInstance(2*W, 2*W,Image.SCALE_SMOOTH);
}else if(i==1||i==2||i==3||i==4||i==5){
pics[i] = Toolkit.getDefaultToolkit().getImage("image/pic"+i+".png").getScaledInstance(2*W, W,Image.SCALE_SMOOTH);
}else if(i==6||i==7||i==8||i==9){
pics[i] = Toolkit.getDefaultToolkit().getImage("image/pic"+i+".png").getScaledInstance(W, W,Image.SCALE_SMOOTH);
}else{
pics[i] = Toolkit.getDefaultToolkit().getImage("image/pic"+i+".png").getScaledInstance(W,2*W,Image.SCALE_SMOOTH);
}
icons[i] = new ImageIcon(pics[i]);
}
repaint();
}
//对游戏布局进行初始化
private void initialize() {
for(int i=0;i<10;i++){
switch(map[i].getId()){
case 0://曹操,占四格
persons[i] = new Person(0,"曹操");
persons[i].setIcon(icons[0]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, 2*W, 2*W);
break;
case 1://赵云,占两格
persons[i] = new Person(1,"赵云");
if(map[i].getDirection()){//横放
persons[i].setIcon(icons[1]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, 2*W, W);
}else{//竖放
persons[i].setIcon(icons[10]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, 2*W);
}
break;
case 2://张飞,占两格
persons[i] = new Person(2,"张飞");
if(map[i].getDirection()){//横放
persons[i].setIcon(icons[2]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, 2*W, W);
}else{//竖放
persons[i].setIcon(icons[11]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, 2*W);
}
break;
case 3://关羽,占两格
persons[i] = new Person(3,"关羽");
if(map[i].getDirection()){//横放
persons[i].setIcon(icons[3]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, 2*W, W);
}else{//竖放
persons[i].setIcon(icons[12]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, 2*W);
}
break;
case 4://马超,占两格
persons[i] = new Person(4,"马超");
if(map[i].getDirection()){//横放
persons[i].setIcon(icons[4]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, 2*W, W);
}else{//竖放
persons[i].setIcon(icons[13]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, 2*W);
}
break;
case 5://黄忠,占两格
persons[i] = new Person(5,"黄忠");
if(map[i].getDirection()){//横放
persons[i].setIcon(icons[5]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, 2*W, W);
}else{//竖放
persons[i].setIcon(icons[14]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, 2*W);
}
break;
case 6://小兵,占一格
persons[i] = new Person(6,"小兵");
persons[i].setIcon(icons[6]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, W);
break;
case 7://小兵,占一格
persons[i] = new Person(7,"小兵");
persons[i].setIcon(icons[7]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, W);
break;
case 8://小兵,占一格
persons[i] = new Person(8,"小兵");
persons[i].setIcon(icons[8]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, W);
break;
case 9://小兵,占一格
persons[i] = new Person(9,"小兵");
persons[i].setIcon(icons[9]);
persons[i].setBounds(leftX+map[i].getY()*W, leftY+map[i].getX()*W, W, W);
break;
}
persons[i].addMouseListener(this);
persons[i].addKeyListener(this);
this.add(persons[i]);
}
}
private String getDirection(){
int dx,dy;
String direction;
dx = p2.x - p1.x;
dy = p2.y - p1.y;
if(dx==0&&dy==0){
return "no move";
}
if(Math.abs(dx)>Math.abs(dy)){//水平方向的偏移大于竖直方向的偏移,即水平方向运动
if(dx>0){//释放点在按压点右边
direction = "right";
}else{
direction = "left";
}
}else{//竖直方向的偏移大于水平方向的偏移,即竖直方向运动
if(dy>0){//释放点在按压点下边
direction = "down";
}else{
direction = "up";
}
}
return direction;
}
@Override
public void mousePressed(MouseEvent e) {
if(e.getSource()==null)//没有选中任何按钮,直接返回
return ;
p1.x = e.getX();
p1.y = e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {
if(e.getSource()==null)
return ;
Person man = (Person) e.getSource();
p2.x = e.getX();
p2.y = e.getY();
String direction = getDirection();
boolean canMoveFlag;
if(direction.equals("up")){
canMoveFlag = getCanMoveFlag(man,UP);
if(canMoveFlag)
move(man,UP);
}else if(direction.equals("down")){
canMoveFlag = getCanMoveFlag(man,DOWN);
if(canMoveFlag)
move(man,DOWN);
}else if(direction.equals("left")){
canMoveFlag = getCanMoveFlag(man,LEFT);
if(canMoveFlag)
move(man,LEFT);
}else if(direction.equals("right")){
canMoveFlag = getCanMoveFlag(man,RIGHT);
if(canMoveFlag)
move(man,RIGHT);
}
}
private void move(Person man, int direction) {
switch(direction){
case UP:man.setLocation(man.getX(), man.getY()-W);break;
case DOWN:man.setLocation(man.getX(), man.getY()+W);break;
case LEFT:man.setLocation(man.getX()-W, man.getY());bre
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
hua-rong-dao.zip (30个子文件)
hua-rong-dao
image
pic0.png 60KB
pic4.png 27KB
pic2.png 30KB
pic10.png 36KB
pic11.png 33KB
pic13.png 29KB
pic3.png 26KB
pic5.png 32KB
pic12.png 30KB
pic7.png 15KB
pic8.png 15KB
pic1.png 31KB
pic9.png 15KB
pic14.png 36KB
pic6.png 15KB
src
Node.java 732B
MapUtil.java 366B
GameClient.java 790B
HelpPanel.java 1KB
MapFactory.java 5KB
GamePanel.java 11KB
Person.java 305B
out
production
hua-rong-dao
Person.class 584B
GamePanel.class 10KB
MapFactory.class 5KB
Node.class 1KB
GameClient.class 1KB
GamePanel$1.class 1KB
HelpPanel.class 2KB
MapUtil.class 623B
共 30 条
- 1
资源评论
- m0_600885292024-01-03这个资源内容超赞,对我来说很有价值,很实用,感谢大佬分享~
泰山AI
- 粉丝: 2w+
- 资源: 284
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功