这几节课,我们又学习了推箱子的代码。是个小游戏,我们多少都感兴趣。不过写下来,才发现,游戏这么难,挂不得挣钱多。就让我分享给大家吧
import java.awt.Image;
import javax.swing.ImageIcon;
public class Tools {
public static Image getImageByName(String name){
ImageIcon icon=new ImageIcon(name);
Image im=icon.getImage();
return im;
}
}
public class Run {
public static void main(String[] args) {
GameFrame gf=new GameFrame();
}
}
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
//玩家
public class GamePoint {
Image im;//图片
int x,y;
//构造方法:初始化属性值
public GamePoint(int _x,int _y){
//加载图片
im=Tools.getImageByName("point.png");
x=_x;
y=_y;
}
//显示图片 渲染
public void render(Graphics g ){//渲染
g.drawImage(im,x,y,null);
}
public void movePlayer(int dx,int dy,GameBoxManager bm,GrameMap map,GamePoint pm){
if(map.isHit(x+dx,y+dy)==true){
return;//方法结束
}
GameBox box=bm.chack(x+dx,y+dy);
if(box!=null){
if( box.moveBox(dx,dy,map,bm)==false)
return;
}
x+=dx;
y+=dy;
}
}
import java.awt.Graphics;
import java.awt.Image;
/*
* 地图
*/
public class GrameMap {
byte[][] mapData=new byte[][]{
{2,2,2,2,2,2,2,2,2,2},
{2,2,0,0,0,0,0,2,2,2},
{2,0,0,1,4,1,0,2,2,2},
{2,0,1,3,4,3,0,0,2,2},
{2,0,1,1,4,3,1,0,2,2},
{2,0,1,3,4,1,1,0,2,2},
{2,0,1,3,4,3,0,0,2,2},
{2,0,0,1,4,1,0,2,2,2},
{2,2,0,0,0,0,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2}
};
Image[] images=new Image[3];
//构造方法
public GrameMap(){
//加载图片
for(int i=0;i<3;i++){
images[i]=Tools.getImageByName("map"+i+".png");
}
}
public void render(Graphics g){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
int id=mapData[i][j];//map的i,j赋给id
if(id>2){ //判断id是否大于2
id=1;
}
g.drawImage(images[id],50*j,50*i,null);
}
}
}
//是否可以通行
public boolean isHit(int x,int y){
if(y/50<0 || y/50>=mapData.length || x/50<0 || x/50>=mapData[0].length)
return true;
if(mapData[y/50][x/50]==0){
return true;
}
return false;
}
public boolean isIn(int x,int y ){
if(mapData[y/50][x/50]==4){
return true;
}
return false;
}
}
import java.awt.Graphics;
public class GamePointManager {
GamePoint[] points=new GamePoint[100];//申请箱子的仓库
int num;
//构造
public GamePointManager(){
num=0;//箱子一个也没有
}
//生产箱子的工厂方法
public void createPoint(int x,int y){//每调用一次,生产一个箱子
points[num]=new GamePoint(x,y);
num++;//累加
}
//绘制方法
public void render(Graphics g ){
for(int i=0;i
}
}
//检测坐标上是否有箱子
public Boolean chack(int x,int y){
for(int i=0;i
return true;
}
}
return null;
}
}
import java.awt.Graphics;
public class GamePointManager {
GamePoint[] points=new GamePoint[100];//申请箱子的仓库
int num;
//构造
public GamePointManager(){
num=0;//箱子一个也没有
}
//生产箱子的工厂方法
public void createPoint(int x,int y){//每调用一次,生产一个箱子
points[num]=new GamePoint(x,y);
num++;//累加
}
//绘制方法
public void render(Graphics g ){
for(int i=0;i
}
}
//检测坐标上是否有箱子
public Boolean chack(int x,int y){
for(int i=0;i
return true;
}
}
return null;
}
}
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
public class GamePlayer {
Image im;
int x,y;
//构造方法
public GamePlayer(int _x,int _y){
ImageIcon icon=new ImageIcon("player.png");
im=icon.getImage();
im=Tools.getImageByName("player.png");
x=_x;
y=_y;
}
//显示图片
public void render(Graphics g ){//渲染
g.drawImage(im,x,y,null);
}
public void movePlayer(int dx,int dy,GameBoxManager bm,GrameMap map,GamePointManager pm){
if(map.isHit(x+dx,y+dy)==true){
return;//方法结束
}
GameBox box=bm.chack(x+dx,y+dy);
if(box!=null){
if( box.moveBox(dx,dy,map,bm)==false)
return;
}
x+=dx;
y+=dy;
}
}
import java.awt.Graphics;
import javax.swing.JPanel;
/*
* 游戏画板
*/
public class GamePanel extends JPanel {
GamePlayer player;
GrameMap map;
GameBoxManager bm;
GamePointManager pm;
public GamePanel(){
player=new GamePlayer(300,250);//玩家图片的显示位置
map=new GrameMap();
bm=new GameBoxManager();
pm=new GamePointManager();
this.createMap();
}
//绘制,重写
public void paint(Graphics g){
g.fill3DRect(0, 0, 500, 500, true);
map.render(g);
pm.render(g);
bm.render(g);
player.render(g);//把玩家的图片画到画板上
}
public void ketDown(int keycode){
switch(keycode){
case 37://左
player.movePlayer(-50, 0,bm,map,pm);
break;
case 38://上
player.movePlayer(0,-50,bm,map,pm);
break;
case 39://右
player.movePlayer(50, 0,bm,map,pm);
break;
case 40://下
player.movePlayer(0, 50,bm,map,pm);
break;
}
this.repaint();
}
//游戏的功能
public void createMap(){
for(int i=0;i
case 3:
bm.createBox(j*50,i*50);
break;
case 4:
pm.createPoint(j*50,i*50);
break;
}
}
}
}
}
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class GameFrame extends JFrame implements KeyListener {
GamePanel gp;
public GameFrame(){
this.setTitle("推箱子");//标题
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮
this.setSize(500,500);//窗口大小
this.setVisible(true);//显示
gp=new GamePanel();
this.add(gp);
this.addKeyListener(this);
this.setVisible(true);//窗口可见性
}
public void keyPressed(KeyEvent e) {
gp.ketDown(e.getKeyCode());
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
}
import java.awt.Graphics;
public class GameBoxManager {
GameBox[] boxes=new GameBox[100];//申请箱子的仓库
int num;
//构造
public GameBoxManager(){
num=0;//箱子一个也没有
}
//生产箱子的工厂方法
public void createBox(int x,int y){//每调用一次,生产一个箱子
boxes[num]=new GameBox(x,y);
num++;//累加
}
//绘制方法
public void render(Graphics g ){
for(int i=0;i
}
}
//检测坐标上是否有箱子
public GameBox chack(int x,int y){
for(int i=0;i
return boxes[i];
}
}
return null;
}
}
import java.awt.Graphics;
import java.awt.Image;
public class GameBox {
Image im[]=new Image[2];
int x,y;//箱子的坐标
int num;
//箱子 构造函数
public GameBox(int _x,int _y){
im[0]=Tools.getImageByName("box.png");
im[1]=Tools.getImageByName("box2.png");
x=_x;
y=_y;
}
//渲染
public void render(Graphics g ){
if(num==2){
g.drawImage(im[1],x,y,null);
}else{
g.drawImage(im[0],x,y,null);
}
}
//箱子的移动
public boolean moveBox(int dx,int dy,GrameMap map,GameBoxManager bm){
//检测地图
if(map.isHit(x+dx, y+dy)==true)
return false;
if(bm.chack(x+dx,y+dy)!=null)
return false;
x+=dx;
y+=dy;
if(map.isIn(x,y)==true){
num=2;
}else{
num=1;
}
return true;
}
}