📄 grabgame.java
字号:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GrabGame extends JApplet implements Runnable{
Graphics g2;//前台图形
Image road;//道路图片
Image tank;//坦克图片
Image truck;//卡车图片
Image crab;//螃蟹图片
Image UFO;//UFO图片
Image rocket;//火箭图片
Image die;//被撞螃蟹图片
Image gameover;//游戏结束图片
Image img2;//后台缓冲区
int xCrab;//螃蟹座标
int yCrab;
int xUFO;//UFO座标
int xRocket;//火箭座标
int xTank;//坦克座标
int xTruck;//卡车座标
int num;//生命数目
int score;//积分
int SuccessTimes;//成功通过街道的次数
int sleepTime;//线程休眠时间
int speed;//速度等级
boolean st=true;//线程运行开关,为true时线程运行
private Thread CrabThread;
public GrabGame(){//构造方法,用于设定初值
xCrab = 140;
yCrab = 205;
xUFO = -80;
xRocket = 320;
xTank = -80;
xTruck = 320;
num = 5;//有5次机会。或者说有5条命
sleepTime = 30;
speed = 1;
}
public void start(){//创建并启动线程
if(CrabThread == null){
CrabThread = new Thread(this);
CrabThread.start();
}
}
public void stop(){//停止并销毁线程
if(CrabThread != null){
CrabThread.stop();
CrabThread = null;
}
}
public void run(){
do{
try{
repaint();
Thread.sleep(sleepTime);
}
catch(InterruptedException e){
}
} while(st);//st为true时,线程运行,否则停止
}
public void destroy(){
}
public void init(){
this.addKeyListener(new HandleKey());
road = getImage(getCodeBase(), "pic/road.jpg");
tank = getImage(getCodeBase(), "pic/tank.jpg");
crab = getImage(getCodeBase(), "pic/crab.jpg");
truck = getImage(getCodeBase(), "pic/truck.jpg");
die = getImage(getCodeBase(), "pic/die.jpg");
rocket = getImage(getCodeBase(), "pic/rocket.jpg");
UFO = getImage(getCodeBase(), "pic/UFO.jpg");
gameover = getImage(getCodeBase(), "pic/game.jpg");
img2 = createImage(320, 240);//创建后台缓冲区
g2 = img2.getGraphics();
requestFocus();
setSize(420, 340);
}
public void paint(Graphics g){
g2.drawImage(road, 0, 0, this);
if(xUFO <= 320){//如果没有走到最左端
xUFO += 4; //则一直向前走
}
else{
xUFO = -80;//否则回到出发点
}
if(xRocket >= -80){ //如果没有走到最右端
xRocket -= 3; //则一直向前走
}
else{
xRocket = 320; //否则回到出发点
}
if(xTank <= 320){
xTank += 2;
}
else{
xTank = -80;
}
if(xTruck >= -80){
xTruck--;
}
else{
xTruck = 320;
}
g2.drawImage(UFO, xUFO, 41, this);
g2.drawImage(rocket, xRocket, 81, this);
g2.drawImage(tank, xTank, 121, this);
g2.drawImage(truck, xTruck, 161, this);
g2.drawImage(crab, xCrab, yCrab, this);
//以下为螃蟹与各种交通工具的碰撞检查
if(yCrab > 40&& yCrab < 80 && xCrab >= xUFO - 40
&& xCrab <= xUFO + 80){
g2.drawImage(die, xCrab, yCrab, this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){}
num--;
xCrab = 140;
yCrab = 205;
}
if(yCrab > 80 && yCrab < 120 && xCrab >= xRocket - 40
&& xCrab <=xRocket + 80){
g2.drawImage(die, xCrab, yCrab, this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){}
num--;//发生碰撞则少了一条命
xCrab = 140;//螃蟹回到出发点
yCrab = 205;
}
if(yCrab > 120 && yCrab < 160 && xCrab >=xTank - 40
&& xCrab <= xTank + 80){
g2.drawImage(die, xCrab, yCrab, this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){}
num--;
xCrab = 140;
yCrab = 205;
}
if(yCrab > 160 && yCrab < 200 && xCrab >=xTruck - 40
&& xCrab <= xTruck + 80){
g2.drawImage(die, xCrab, yCrab, this);
try{
CrabThread.sleep(500);
}catch(InterruptedException e){}
num--;
xCrab = 140;
yCrab = 205;
}
//以下为螃蟹成功通过道路的处理方法
if(yCrab > 205){
yCrab = 205;//回到出发点
}
if(yCrab <= 4){//如果成功通过道路
yCrab = 205;//则回到出发点
score += 100;//并且加100分
SuccessTimes++;//记录成功的次数
}
if(SuccessTimes == 5){//如果5次成功通过道路
if(sleepTime >= 10) {//则交通工具速度加快
sleepTime -= 6;
if(speed < 4){
speed++;
}
else{
speed = 4;
}
}
else{
sleepTime = 10;
}
num++;//命数加1
SuccessTimes = 0;
}
if(num < 0){//如果命数为0,则游戏结束
g2.drawImage(gameover, 0, 0, this);
st=false;
}
g2.drawString("生命=" + num + " ", 10, 10);
g2.drawString("成绩=" + score + " ", 10, 30);
g2.drawString("速度=" + speed + " ", 60, 10);
g.drawImage(img2, 0, 0, this);
}
public void update(Graphics g){
paint(g);
}
//键盘事件响应
class HandleKey extends KeyAdapter{
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_UP){
yCrab -= 40;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
yCrab += 40;
}
if(e.getKeyCode()==KeyEvent.VK_LEFT){
xCrab -= 40;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
xCrab += 40;
}
repaint();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -