人物-小丑(敌方-友方)
子弹-帽子
墙体
爆炸物
小丑: 宽高 , 位置(x y), 移动速度
帽子: 宽高 , 位置(x y), 移动速度
墙体: 宽高 , 位置(x y)
爆炸物:宽高 , 位置(x y)
小丑: 移动 , 攻击 , 人物撞边界 ,
子弹: 移动 , 子弹撞墙 , 子弹撞边界 ,
墙体: 静止不动
爆炸物: 爆炸物消失
1 如何将图片加载到窗体里
背景图片加载
人物-小丑加载
发射物-帽子加载 Missile
墙体-加载 Wall
爆炸物-加载 Explode
2 如何创建窗体
3 如何发射子弹(如何使用键盘触发事件)
接入网络,多人作战
public class GameClient extends Frame {}
1
关于Farme类:
1.Farme类是Java自带的一个系统类
2.Farme类的作用是可以制作出带有标题和边框的顶层窗口
public void start(){
//启动游戏时在控制台输出显示"游戏开始"
System.out.println("游戏开始");
//窗口的标题设置
this.setTitle("原谅帽带战");
/*
*窗体的大小以及位置设置——调用Frame类中的setBounds方法
* setBounds方法具体内容:setBounds(int横坐标,int纵坐标,int长,int宽);
* 参数中横纵坐标为0,表示窗口从计算机屏幕左上角开始铺开显示(窗口中心点)
*/
this.setBounds(0,0,700,500);
//让窗体显示出来
this.setVisible(true);
//点击窗口x关闭键响应关闭
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
//退出游戏后在控制台输出显示"游戏结束"
System.out.println("游戏结束");
//调用System类中的exit方法以实现窗口关闭按钮(X)的生效
System.exit(0);
}
});}//游戏入口public static void main(String[] args) {
// 创建本类对象
GameClient gameClient = new GameClient();
// 使用本类对象调用start方法,开始游戏
gameClient.start();}
public class CommonUtils {
//读取图片方法getImage
public static Image getImage(String imgPath) {
//参数为图片路径地址
ImageIcon imageIcon = new ImageIcon(imgPath);
return imageIcon.getImage();
}}
// 将背景图片的路径赋值给常量BG_PATHpublic static final String BG_PATH = "images/bg.png";// 定义一个图片的静态变量(用于插入不同图片)private static Image image;// 背景图静态块,调用背景图片路径,所有资源(背景图片,音频,视频)只需要加载一次static {
image = CommonUtils.getImage(BG_PATH);}//重写父类Frame类的paint方法以插入各种图片@Overridepublic void paint(Graphics g){
//插入背景图定义位置和宽 高
g.drawImage(image,0,0,700,500,this);}
定义角色属性
// 人物图片路径属性public static final Image buffoonImage = CommonUtils.getImage("images/body/s-left.png");// 人物-横坐标private int x;// 人物-纵坐标private int y;// 图片-宽度private int width;// 图片-高度private int height;// 人物-速度private int speed;// 人物-方向private String dir;//游戏窗体属性 因为小丑要在窗体中显示private GameClient gameClient;
定义无参带参构造以给角色的属性赋值
//无参构造public Buffoon() {}//带参构造public Buffoon(int x, int y, GameClient gameClient) {
this.x = x;
this.y = y;
this.width = 50;
this.height = 50;
this.speed = 3;
this.dir = "STOP";// 人物刚创建时为静止状态
this.gameClient = gameClient;}
定义角色方法
//插入角色图方法public void paint(Graphics g){
g.drawImage(buffoonImage,this.x,this.y,this.width,this.height,this.gameClient);}//生成get set 方法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;}public int getWidth() {
return width;}public void setWidth(int width) {
this.width = width;}public int getHeight() {
return height;}public void setHeight(int height) {
this.height = height;}public int getSpeed() {
return speed;}public void setSpeed(int speed) {
this.speed = speed;}public String getDir() {
return dir;}public void setDir(String dir) {
this.dir = dir;}public GameClient getgameClient() {
return gameClient;}public void setgameClient(GameClient gameClient) {
this.gameClient = gameClient;}
// 创建人物-小丑,在参数中定义位置private Buffoon buffoon = new Buffoon(200,200,this);//重写父类Frame类的paint方法以插入各种图片@Overridepublic void paint(Graphics g){
//用角色-小丑调用paint方法以给图片宽 高 速度
buffoon.paint(g);}
定义发射物-帽子的属性
//发射物图片路径属性public static final Image missileImage = CommonUtils.getImage("images/missile.png");// 帽子-高度private int height;// 帽子-长度private int width;// 帽子-速度private int speed;// 帽子-横坐标private int x;// 帽子-纵坐标private int y;//游戏窗体属性 因为帽子要在窗体中显示private GameClient gameClient;
定义无参带参构造给帽子的属性赋值
//无参构造public Missile(){}//带参构造public Missile(int x,int y,GameClient gameClient){
this.x=x;
this.y=y;
this.width=20;
this.height=20;
this.speed=10;
this.gameClient=gameClient;}
定义帽子的方法
//插入帽子图片的方法public void paint(Graphics g){
g.drawImage(missileImage,this.x,this.y,this.width,this.height,this.gameClient);}//setget方法public int getHeight() {
return height;}public void setHeight(int height) {
this.height = height;}public int getWidth() {
return width;}public void setWidth(int width) {
this.width = width;}public int getSpeed() {
return speed;}public void setSpeed(int speed) {
this.speed = speed;}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;}public GameClient getgameClient() {
return gameClient;}public void setgameClient(GameClient gameClient) {
this.gameClient = gameClient;}
// 创建发射物-帽子(missile),在参数中定义位置private Missile missile = new Missile(300,300,this);//重写父类Frame类的paint方法以插入各种图片@Overridepublic void paint(Graphics g){
//用发射物-帽子调用paint方法以给图片宽 高 速度
missile.paint(g);}
定义爆炸物属性
//爆炸物图片路径属性public static final Image explodeImage = CommonUtils.getImage("images/explode.png");//爆炸物-高度private int height;//爆炸物-长度private int width;//爆炸物-横坐标private int x;//爆炸物-纵坐标private int y;//爆炸物窗体属性 因为帽子要在窗体中显示private GameClient gameClient;
定义无参带参构造给爆炸物的属性赋值
//无参构造public Explode(){}//带参构造public Explode(int x,int y,GameClient gameClient){
this.x=x;
this.y=y;
this.width=30;
this.height=70;
this.gameClient=gameClient;}
定义帽子的方法
//插入角色图方法public void paint(Graphics g){
g.drawImage(explodeImage,x,y,this.width,this.height,this.gameClient);}//生成get set方法public int getHeight() {
return height;}public void setHeight(int height) {
this.height = height;}public int getWidth() {
return width;}public void setWidth(int width) {
this.width = width;}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;}public GameClient getgameClient() {
return gameClient;}public void setgameClient(GameClient gameClient) {
this.gameClient = gameClient;}
// 创建发射物-爆炸物(explode),在参数中定义位置private Explode explode = new Explode(300,100,this);//重写父类Frame类的paint方法以插入各种图片@Overridepublic void paint(Graphics g){
//用爆炸物调用paint方法以给图片宽 高
explode.paint(g);}
定义障碍物属性
//墙体图片属性public static final Image wallImageZ = CommonUtils.getImage("images/wall-v.png");//墙体-高度private int height;//墙体-长度private int width;//墙体-横坐标private int x;//墙体-纵坐标private int y;//游戏窗体属性 因为墙要在窗体中显示private GameClient gameClient;
定义无参带参构造给障碍物的属性赋值
//无参构造public Wall(){}//带参构造public Wall(int x,int y,GameClient gameClient){
this.x=x;
this.y=y;
this.width=30;
this.height=70;
this.gameClient=gameClient;}
定义障碍物的方法
//插入墙体图片的方法public void paint(Graphics g){
g.drawImage(wallImageZ,this.x,this.y,this.width,this.height,this.gameClient);}//生成get set 方法public int getHeight() {
return height;}public void setHeight(int height) {
this.height = height;}public int getWidth() {
return width;}public void setWidth(int width) {
this.width = width;}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;}public GameClient getgameClient() {
return gameClient;}public void setgameClient(GameClient gameClient) {
this.gameClient = gameClient;}
// 创建墙体(wall),在参数中定义位置private Wall wall=new Wall(500,200,this);
1
2
「艾尔登法环」梅琳娜手办开订 立体手办▪
万代「艾尔登法环」白狼战鬼手办开订 立体手办▪
「夏目友人帐」猫咪老师粘土人开订 立体手办▪
「五等分的新娘∬」中野三玖·白无垢版手办开订 立体手办▪
「海贼王」乌索普Q版手办开订 立体手办▪
良笑社「初音未来」新手办开订 立体手办▪
「黑岩射手DAWN FALL」死亡主宰手办开订 立体手办▪
「盾之勇者成名录」菲洛手办登场 立体手办▪
「魔法少女小圆」美树沙耶香手办开订 立体手办▪
「咒术回战」七海建人粘土人登场 立体手办▪
「五等分的新娘」中野二乃白无垢手办开订 立体手办▪
「为美好的世界献上祝福!」芸芸粘土人开订 立体手办▪
「公主连结 与你重逢」六星可可萝手办开订 立体手办▪
「女神异闻录5」Joker雨宫莲手办开订 立体手办▪
「间谍过家家」约尔・福杰粘土人登场 立体手办▪
「街角魔族 2丁目」吉田优子手办开订 立体手办▪
「火影忍者 疾风传」旗木卡卡西·暗部版粘土人登场 立体手办▪
「佐佐木与宫野」宫野由美粘土人开订 立体手办▪
「盾之勇者成名录」第2季拉芙塔莉雅手办开订 立体手办▪
「咒术回战」两面宿傩Q版坐姿手办开订 立体手办▪
「DATE·A·BULLET」时崎狂三手办开订 立体手办▪
「狂赌之渊××」早乙女芽亚里粘土人开订 立体手办▪
「魔道祖师」魏无羨粘土人开订 立体手办▪
「新·奥特曼」奥特曼手办现已开订 立体手办▪