/** * */ package com.leng.frame; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JOptionPane; import com.leng.IO.SortBean; import com.leng.IO.SortDao; import com.leng.Util.Control; import com.leng.Util.InitImage; import com.leng.Util.Music; import com.leng.Util.PressKeyEvent; import com.leng.role.BossImage; import com.leng.role.GameMap; import com.leng.role.GirlImage; import com.leng.role.Monster; import com.leng.role.Monster1; import com.leng.role.Prop; /** * 游戏的主窗体 * @author 冷若寒风逝、此戏已散场、 * 2013-8-26 * */ public class GameStartFrame extends JFrame implements Runnable{ /** * 公共集合 用于放置 任何 Monster的子类对象 */ public static List<Monster> rolelist = new ArrayList<Monster>(); /** * 媒体追踪器 */ public MediaTracker track; //双缓冲画布 private Image memoryImage; //双缓冲画笔 private Graphics memoryGraphics; /** * 地图对象 */ GameMap gameMap=new GameMap(); /** * BOSS对象 */ public static BossImage bossimage; /** * 监听器类 */ PressKeyEvent presskey=new PressKeyEvent(); /**记录成功通关玩家的信息**/ SortDao sor; /** * 主角对象 */ public static GirlImage girl=new GirlImage(); /**主角数量 也就是人数*/ public static int girlNumber=5; /**主角的杀人数**/ public static int peopleCount; /*** * 玩家得分 */ public static int pointer; /**音乐播放类**/ private Music music; /*** * 怪物生成控制器 */ Control cont=new Control(); /** * 游戏是否在运行 */ public static boolean isRun=true; /*** * 通关是否成功 */ public static boolean isPass=false; /*** * 得分图片 */ public static Image pointerImge; public GameStartFrame() { //设置窗体大小 this.setSize(900, 700); //设置关闭 窗体关闭程序结束 this.setDefaultCloseOperation(3); //窗体居中 this.setLocationRelativeTo(null); //窗体大小不可以被改变 this.setResizable(false); //设置窗体可见 this.setVisible(true); /**实例化音乐播放类***/ try { music=new Music(); } catch (MalformedURLException e) { e.printStackTrace(); } /** * 双缓冲画布和画笔的初始化 */ /**900*700的内存画布*/ this.memoryImage=this.createImage(900,700); /**内存画笔*/ this.memoryGraphics=this.memoryImage.getGraphics(); /**设置画笔颜色*/ memoryGraphics.setColor(Color.red); /**设置字体大小*/ memoryGraphics.setFont(new Font("宋体",Font.BOLD,30)); //添加监听器 this.addKeyListener(presskey); /** * 媒体追踪器 */ track=new MediaTracker(this); rolelist.add(girl); //完成地图 BOss图片/的加载 InitImage.init(track); //女主角图片的加载 InitImage.inGirl(track); /**调用音乐播放类的方法播放战斗界面音乐**/ music.playOP(); //this表示的是实现了runnable接口的实现类 那么线程启动后就不会调用run方法了 Thread th=new Thread(this); th.start(); } @Override public void run() { while(isRun){ this.draw(this.getGraphics()); try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 如果通关成功 就进入成功画面 * 失败就进入失败画面 * * */ /**停止播放音乐*/ music.stopOP(); if(isPass){ sor=new SortDao(); String name=JOptionPane.showInputDialog("请输入你的大名:",null); SortBean st=new SortBean(); st.setName(name); st.setPointer(this.pointer); sor.writ(st); Thread t=new Thread(new TheCharts()); t.start(); }else{ new LoseFrame(); } /**游戏结束 关闭当前游戏窗体*/ this.dispose(); } /* * 绘制窗体 * Graphics g 画笔 * 第一个参数 要画的图片 * 第二个参数 图片绘制开始的X坐标 * 第三个参数 图片绘制的Y 坐标 * 第四个参数 图片绘制在哪里 */ private void draw(Graphics g){ //调用地图类的方法 绘制地图 gameMap.drawMySelf(memoryGraphics); /** * 绘制rolelist集合中的所有对象 */ for(int i=0;i<rolelist.size();i++){ Monster m=rolelist.get(i); if(m!=null){ m.drowMySelf(memoryGraphics); } } this.drawInfo(); /*** * 调用控制器 产生怪物 */ cont.Produce(); // memoryGraphics.drawRect(bossRect.x, bossRect.y, bossRect.width, bossRect.height); // girlRect.x=girlx; // girlRect.y=girly; // memoryGraphics.drawRect(girlRect.x, girlRect.y, girlRect.width, girlRect.height); //判断两个碰撞区域是否相交 相交为true 否则为 false // System.out.println(girlRect.intersects(bossRect)); //利用窗体的画笔将图片绘制到窗体 防止闪烁 g.drawImage(this.memoryImage, 0, 0,this); } /*** * 绘制游戏信息 * */ private void drawInfo(){ /**绘制女孩图片*/ memoryGraphics.drawImage(GirlImage.forwardByHitImage[0], 30, 40,40,30 ,null); /**绘制女孩人数*/ memoryGraphics.drawString(" x "+GameStartFrame.girlNumber,60, 65); /**绘制炸弹图片*/ memoryGraphics.drawImage(Prop.propImage[1], 30, 90, 40, 30,null); /**绘制炸弹数量*/ memoryGraphics.drawString(" x "+girl.getBombNumber(), 60, 115); /**玩家得分图片*/ memoryGraphics.drawImage(pointerImge, 30, 140, 40, 30, null); /**玩家得分*/ memoryGraphics.drawString(" x "+pointer, 60, 165); } //main方法一执行就开启了主线程、其他线程都是在主线程里面产生的 /* * 主线程的特点: * 最先产生 * 能产生子线程 * 回收资源 */ public static void main(String[] args) { Thread th=new Thread(new NewGame()); th.start(); } }

wzy5432 LV1
2023年4月18日
huangzy LV12
2023年4月6日
总有人间一两风 LV8
2022年12月12日
一头土猪 LV7
2021年12月22日
zhanghe001 LV9
2021年12月18日
选了了 LV7
2021年12月13日
my1999 LV2
2021年11月27日
tangjj7260 LV18
2021年11月20日
pipichao LV6
2021年6月20日
ldx1234 LV4
2021年5月17日

dushine LV3
4月14日
微信网友_7289626841501696 LV3
2024年12月17日
interface LV22
2024年8月10日
wppppp LV3
2024年6月4日
bangyiyang LV2
2023年12月21日
wsgwly LV6
2023年9月11日
1441854423 LV2
2023年6月30日
1614076596 LV1
2023年5月22日
flygrass LV12
2023年4月24日
wzy5432 LV1
2023年4月18日