先上效果图

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

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

代码一共是三个.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

}

}

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

java推箱子游戏源代码_java实现推箱子小游戏(附源码)相关推荐

  1. java开发桌球游戏源代码_Java学习的开端小游戏----桌球游戏

    此小游戏只为让Java初学者感受到学习Java的乐趣,不为严谨. 以下是完整代码: package com.bjsxt.game; import java.awt.Graphics; import j ...

  2. Python版基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式

    基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式 按空格进入单人模式,按't'进入双人模式,双人模式下玛丽1采用空格键上跳,玛丽2采用方向上键上跳. 完整代码下载地址:Pyth ...

  3. HTML趣味钢琴小游戏源代码,钢琴琴谱练习小游戏源代码

    HTML趣味钢琴小游戏源代码,钢琴琴谱练习小游戏源代码 完整代码下载地址:HTML趣味钢琴小游戏源代码,钢琴琴谱练习小游戏源代码 index.html <!DOCTYPE html> &l ...

  4. 将kubernetes制作成一个3D射击游戏,好玩的停不下来,附源码

    文章目录 前提条件 开始实践 构建自己的程序 原文 大家好,我是小碗汤,今天演示一个项目,利用Unity做场景.用C#做交互逻辑,将k8s制作成一个3D射击游戏.正好最近在学习Unity,所以利用这个 ...

  5. java计算机毕业设计ssm兴发农家乐服务管理系统n159q(附源码、数据库)

    java计算机毕业设计ssm兴发农家乐服务管理系统n159q(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行 ...

  6. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  7. java计算机毕业设计ssm基于SSM学生信息管理系统37myx(附源码、数据库)

    java计算机毕业设计ssm基于SSM学生信息管理系统37myx(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm ...

  8. JAVA计算机毕业设计林家餐厅自助点餐管理系统(附源码、数据库)

    JAVA计算机毕业设计林家餐厅自助点餐管理系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecli ...

  9. Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW)

    Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行) ...

  10. JAVA计算机毕业设计甜趣网上蛋糕店订购系统(附源码、数据库)

    JAVA计算机毕业设计甜趣网上蛋糕店订购系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

最新文章

  1. ASP.NET安全问题--ASP.NET中的授权问题(前篇)
  2. Objective-C入门
  3. Linux 下 MediaWiki 的安装使用
  4. java 输出数据类型_输入输出和java数据类型
  5. flink中datastream和dataset各自print()的异同
  6. HTML DOCTYPE 标签 -- DTDs 文档类型声明
  7. 一个有关Update类型的存储过程的问题
  8. php去除英文和标点,php 过滤英文标点符号及过滤中文标点符号代码_php技巧
  9. java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果
  10. java代码块是对象吗_面向对象(Java中普通代码块,构造代码块,静态代码块区别及代码示例)...
  11. linux下iconv编码转换的用法
  12. The Cow Lexicon(POJ-3267)
  13. MySQL-30道面试题
  14. hnu 暑期实训之选美比赛
  15. ASP.NET MVC3+EF4+Oracle入门实例(一)
  16. 压电式加速计matlab,低频压电加速度传感器的噪声特性及信号处理方法研究
  17. Leetcode 53.最大子序列和
  18. Git fatal: empty string is not a valid pathspec, please use . instead if you meant to match
  19. Rust : Tonic 基于Rust的gRPC实现
  20. 关于前端的margin

热门文章

  1. mysql函数变量存储_MySQL存储过程、存储函数、变量
  2. JAVA基础(2/17)-基本语法_数据类型
  3. python基本规则语法
  4. 把.Net开发环境迁移到Linux上去
  5. 17ー03ー20 日本語勉強
  6. 使用Ant构建简单项目
  7. MySql视图、存储过程、函数、索引
  8. 杰出的橙色网站设计案例
  9. 一套小程序源码多少钱_微信点餐小程序怎么做,微信扫码点餐系统多少钱一套?...
  10. IplImage结构及与其相关的读写函数