java推箱子截图_完美起航-java实现推箱子小游戏(附源码)

先上效果图

027d5d12b49ff8b3fcc071154138c99a.png

可以通过AWSD进行移动和推箱子

16e328882049d1f9bf4c3517aeb00a71.png

自己弄出来的代码玩起来还是很有意思的。

代码一共是三个.java文件,代码内容如下所示

package ss;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Point;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

/**

* 1.继承窗体类为当前类的父类

* @author lizhicheng

*

*/

public class PushBox extends JFrame implements KeyListener{

/**

* 3.声明一个二维数组的地图

*/

int[][] maps=

{

{3,3,3,3,3,3,3,3},

{3,0,0,0,0,0,0,3},

{3,0,0,0,0,2,0,3},//3表示墙

{3,0,0,0,3,0,3,3},//2表示箱子

{3,0,0,1,0,0,0,3},//1表示人

{3,0,3,0,2,0,0,3},//0表示空地

{3,0,0,0,0,0,0,3},

{3,3,3,3,3,3,3,3},

};

/**

* 6.声明两个变量来保存图标的起始位置

*

*/

int top=10,left=25;

int posX=3,posY=4;//保存大力水手的位置

/**

* 2.构造方法添加固定的窗体设置

*/

public PushBox()

{

//设置标题

this.setTitle("http://ai.52learn.online");

//设置窗体大小

this.setSize(500, 350);

//设置窗体默认关闭操作

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗体可见

this.setVisible(true);

//设置窗体居中显示

this.setLocationRelativeTo(null);

//进行监听

this.addKeyListener(this);

}

/**

* 4.窗体的绘制

* @param args

*/

@Override

public void paint(Graphics g) {

super.paint(g);

refresh();//7.调用刷新

}

/**

* 5.重绘所有当前窗体的组件

* @param args

*/

public void refresh()

{

//获取当前窗体的画笔

Graphics gs=this.getGraphics();

//将图片资源引入

ImageIcon wall = new ImageIcon("bian.png");

ImageIcon area = new ImageIcon("kongdi.png");

ImageIcon human = new ImageIcon("ren.png");

ImageIcon box = new ImageIcon("xiang.png");

//将资源绘制在窗体上

for(int i = 0 ; i < maps.length ; i++)

{

for(int j = 0 ; j < maps[i].length ; j++)

{

if(maps[i][j]==3)

{

//绘制墙

gs.drawImage(wall.getImage(),top+j*40,left+i*40,40,40, null);

}

else if(maps[i][j]==0)

{

//绘制空地

gs.drawImage(area.getImage(),top+j*40,left+i*40,40,40, null);

}

else if(maps[i][j]==1)

{

//绘制水手

gs.drawImage(human.getImage(),top+j*40,left+i*40,40,40, null);

}

else if(maps[i][j]==2)

{

//绘制箱子

gs.drawImage(box.getImage(),top+j*40,left+i*40,40,40, null);

}

}

}

}

public static void main(String[] args) {

new PushBox();

}

@Override

public void keyPressed(KeyEvent arg0) {

// TODO Auto-generated method stub

char ch=arg0.getKeyChar();//获取按键

//JOptionPane.showMessageDialog(null, "你按了"+ch);

if(ch=='w'||ch=='W')

{

//向上走动

if(maps[posY-1][posX]==0)

{

maps[posY-1][posX]=1;

maps[posY][posX]=0;

posY--;

}

else if(maps[posY-1][posX]==2&&maps[posY-2][posX]==0)

{

maps[posY-2][posX]=2;

maps[posY-1][posX]=1;

maps[posY][posX]=0;

posY--;

}

}

else if(ch=='s'||ch=='S')

{

//向下走动

if(maps[posY+1][posX]==0)

{

maps[posY+1][posX]=1;

maps[posY][posX]=0;

posY++;

}

else if(maps[posY+1][posX]==2&&maps[posY+2][posX]==0)

{

maps[posY+2][posX]=2;

maps[posY+1][posX]=1;

maps[posY][posX]=0;

posY++;

}

}

else if(ch=='a'||ch=='A')

{

//向左走

if(maps[posY][posX-1]==0)

{

maps[posY][posX-1]=1;

maps[posY][posX]=0;

posX--;

}

else if(maps[posY][posX-1]==2&&maps[posY][posX-2]==0)

{

maps[posY][posX-2]=2;

maps[posY][posX-1]=1;

maps[posY][posX]=0;

posX--;

}

}

else if(ch=='d'||ch=='D')

{

//向右走

if(maps[posY][posX+1]==0)

{

maps[posY][posX+1]=1;

maps[posY][posX]=0;

posX++;

}

else if(maps[posY][posX+1]==2&&maps[posY][posX+2]==0)

{

maps[posY][posX+2]=2;

maps[posY][posX+1]=1;

maps[posY][posX]=0;

posX++;

}

}

refresh();

}

@Override

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent arg0) {

// TODO Auto-generated method stub

}

}

package mg;

import java.util.Scanner;

public class migong {

public static void main(String[] args) {

int[][] maps=

{

{3,3,3,3,3,3,3,3},

{3,0,0,0,0,0,0,3},

{3,0,0,0,0,2,0,3},//3表示墙

{3,0,0,0,3,0,3,3},//2表示箱子

{3,0,0,1,0,0,0,3},//1表示人

{3,0,3,0,2,0,0,3},//0表示空地

{3,0,0,0,0,0,0,3},

{3,3,3,3,3,3,3,3},

};

//打印输出地图在控制台上

for(int i = 0 ; i < maps.length ; i++)

{

for(int j = 0 ; j < maps[i].length ; j++)

{

System.out.print(maps[i][j]);

}

System.out.println();

}

//声明两个变量记录人的位置

int posX=3,posY=4;

//接收用户键盘的输入

Scanner sc = new Scanner(System.in);

System.out.print("请输入方向:上:w,下:s,左:a,右:d : ");

//运行程序

while(true)

{

String str=sc.next();

if(str.equalsIgnoreCase("w"))

{

//向上

if(maps[posY-1][posX]==0)

{

maps[posY-1][posX]=1;

maps[posY][posX]=0;

posY--;

}

else if(maps[posY-1][posX]==2&&maps[posY-2][posX]==0)

{

maps[posY-2][posX]=2;

maps[posY-1][posX]=1;

maps[posY][posX]=0;

posY--;

}

}

else if(str.equalsIgnoreCase("s"))

{

//向下

if(maps[posY+1][posX]==0)

{

maps[posY+1][posX]=1;

maps[posY][posX]=0;

posY++;

}

else if(maps[posY+1][posX]==2&&maps[posY+2][posX]==0)

{

maps[posY+2][posX]=2;

maps[posY+1][posX]=1;

maps[posY][posX]=0;

posY++;

}

}

else if(str.equalsIgnoreCase("a"))

{

//向左

if(maps[posY][posX-1]==0)

{

maps[posY][posX-1]=1;

maps[posY][posX]=0;

posX--;

}

else if(maps[posY][posX-1]==2&&maps[posY][posX-2]==0)

{

maps[posY][posX-2]=2;

maps[posY][posX-1]=1;

maps[posY][posX]=0;

posX--;

}

}

else if(str.equalsIgnoreCase("d"))

{

//向右

if(maps[posY][posX+1]==0)

{

maps[posY][posX+1]=1;

maps[posY][posX]=0;

posX++;

}

else if(maps[posY][posX+1]==2&&maps[posY][posX+2]==0)

{

maps[posY][posX+2]=2;

maps[posY][posX+1]=1;

maps[posY][posX]=0;

posX++;

}

}

else if(str.equalsIgnoreCase("quit"))

{

System.out.print("游戏即将结束\n");

System.exit(0);

}

//打印输出地图在控制台上

for(int i = 0 ; i < maps.length ; i++)

{

for(int j = 0 ; j < maps[i].length ; j++)

{

System.out.print(maps[i][j]);

}

System.out.println();

}

System.out.print("请输入方向:上:w,下:s,左:a,右:d : ");

}

}

}

package lzc;

import java.awt.*;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

public class Pig extends JFrame implements KeyListener{

//进行引入图片

ImageIcon pig = new ImageIcon("右猪.gif");

JLabel pigLab = new JLabel(pig);

//背景

ImageIcon grass = new ImageIcon("草地.gif");

JLabel grassLab = new JLabel(grass);

//声明一个构造方法

public Pig() {

// TODO Auto-generated constructor stub

this.setTitle("小猪佩奇");//设置窗体的标题

this.setSize(841,310);//设置窗体的大小

this.setVisible(true);//设置窗口的可见

this.setLocationRelativeTo(null);//设置窗体居中显示

//设置窗体的关闭默认操作:当你点击关闭窗口就自动退出程序

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗体大小不可改变

this.setResizable(false);

pigLab.setBounds(300, 150, 71, 88);

//添加背景

this.add(grassLab);

grassLab.setBounds(10,10,841,310);

//添加佩奇

grassLab.add(pigLab);

//进行监听

this.addKeyListener(this);

//move();

}

void move()

{

int x=600,y=40;

while(true)

{

x-=6;

pigLab.setLocation(x, y);

try {

Thread.currentThread().sleep(10);

} catch (Exception a) {

}

if(x<0) x=840;

}

}

public static void main(String[] args) {

new Pig();

}

/**

*用户按下并松开键盘上的按键

*/

@Override

public void keyPressed(KeyEvent arg0) {

// TODO Auto-generated method stub

char ch=arg0.getKeyChar();//获取按键

//获取佩琪的位置

Point p=pigLab.getLocation();

int x=p.x,y=p.y;

//JOptionPane.showMessageDialog(null, "你按了"+ch);

switch(ch)

{

case 'w':

//向上走动

y=y-20;

if(y<0)

{

y=310;

}

break;

case 's':

//向下走动

y=y+20;

if(y>310)

{

y=0;

}

break;

case 'a':

//向左走

x=x-20;

if(x<0)

{

x=841;

}

break;

case 'd':

//向右走

x=x+20;

if(x>841)

{

x=0;

}

break;

default :;

}

pigLab.setLocation(x, y);

}

@Override

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent arg0) {

// TODO Auto-generated method stub

}

}

点击获取代码和相关的图像资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值