| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 黄金矿工小游戏制作步骤 -> 正文阅读 |
|
[游戏开发]黄金矿工小游戏制作步骤 |
1.新建一个普通的java项目2.新建一个文件夹imags是用来放图片素材3.在src创建一个文件夹com.sxt是用来放实体类的步骤1.窗口绘制2.绘制图片3.线绘制4.线摇摆5.线抓取6.创建金块7.双缓存8.抓取判定9.抓取返回10.创建多个金块11.石块创建12.拉取速度13.创建多种金块14.物体堆叠15.线完善16.积分设置17.爆破18.关卡设置19.游戏状态20.游戏计时效果21.成功效果22.失败效果23.游戏重置效果24.商店购物效果4.在com.sxt文件夹创建六个实体类Bg、Gametest、Gold、line、Object、Rock源码Bg类package com.sxt; import java.awt.*; public class Bg { //关卡数 static int level = 1; //目标得分 int goal = level*5; //总分 static int count = 0; //药水数量 static int waterNum = 3; //药水状态,默认是F,T表示正在使用 static boolean waterFlag = false; //开始时间 long startTime; //结束时间 long emdTime; //药水价格 int price = (int) (Math.random ()*10); //是否进入商店f不购买 boolean shop = false; //载入图片 Image bg = Toolkit.getDefaultToolkit ().getImage ("imags/bg.JPG"); //地面 Image bg1 = Toolkit.getDefaultToolkit ().getImage ("imags/bg1.JPG"); //天空 Image peo = Toolkit.getDefaultToolkit ().getImage ("imags/peo.PNG"); //矿工 Image water = Toolkit.getDefaultToolkit ().getImage ("imags/water.PNG");//药水图片 //绘制 void piantSeif(Graphics g){ g.drawImage (bg,0,200,null); g.drawImage (bg1,0,0,null); switch (Gametest.state){ case 0: drawWord (g,80,Color.green,"准备开始",200,400); break; case 1: g.drawImage (peo,310,50,null); drawWord (g,30,Color.black,"积分:"+count,30,150); //药水组件 g.drawImage (water,450,40,null); drawWord (g,30,Color.black,"*"+waterNum,510,70); //关卡数 drawWord (g,20,Color.black,"第"+level+"关",30,60); //目标积分 drawWord (g,30,Color.black,"目标"+goal,30,110); //时间组件 emdTime = System.currentTimeMillis (); long tim = 20-(emdTime-startTime) /1000; drawWord (g,30,Color.black,"时间"+(tim>0?tim:0),520,150); break; case 2: //药水组件 g.drawImage (water,300,400,null); drawWord (g,30,Color.black,"价格"+price,300,500); drawWord (g,30,Color.black,"是否购买?",300,550); if(shop){ count = count-price; waterNum++; shop=false; Gametest.state=1; startTime=System.currentTimeMillis (); } break; case 3: drawWord (g,80,Color.cyan,"失败",250,350); drawWord (g,80,Color.cyan,"积分:"+count,200,450); break; case 4: drawWord (g,80,Color.red,"成功",250,350); drawWord (g,80,Color.red,"积分:"+count,200,450); break; default: } } //t倒计时完成,f正在倒计时 boolean gametime (){ long tim =(emdTime-startTime)/1000; if(tim>20){ return true; } return false; } //重置元素 void reGame(){ //关卡数 level = 1; //目标得分 goal = level*5; //总分 count = 0; //药水数量 waterNum = 3; //药水状态,默认是F,T表示正在使用 waterFlag = false; } //绘制字符串 public static void drawWord(Graphics g,int size,Color color,String str,int x,int y){ //字符串颜色 g.setColor (color); //字体 g.setFont (new Font ("仿宋",Font.BOLD,size)); //打印字符串 g.drawString (str,x,y); ? ? ? ?} } Gametest类package com.sxt; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.*; //继承JFrame类 public class Gametest extends JFrame { //0未开始 1运行 2商店 3失败 4胜利 static int state; //存储金块,石块 List<Object> objectList = new ArrayList<> (); Bg bg = new Bg (); line line = new line (this); //金子 //添加金块:无参构造 { //是否可以放置 boolean isPlace = true; //金块创建 for (int i = 0; i < 11; i++) { double random = Math.random (); Gold gold;//存放当前生产的金块 if(random<0.3){gold = new GoldMini ();} else if(random<0.7){ gold = new Gold ();} else {gold = new GoldPlus ();} for(Object obj:objectList){ if(gold.getRec ().intersects (obj.getRec ())){ //不可放置,需要重新生成 isPlace= false; } } if(isPlace){ objectList.add (gold);} else { isPlace=true;i--;} } //石块创建 for (int i = 0; i < 5; i++) { Rock rock = new Rock (); for ( Object obj:objectList){ if(rock.getRec ().intersects (obj.getRec ())){ isPlace=false; } } if (isPlace){ objectList.add (rock); } else {isPlace=true;i--;} } } //闪动问题 Image offScreenImage; void launch(){ this.setVisible (true); this.setSize (768,1000); this.setLocationRelativeTo (null); this.setTitle ("bubbles矿工"); //关闭窗口 setDefaultCloseOperation (EXIT_ON_CLOSE); addMouseListener (new MouseAdapter () { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked (e); switch (state){ case 0: if(e.getButton ()==3){ state=1; bg.startTime = System.currentTimeMillis (); } break; case 1: //左右摇摆,点击右键 if (e.getButton () == 1&&line.state==0) { line.state = 1; } //抓取返回,点击右键 if(e.getButton ()==3&&line.state==3&&Bg.waterNum>0){ Bg.waterFlag=true; Bg.waterNum--; } break; case 2: if(e.getButton ()==1){ bg.shop=true; } if(e.getButton ()==3){ state=1; bg.startTime = System.currentTimeMillis (); } break; case 3: case 4: if(e.getButton ()==1){ state=0; bg.reGame (); line.reGame (); } break; default: } } }); while (true) { repaint (); nextLevel (); //添加延时效果 try { Thread.sleep (10); } catch (InterruptedException e) { e.printStackTrace (); } } } //下一关 public void nextLevel(){ if(bg.gametime () && state==1){ if(Bg.count >= bg.goal){ if(Bg.level==5){ state=4; } else { state = 2; Bg.level++; } }else{ state=3; } dispose (); Gametest gametest1 = new Gametest (); gametest1.launch (); } } //绘制方法 @Override public void paint(Graphics g) { offScreenImage = this.createImage (768,1000 ); //添加画笔 Graphics gImage = offScreenImage.getGraphics (); bg.piantSeif (gImage); if(state==1){ //绘制物体 for(Object obj:objectList){ obj.paintSeif (gImage); } line.pianSelf (gImage); } g.drawImage (offScreenImage,0,0,null); } public static void main(String[] args) { Gametest gametest = new Gametest (); gametest.launch (); ? ? ? ? } } Gold类
line类
Objct类
Rock类
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/28 11:51:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |