📄 pig.java
字号:
package com.lovo.pig.model;
/**
* 将猪和绳子凑合在一起
*/
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import com.lovo.pig.view.MainFrame;
public class Pig{
private MainFrame mf;
//猪的初始位置
public static int pigX = 680;
public int pigY = 430;
//绳子的上端Y
private static int cordTopY = 150;
//死亡时猪图像下标
public int indexImgDeadPig = 0;
//猪发弹状态,用作存活时猪图像下标
public int readyFire = 0;
//猪存活状态
public boolean live = true;
//上一次发出的子弹
Bullet lastBullet ;
//猪移动方向
public String dir = "STOP";
public Pig(MainFrame mf) {
this.mf = mf;
}
/**
* 绘制猪,绳子
* @param g
*/
public void draw(Graphics g) {
if(live){//猪存活,反复绘制前两张图片(发弹以及发弹预备动作图片)
//绘制绳子,加57校正误差,先画左边的绳子,以免猪的手臂被挡住
g.drawImage(mf.images.getImgCord(), 700, cordTopY, 3, pigY - cordTopY + 57, null);
//猪
g.drawImage(mf.images.getImgPigs()[readyFire], pigX, pigY, null);
//右边的绳子
g.drawImage(mf.images.getImgCord(), 737, cordTopY, 3, pigY - cordTopY + 57, null);
}else if(!live){//猪死亡,绘制后8张图片(旋转下落动作图片)
g.drawImage(mf.images.getImgPigs()[indexImgDeadPig], pigX, pigY, null);
}
move();
toHell();//改变猪图像
}
/**
* 死猪
*/
private void toHell() {
if (!live) {//死亡往下掉时绘制后7张图片
indexImgDeadPig++;
if (indexImgDeadPig < 2 || indexImgDeadPig > 8) {//最后一张暂不绘制
indexImgDeadPig = 2;//反复
}
pigY=pigY+35;//往下掉
if (pigY >= 530) {
pigY = 530;
//下掉到一定高度后,绘制最后一张彻底完蛋的图像
indexImgDeadPig = 9;
//游戏结束
mf.gameOver = true;
}
}
}
/**
* 猪移动
*/
private void move(){
if(!live){
return;
}
if(dir.equals("UP")){
pigY -= 10;
}else if(dir.equals("DOWN")){
pigY += 10;
}
if(pigY < 100 ){
pigY = 100;
}else if(pigY > 400){
pigY =400;
}
}
/**
* 根据鼠标位置改变猪图像位置
* @param e
*/
public void mouseMoved(MouseEvent e){
if (live) {//猪存活,则改变位置
if(e.getY() > 150 && e.getY() < 400){
pigY = e.getY();//区间位置
}else if(e.getY() < 150){//最上位置
pigY = 150;
}else if(e.getY() > 400){//最下位置
pigY = 400;
}
}
}
/**
*发弹
* @param e
*/
public void fire(){
readyFire = 0;//第一张图片
if (live) {
if(mf.bullets.size() > 0){
lastBullet = mf.bullets.get(mf.bullets.size() - 1);//取出上一颗子弹
}else{//如果上一颗为空,则创建一颗
lastBullet = new Bullet(mf,pigY + 20);
lastBullet.x = 10;
}
if(lastBullet.x + 130 <= 680){
//上一发子弹飞出一定距离后才增加子弹,以免子弹过于密集
Bullet bullet = new Bullet(mf,pigY + 20);
mf.bullets.add(bullet);
lastBullet = bullet;
}
mf.musics.fire();//播放猪开火音乐
}
}
/**
* 活猪,准备发弹
*/
public void getReady(){
if (live){
readyFire = 1;//换成第2张图片
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -