2 Star 0 Fork 0

派大星 / FightGame

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Game.java 10.10 KB
一键复制 编辑 原始数据 按行查看 历史
韩瑞 提交于 2021-05-17 20:53 . 对象创建和关于
package Data;
import Utils.Load;
import Utils.Rectangle;
import model.Boss;
import model.Buff;
import model.Bullet;
import model.SceneObject;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Game implements Scenes {
//创建玩家与boss对象
SceneObject player, boss;
//敌人对象
List<SceneObject> enemy;
//玩家的子弹,敌人的子弹,道具
List<Bullet> bulletPlayer, bulletEnemy, bulletBuff;
//当前关卡,当前分数
int checkPoint = 1, fraction = 0;
//飞机的飞行方向,此处注意按键按一次,和一直按
boolean left = false, right = false, down = false, up = false;
//fps,当前帧数
int fps = 0;
//提示的x坐标
int tipsX = -1000;
public Game() {
//创造一个飞机,放在场景下方,玩家的属性不会使用
player = new SceneObject(Data.WIDTH / 2 - 40, Data.HEIGHT - 100, Data.SPEED
, 0, Data.playerSceneObjectImage, Data.playerDeathImage);
//设置飞机碰撞点,因为游戏采用的是矩形碰撞检测,会出现误差
player.upperLeft = new Point(15, 15);
player.lowerRight = new Point(75, 75);
//初始化列表
bulletPlayer = new ArrayList<>();
bulletEnemy = new ArrayList<>();
bulletBuff = new ArrayList<>();
enemy = new ArrayList<>();
}
//切合指令,说白了就是操作
public void onKeyDown(int keyCode) {
if (keyCode == KeyEvent.VK_E || keyCode == KeyEvent.VK_UP)
up = true;
if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN)
down = true;
if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT)
left = true;
if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT)
right = true;
}
//你总要松手啊
public void onKeyUp(int keyCode) {
if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP)
up = false;
if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN)
down = false;
if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT)
left = false;
if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT)
right = false;
}
public void onMouse(int x, int y, int struts) {
}
//.............................................................................................
//重点,重中之重+2
public void draw(Graphics g) {
if (fps == 0) {
left = right = up = down = false;
}
//打游戏当然要刷帧嘛
fps++;
//飞机移动
move();
}
//重点,重中之重+1
//管控飞机啊,子弹啊,buff啊
void move() {
if (player != null) {
//敌人的子弹总要有方向啊
Data.x = player.x;
Data.y = player.y;
//jojo,游戏是有边界的啊
if (up) player.move(0, -player.speed);
if (player.y < 0) player.y = 0;
if (down) player.move(0, player.speed);
if (player.y > Data.HEIGHT - player.height) player.y = Data.HEIGHT - player.height;
if (left) player.move(-player.speed, 0);
if (player.x < 0) player.x = 0;
if (right) player.move(player.speed, 0);
if (player.x > Data.WIDTH - player.width) player.x = Data.WIDTH - player.width;
}
//boss动起来
if (boss != null) boss.move();
//子弹运动
for (Bullet bullet : bulletPlayer){
bullet.move();
}
for (Bullet bullet : bulletEnemy){
bullet.move();
}
//道具!跑!!!
for (Bullet bullet : bulletBuff){
bullet.move();
}
//敌机也要动啊,不然就成靶子了
for (SceneObject sceneObject: enemy){
sceneObject.move();
}
}
//万物皆有一死
void remove(){
//道具这个东西吧,不能拿的太容易啊
Random random = new Random();
//子弹销毁
for (int i = 0; i<bulletEnemy.size();){
if (bulletEnemy.get(i).isRemove()){
bulletEnemy.remove(i);
}else i++;
}
for (int i = 0; i < bulletPlayer.size(); ) {
if (bulletPlayer.get(i).isRemove()) {
bulletPlayer.remove(i);
} else i++;
}
for (int i = 0; i < bulletBuff.size(); ) {
if (bulletBuff.get(i).isRemove()) {
bulletBuff.remove(i);
} else i++;
}
//飞机炸啦
for (int i = 0; i<enemy.size();){
if (enemy.get(i).isRemove()){
//buff来袭
if (random.nextInt(100)>80){
if (random.nextInt(100)>60){
bulletBuff.add(new Buff(Buff.BUFF1,enemy.get(i).x,enemy.get(i).y));
}else {
bulletBuff.add(new Buff(Buff.BUFF2,enemy.get(i).x,enemy.get(i).y));
}
}
//缺东西
//加分啦
fraction +=1;
if (fraction/100 == checkPoint){
boss = new Boss();
checkPoint +=1;
//
new Thread(()->{
tipsX = -Data.WIDTH;
try {
for (int n= 0;n<=Data.WIDTH/2;n++){
tipsX +=2;
Thread.sleep(4);
}
Thread.sleep(2000);
for (int n = 0;n<Data.WIDTH/4;n++){
tipsX +=4;
Thread.sleep(4);
}
}catch (InterruptedException e){
e.printStackTrace();
}
tipsX = -1000;
}).start();
}
enemy.remove(i);
}else i++;
}
//boss也会死啊
if (boss != null){
//buss必掉buff
if (boss.isRemove()){
bulletBuff.add(new Buff(Buff.BUFF2,boss.x+boss.width/2,boss.y+boss.height/2));
//..........多来几个
boss = null;
}
}
boolean isPlay = false;
//检测子弹碰撞
for (int i = 0;i<bulletPlayer.size();i++){
Point point = bulletPlayer.get(i).getPoint();
if (bulletPlayer.get(i).buffetIndex>1) continue;
//检测子弹是否打中boss
if (boss != null && boss.hp>0){
Point rectangle[] = boss.getCollisionRect();
if (Rectangle.isInternal(point.x,point.y,rectangle[0].x,
rectangle[0].y,rectangle[1].x,rectangle[1].y)){
boss.hp -= bulletPlayer.get(i).structs;
bulletPlayer.get(i).buffetIndex = 1;
bulletPlayer.get(i).speed = 5;
if (boss.hp<=0){
boss.imgIndex = 10;
}
if (!isPlay){
isPlay =true;
//load........音乐
}
continue;
}
}
for (SceneObject sceneObject:enemy){
Point rectangle[] = sceneObject.getCollisionRect();
if (sceneObject.hp<0) continue;
if (Rectangle.isInternal(point.x,point.y,
rectangle[0].x,rectangle[0].y,rectangle[1].x,rectangle[1].y)){
if (!isPlay){
isPlay = true;
//load...........
}
sceneObject.hp -= bulletPlayer.get(i).structs;
bulletPlayer.get(i).buffetIndex = 1;
bulletPlayer.get(i).speed = 5;
if (sceneObject.hp <0){
sceneObject.kill();
sceneObject.speed = 1;
}
break;
}
}
}
Point rectangle[],point;
//敌方子弹碰撞
if (player != null){
rectangle = player.getCollisionRect();
if (player != null && player.hp>0){
for (Bullet b :bulletEnemy){
point = b.getPoint();
if (Rectangle.isInternal(point.x,point.y,rectangle[0].x,rectangle[0].y,rectangle[1].x,rectangle[1].y)){
player.hp -= b.structs;
player.kill();
death();
}
}
}
}
//吃buff
if (player !=null&&player.hp>0){
rectangle = player.getCollisionRect();
for (Bullet buff:bulletBuff){
Point p = buff.getPoint();
if (Rectangle.isInternal(p.x,p.y,rectangle[0].x,rectangle[0].y,rectangle[1].x,rectangle[1].y)){
buff.x = -100;
if (buff.structs == Buff.BUFF1)
player.setBuff(16,0);
else
player.setBuff(0,16);
}
}
}
//飞机之间的碰撞
if (player != null){
for (SceneObject sceneObject:enemy){
int x = sceneObject.x + sceneObject.width/2,y = sceneObject.y + sceneObject.height/2;
if (Rectangle.isInternal(x,y,player.x,player.y,player.width,player.height)){
player.kill();
sceneObject.kill();
death();
}
}
}
}
//管理场景所有子弹的发射
void attack(){
//我方飞机5帧发射一次
if (player != null && player.hp>0){
if (!player.isRemove()&&fps%5==0)
bulletPlayer.addAll(Arrays.asList(player.attack()));
}
//
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/patrick-star-444/mail-list.git
git@gitee.com:patrick-star-444/mail-list.git
patrick-star-444
mail-list
FightGame
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891