day04

getRect

主代码

package nlday04;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Client extends Frame {             
	public static final int FRAME_WIDTH = 800;
	public static final int FRAME_LENGTH = 600;
	Toolkit tk = Toolkit.getDefaultToolkit();
	Dimension screenSize = tk.getScreenSize();
	int screenWidth = screenSize.width;
	int screenLength = screenSize.height;
	Image image = null;
	Food food = null;
	Huihui huihui = null;
	Tcpg tcpg = null;

	public static void main(String[] args) {
		new Client();
	}

	public void update(Graphics g) {
		image = this.createImage(FRAME_WIDTH, FRAME_LENGTH);
		Graphics gps = image.getGraphics();
		framePaint(gps);
		g.drawImage(image, 0, 0, null);
	}

	private void framePaint(Graphics g) {
		food.draw(g);
		huihui.draw(g);
		tcpg.draw(g);
		huihui.eatTcpg(tcpg);
		huihui.eatFood(food);
	}

	public Client() {
		food = new Food();
		tcpg = new Tcpg(300, 300);
		huihui = new Huihui(0, 25);
		this.setVisible(true);
		this.setResizable(false);
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		this.setSize(FRAME_WIDTH, FRAME_LENGTH);
		this.setLocation(screenWidth / 2 - FRAME_WIDTH / 2, screenLength / 2 - FRAME_LENGTH / 2);
		this.setBackground(Color.green);
		this.setTitle("慧慧吃菜");
		this.addKeyListener(new KeyMonitor());
		new Thread(new PaintThread()).start();
	}

	private class KeyMonitor extends KeyAdapter { // implements也可以
		public void keyPressed(KeyEvent e) {
			huihui.keyPressed(e);
		}

		public void keyReleased(KeyEvent e) {
			huihui.keyReleased(e);
		}
	}

	private class PaintThread implements Runnable {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			while (true) {
				repaint();
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

小代码

package nlday04;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;

public class Huihui {
	public static final int WIDTH = 50;
	public static final int LENGTH = 50;
	private int x, y;
	private int speedx = 6;
	private int speedy = 6;
	private char dir;
	private static Toolkit tk = Toolkit.getDefaultToolkit();
	private static Image image = null;
	private boolean bL, bU, bR, bD = false;
	static {
		image = tk.getImage(Huihui.class.getResource("../image/huihui.jpg"));
	}//当前路径和绝对路径的问题,有点米
	
	public Huihui(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public void draw(Graphics g) {
		g.drawImage(image, x, y, WIDTH, LENGTH, null);
		switch (dir) {
		case 'L': x -= speedx;break;
		case 'U': y -= speedy;break;
		case 'R': x += speedx;break;
		case 'D': y += speedy;break;
		}
		if(x<0){x=0;}
		if(y<25){y=25;}
		if(x+WIDTH > Client.FRAME_WIDTH){
			x = Client.FRAME_WIDTH-WIDTH;
		}
		if(y+LENGTH> Client.FRAME_LENGTH){
			y = Client.FRAME_LENGTH-LENGTH;
		}
	}

	private void decideDirection() {
		if (bL && !bU && !bR && !bD) {
			dir = 'L';
		} else if (bU && !bR && !bD && !bL) {
			dir = 'U';
		} else if (bR && !bD && !bL && !bU) {
			dir = 'R';
		} else if (bD && !bL && !bU && !bR) {
			dir = 'D';
		} else if (!bR && !bD && !bL && !bU) {
			dir = 'S';
		}
	}

	public void keyPressed(KeyEvent e) {
		int keyCode = e.getKeyCode();
		switch (keyCode) {
		case KeyEvent.VK_A:
			bL = true;
			break;
		case KeyEvent.VK_W:
			bU = true;
			break;
		case KeyEvent.VK_D:
			bR = true;
			break;
		case KeyEvent.VK_S:
			bD = true;
			break;
		}
		decideDirection();
	}

	public void keyReleased(KeyEvent e) {
		int keyCode = e.getKeyCode();
		switch (keyCode) {
		case KeyEvent.VK_A:
			bL = false;
			break;
		case KeyEvent.VK_W:
			bU = false;
			break;
		case KeyEvent.VK_D:
			bR = false;
			break;
		case KeyEvent.VK_S:
			bD = false;
			break;
		}
		decideDirection();
	}
	public Rectangle getRect(){
		return new Rectangle(x,y,WIDTH,LENGTH);
	}
	public void eatTcpg(Tcpg tcpg){
		if(this.getRect().intersects(tcpg.getRect())){     //这句话Intersects有点惊喜
			System.out.println("发生碰撞");
			tcpg.setX(-100);
			tcpg.setY(-100);
		}
	}
	public void eatFood(Food food){
		Rectangle[] rects = food.getRect();
		for (int i = 0; i < rects.length; i++) {		
			if(this.getRect().intersects(rects[i])){
				food.x[i] = -100;
				food.y[i] = -100;
			}
		}
	}
}

不好意思加了人脸package nlday04;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;

public class Tcpg {
public static final int WIDTH = 50;
public static final int LENGTH = 50;
private int x,y;
private static Toolkit tk =Toolkit.getDefaultToolkit();
private static Image image = null;
static {
image = tk.getImage(Huihui.class.getResource("…/image/tcpg.jpg"));
}
public Tcpg(int x, int y) {
this.x = x;
this.y = y;
}
public void draw(Graphics g){
g.drawImage(image, x, y, WIDTH, LENGTH, null);
}
public Rectangle getRect(){
return new Rectangle(x,y,WIDTH, LENGTH);

}
public int getX() {
	return x;
}
public void setX(int x) {
	this.x = x;
}
public int getY() {
	return y;
}
public void setY(int y) {
	this.y = y;
}

package nlday04;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;

public class Food {
public static final int WIDTH = 50;
public static final int LENGTH = 50;
int[] x = new int[6];
int[] y = new int[6];
private static Toolkit tk = Toolkit.getDefaultToolkit();
private static Image[] images = null;//静态图片数组等用static
static{
//加载静态资源
images = new Image[]{
tk.getImage(Food.class.getResource("…/image/1.jpg")),
tk.getImage(Food.class.getResource("…/image/2.jpg")),
tk.getImage(Food.class.getResource("…/image/3.jpg")),
tk.getImage(Food.class.getResource("…/image/4.jpg")),
tk.getImage(Food.class.getResource("…/image/5.jpg")),
tk.getImage(Food.class.getResource("…/image/6.jpg"))
};
}
public Food(){
for (int i = 0; i < images.length; i++) {
x[i] = (int)(Math.random()*700)+50;
y[i] = (int)(Math.random()*500)+50;
}
}
public void draw(Graphics g){
for (int i = 0; i < images.length; i++) {
g.drawImage(images[i],x[i], y[i], WIDTH, LENGTH, null);
}
}
public Rectangle[] getRect(){
Rectangle[] rects = new Rectangle[6];
for(int i = 0;i<rects.length;i++){ //这个数组区域面积相交,难为我了
rects[i] = new Rectangle(x[i],y[i],WIDTH,LENGTH);
}
return rects;
}
}
这个多图数组对我来说有难度,还有后面有枚举型的。我也不熟练。最近看电脑多了,我的眼睛酸涩且有红血丝。
day04的晚自习我忘记自己干嘛了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值