先上效果圖

可以通過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://www.uj5u.com/qita/168389.html
標籤:其他
下一篇:TCP的三次握手和四次揮手
