网络小游戏
一、项目简介
功能描述:射击类小游戏,控制玩家击杀敌人获得分数,参考别人代码
参考git地址或博客地址:GitHub - Hpasserby/ZombieCrisis: JAVA 射击生存类小游戏
个人负责任务: 设计游戏界面和结束画面,设计玩家(生命值、武器等)和敌人角色(生命值、攻击方式等)
团队博客链接:java课设-CSDN博客
二、功能架构图
三、个人任务简述
设计游戏界面和结束画面,设计玩家(生命值、武器等)和敌人角色(生命值、攻击方式等)
四、部分代码
package Game;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.ImageObserver;
public class GameClient extends Frame {
public static final int WORLD_WIDTH = 960;
public static final int WORLD_HEIGHT = 720;
private Image offScreenImage;
private World world;
public GameClient(boolean Doubleplayer) {
this.world = new World(960, 720, Doubleplayer);
this.offScreenImage = null;
}
public void paint(Graphics g) {
if (!this.world.End()) {
this.world.drawWorld(g);
} else {
this.world.drawEnd(g);
}
}
public void update(Graphics g) {
if (this.offScreenImage == null) {
this.offScreenImage = this.createImage(960, 720);
}
Graphics gOffScreen = this.offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.lightGray);
gOffScreen.fillRect(0, 0, 960, 720);
gOffScreen.setColor(c);
this.paint(gOffScreen);
g.drawImage(this.offScreenImage, 0, 0, (ImageObserver)null);
}
public void lauchFrame() {
this.setLocation(400, 100);
this.setSize(960, 720);
this.setTitle("ZombieCrisis");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
this.setBackground(Color.lightGray);
this.addKeyListener(new KeyMonitor((Hero)this.world.getObject(0)));
if (this.world.getObject(1) instanceof Hero) {
this.addKeyListener(new KeyMonitor((Hero)this.world.getObject(1)));
}
this.setVisible(true);
(new Thread(new PaintThread())).start();
}
private class KeyMonitor extends KeyAdapter {
Hero hero;
public KeyMonitor(Hero hero) {
this.hero = hero;
}
public void keyReleased(KeyEvent e) {
this.hero.keyReleased(e);
}
public void keyPressed(KeyEvent e) {
this.hero.KeyPressed(e);
}
}
private class PaintThread implements Runnable {
private PaintThread() {
}
public void run() {
while(true) {
GameClient.this.repaint();
try {
Thread.sleep(30L);
} catch (InterruptedException var2) {
var2.printStackTrace();
}
}
}
}
}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package Game;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.ImageObserver;
import java.util.Random;
public class Blood extends GameObject {
private int picX;
private int picY;
public Blood(int x, int y, World world) {
super("Blood", 0, 0, 99999, x, y, false, world);
Random rand = new Random();
int picX = Math.abs(rand.nextInt()) % 2;
int picY = Math.abs(rand.nextInt()) % 2;
this.picX = picX * 475;
this.picY = picY * 475;
}
public void draw(Graphics g) {
g.drawImage((Image)imgMap.get(this.name), this.x - 30, this.y, this.x + 30, this.y + 45, this.picX, this.picY, this.picX + 475, this.picY + 475, (ImageObserver)null);
}
public void collisionResponse(GameObject object) {
}
public void onAttack(Weapon weapon) {
}
}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package Game;
import java.awt.Graphics;
import java.util.Iterator;
import java.util.List;
public class Enemy extends Role {
private Pathfinder pathfinder;
private Role target;
private List path;
private int refreshPath;
private int collisionDelay;
public Enemy(String name, int HP, int radius, int speed, int x, int y, World world) {
super(name, HP, radius, speed, x, y, world);
this.pathfinder = new Pathfinder(new WorldGrids(world), this);
this.target = this.getTarget();
this.refreshPath = 0;
this.collisionDelay = 0;
}
public Role getTarget() {
Iterator tmp = this.world.getObjectsIterator();
Role target = null;
double minDistance = 1.0E7;
while(tmp.hasNext()) {
GameObject obj = (GameObject)tmp.next();
if (obj instanceof Hero && obj.getHP() > 0) {
double distance = Math.pow((double)(this.x - obj.getX()), 2.0) + Math.pow((double)(this.y - obj.getY()), 2.0);
target = minDistance 0) {
return Direction.LD;
} else if (deltaX == 0 && deltaY > 0) {
return Direction.D;
} else if (deltaX > 0 && deltaY > 0) {
return Direction.RD;
} else if (deltaX > 0 && deltaY == 0) {
return Direction.R;
} else {
return deltaX > 0 && deltaY = 0.0 && angle = 337.5 && angle = 22.5 && angle = 67.5 && angle = 112.5 && angle = 157.5 && angle = 202.5 && angle = 247.5 && angle = 292.5 && angle 0) {
Grid nextGrid = (Grid)this.path.get(0);
this.oldDir = this.dir == Direction.STOP ? this.oldDir : this.dir;
this.dir = this.getNextDir(nextGrid);
}
if (this.getDir() == Direction.STOP) {
this.oldDir = this.judgeAccurateDir(this.target.getX(), this.target.getY()) == Direction.STOP ? this.oldDir : this.judgeAccurateDir(this.target.getX(), this.target.getY());
}
} else {
this.dir = Direction.STOP;
}
}
}
public void draw(Graphics g) {
this.locateDirection();
super.draw(g);
}
public void collisionResponse(GameObject object) {
this.dir = Direction.STOP;
if (this.maintainCollisionDelay(3)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

