先上效果图
可以通过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
-
-
}
-
-
}
点击获取代码和相关的图像资源
转载:https://blog.csdn.net/update7/article/details/108980339
查看评论