首页>代码>java swing开发GUI射击小游戏一枚>/NewGame/src/com/leng/frame/GameStartFrame.java
/**
 * 
 */
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日
最近浏览更多
bangyiyang  LV2 2023年12月21日
wsgwly  LV5 2023年9月11日
1441854423  LV2 2023年6月30日
1614076596  LV1 2023年5月22日
flygrass  LV12 2023年4月24日
wzy5432  LV1 2023年4月18日
huangzy  LV12 2023年4月6日
xingxing1234  LV10 2023年3月22日
微信网友_5992582549164032  LV6 2023年2月16日
总有人间一两风  LV8 2022年12月12日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友