day3 完成!
GamePanel:
package com.cisst;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class GamePanel extends JPanel {
private BufferedImage wall;
private BufferedImage left[]=new BufferedImage[4];
private BufferedImage right[]=new BufferedImage[4];
private BufferedImage up[]=new BufferedImage[4];
private BufferedImage down[]=new BufferedImage[4];
private int direct=0; //小人的方向
private int index=0;//动画索引
private int row=0;//小人的行,列坐标
private int col =0;
public GamePanel()
{
super();
this.setSize(Config.SWIDTH,Config.SHEIGHT);
this.setVisible(true);
initImage();
}
/*初始化游戏中的图片*/
public void initImage()
{
try {
wall=ImageIO.read(this.getClass().getResource("/com/res/wall.jpg"));
for(int i=1;i<=4;i++)
{
left[i-1]=ImageIO.read(this.getClass().getResource("/com/res/2_"+i+".jpg"));
}
for(int i=1;i<=4;i++)
{
right[i-1]=ImageIO.read(this.getClass().getResource("/com/res/3_"+i+".jpg"));
}
for(int i=1;i<=4;i++)
{
up[i-1]=ImageIO.read(this.getClass().getResource("/com/res/4_"+i+".jpg"));
}
for(int i=1;i<=4;i++)
{
down[i-1]=ImageIO.read(this.getClass().getResource("/com/res/1_"+i+".jpg"));
}
} catch (IOException e) {
System.out.println("ERROR_001_加载图片出错");
e.printStackTrace();
}
}
/*初始化地图*/
public void initMap(Graphics g)
{
g.setColor(Color.white);
g.fillRect(0, 0, Config.SWIDTH, Config.SWIDTH);
for(int i=0;i<Config.map.length;i++)
{
for(int j=0;j<Config.map[i].length;j++)
{
if(Config.map[i][j]==Config.ENTER)
{
row=i;col=j;
}
if(Config.map[i][j]==Config.EXIT)
{
g.setColor(Color.BLACK);
g.fillRect(j*Config.WIDTH,i*Config.WIDTH, Config.WIDTH, Config.WIDTH);
g.setColor(Color.white);
g.drawString("EXIT",j*Config.WIDTH,i*Config.WIDTH);
}
if(Config.map[i][j]==Config.WALL)
{
g.drawImage(wall, Config.WIDTH*j, Config.WIDTH*i, null);
}
}
}
initEntery(g);
}
/*画小人入口*/
public void initEntery(Graphics g)
{
if(col+1>=10&&Config.map[row][col-1]==Config.RODE)
{
direct=Config.LEFT;
g.drawImage(left[0], col*Config.WIDTH, row*Config.WIDTH, null);
}
else if(row+1>=10&&Config.map[row-1][col]==Config.RODE)
{
direct=Config.UP;
g.drawImage(up[0], col*Config.WIDTH, row*Config.WIDTH, null);
}
else if(col-1<=0&&Config.map[row][col+1]==Config.RODE)
{
direct=Config.RIGHT;
g.drawImage(right[0], col*Config.WIDTH, row*Config.WIDTH, null);
}
else if(row-1<=0&&Config.map[row+1][col]==Config.RODE)
{
direct=Config.DOWN;
g.drawImage(down[0], col*Config.WIDTH, row*Config.WIDTH, null);
}
else
{
}
}
/*操作*/
public void playGame()
{
Graphics g=this.getGraphics();
if(index==3)
index=0;
if(direct==Config.LEFT)
{ isWin(row,col-1);
if(col-1>=0&&Config.map[row][col-1]==Config.RODE)
{
g.drawImage(left[index++],(col-1)*Config.WIDTH, (row)*Config.WIDTH, null);
fillblock(g);
col--;
}
}else if(direct==Config.RIGHT)
{//System.out.println(",,,,,,");
isWin(row,col+1);
if(col+1<10&&Config.map[row][col+1]==Config.RODE)
{
//System.out.println(",,,,,,");
g.drawImage(right[index++],(col+1)*Config.WIDTH, (row)*Config.WIDTH, null);
fillblock(g);
col++;
}
}else if(direct==Config.UP)
{
isWin(row-1,col);
if(row-1<10&&Config.map[row-1][col]==Config.RODE)
{
g.drawImage(up[index++],col*Config.WIDTH, (row-1)*Config.WIDTH, null);
fillblock(g);
row--;
}
}else if(direct==Config.DOWN)
{
isWin(row+1,col);
if(row+1<10&&Config.map[row+1][col]==Config.RODE)
{
g.drawImage(down[index++],col*Config.WIDTH, (row+1)*Config.WIDTH, null);
fillblock(g);
row++;
}
}
}
public void isWin(int row ,int col)
{
if(row>=0&&row<10&&col>=0&&col<10&&Config.map[row][col]==Config.EXIT)
{ int r=JOptionPane.showConfirmDialog(null,"成功!确定退出");
if(r==JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
}
public void fillblock(Graphics g)
{
g.setColor(Color.white);
g.fillRect(col*Config.WIDTH,row*Config.WIDTH, Config.WIDTH, Config.WIDTH);
}
public int getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
public void paint(Graphics g) {
super.paint(g);
this.initMap(g);
}
}
MainFrame.java:
package com.cisst;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MainFrame extends JFrame {
private GamePanel game=new GamePanel();
/*计时功能
private JLabel lab1= new JLabel();
public void getTime()
{
int time=20;
while(time>0)
{
lab1.setText("还剩"+time+"秒");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
time--;
}
if(time<=0)
{int r=JOptionPane.showConfirmDialog(null,"游戏失败!确定退出");
if(r==JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
}*/
public MainFrame()
{
super("迷宫1");
JPanel jp=new JPanel();
this.setSize(Config.SWIDTH+30,Config.SHEIGHT+33);
this.setLocation(100,10);
// this.add(jp);
//jp.add(lab1);
this.add(game);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addKeyListener(new KeyAdapter()
{
@Override
public void keyReleased(KeyEvent e) {
switch(e.getKeyCode())
{
case KeyEvent.VK_LEFT:
game.setDirect(Config.LEFT);
break;
case KeyEvent.VK_RIGHT:
//System.out.println(",,,,,,");
game.setDirect(Config.RIGHT);
break;
case KeyEvent.VK_UP:
game.setDirect(Config.UP);
break;
case KeyEvent.VK_DOWN:
game.setDirect(Config.DOWN);
break;
default:
break;
}
game.playGame();
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MainFrame();//.getTime();
}
}
明天加上计时器