用Java实现三国战纪小游戏

目录:

游戏效果展示:

游戏介绍:

主角:

键盘事件:

人物介绍:

关卡和敌人:

道具(食物):

图片效果展示:

思维导图:

 一、GameFrame 主窗口类

1.变量:

2.初始化:

3.重置(用于重新开始游戏):

4.创建敌人:

5.绘制图片:

6.键盘控制(键盘控制的具体代码在Role类中):

7.主入口:

 二、GameUtils 工具类

1.背景,道具图片:

2.人物头像,死亡图片:

3.主角的动作图片:

4.敌人的动作图片:

5.初始化图片集合:

 三、GameObj 物品道具类

 四、People 人物类

1.变量和构造方法:

2.人物的移动,攻击,技能方法:

3.在死循环里判断人物的动作:

4.人物的各种动作的冷却:

5.碰撞

6.一些set,get方法:

 五、Role 主角类

1.构造方法:

2.主角被攻击:

3.主角吃食物:

4.键盘控制:

 六、Enemy 敌人类

1.构造方法:

2.移动和攻击

3.敌人的行为:

4.敌人被攻击到了

5.判断敌人与主角是否相遇


之前想写一个打斗之类的游戏,但是发现网上相关资料很少,有是有,但是要收费,所以只能自己慢慢琢磨了,刚开始的时候啥也不会,所以先从贪吃蛇慢慢做起,了解了一下做游戏的框架,再跟着视频写了飞机大战,黄金矿工等小游戏,也稍微看了一点超级玛丽,坦克大战,我写的这个游戏主角移动就是参考了超级玛丽的移动。虽然和原版比有很大差距,但咱也没那么大要求嘛。

新手可放心食用......

游戏效果展示:

游戏介绍:

主角:

包含四个主角(关羽,张飞,赵云,魏延),每个主角攻击力,血量,技能,移动速度,被动都不相同。

键盘事件:

A:向左移动

D:向右移动

S:防御,减少敌人三分之二的攻击,但不能移动

W:跳跃,冷却1秒

J:拳击,可以在移动,跳跃时使用,无冷却

K:飞踢,必须在点击跳跃的时候,点击K键方可使用,冷却0.5秒

L:连击,移动和跳跃会打断连击,冷却0.5秒

I:技能,一直按压I键,来释放完整的技能,冷却3秒

O:冲锋,向前突进一段距离,并对敌人造成伤害,冷却0.5秒

游戏开始时,点击空格暂停游戏;死亡或胜利后,点击空格重新开始游戏。

主角介绍:

1.关羽:

血量:4000,攻击:100,速度:5

被动:过五关斩六将:随着击杀敌人的数量增加,攻击力不断增加,每击杀一个敌人,增加2点攻击力

2.张飞:

血量:3400,攻击:80,速度:5

被动:愈战愈勇: 随着生命的降低,攻击力不断增加,每损失100生命值,增加1点的攻击力

3.赵云:

血量:2800,攻击:120,速度:6

被动:单枪匹马:在场的敌人数量越多,攻击力越高,场上每多1个敌人,攻击力增加5;冷静的头脑:喝酒不会增加赵云的攻击力

4.魏延:

血量:5000,攻击:50,速度:3

被动:以战养战:击杀敌人后,恢复所杀敌人血量的百分之十的血量

关卡和敌人:

含有三个关卡,五种小怪(蛮兵,枪兵,重刀兵,刺客,重锤兵),三个Boss,

道具(食物):

包含四种食物

包子:恢复100血量;鸡肉:恢复200血量;猪肉:恢复300血量;酒:永久增加10攻击力

图片效果展示:

 

 游戏主角介绍:

游戏打斗场面: 

 

结束效果:

视频介绍:

用Java实现三国志格斗类游戏_三国志_演示

思维导图:

 

 一、GameFrame 主窗口类

1.变量:

	int width = 1000, height = 416;
	//双缓存
	private Image offScreenImg = null;
	//head 为了随机选择gameState = 0 时的背景图片
	int head;
	//bgWald为了实现背景的移动
	public static int bgWalk = 0;
	//游戏状态 0未开始,1选择人物,2开始游戏,3暂停,4失败,5胜利,
	//6按键介绍,7关羽的被动介绍,8张飞,9赵云,10魏延,11,敌人的介绍,12开始游戏的进度条
	public static int gameState;
	
	//建立角色对象
	public static Role role = null;
	public static Role role1 = null;//关羽
	public static Role role2 = null;//张飞
	public static Role role3 = null;//赵云
	public static Role role4 = null;//魏延

	//小怪的最大数量(每一关小怪的最大数量是不同的)
	int soldierCount;
	//小怪出现的速度(每一关小怪的生成速度都是不同的)
	int appearEnemySpeed;
	
	//击杀小怪的数量,用于关羽的被动和魏延的被动2
	public static int killEnemyCount;
	//主角被攻击前的血量,用于张飞的被动
	public static float isCutAgoHp;
	//敌人在场上的数量,用于赵云的被动
	public static int nowEnemyCount;

	
	//Boss
	Enemy boss1 = null;
	Enemy boss2 = null;
	Enemy boss3 = null;
	//临时敌人对象,用来实现状态12
	Enemy temporaryEnemy;
	//关卡集合
	public static List<Image> allBgImg = new ArrayList<>();
	//用来表示目前到达了那一关
	int nowBgNum = 0;
	

 

2.初始化:

    public void launch() {
		this.setFocusable(true);
		setTitle("Lizhuang");
		setSize(width,height);
		setResizable(false);//大小不可变
		setLocationRelativeTo(null);//居中
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭退出程序
		setVisible(true);
		
		//实现键盘监听,控制主角移动
		this.addKeyListener(new GameFame.KeyMonitor());	
		//往关卡列表中添加背景,共三个关卡
		allBgImg.add(GameUtils.bg1Img);
		allBgImg.add(GameUtils.bg2Img);
		allBgImg.add(GameUtils.bg3Img);
		//初始化关羽对象
		role1 = new Role(100,270,64,79,GameUtils.hp1,GameUtils.atk1,GameUtils.walkSpeed1,
				GameUtils.stand_LImg1,GameUtils.stand_RImg1,GameUtils.defend_LImg1,GameUtils.defend_RImg1,
				GameUtils.run_LListImg1,GameUtils.run_RListImg1,8,GameUtils.quickGo_LListImg1,GameUtils.quickGo_RListImg1,3,
				GameUtils.jump_LListImg1,GameUtils.jump_RListImg1,21,GameUtils.cut_LListImg1,GameUtils.cut_RListImg1,3,
				GameUtils.flyKick_LListImg1,GameUtils.flyKick_RListImg1,5,GameUtils.longAttack_LListImg1,GameUtils.longAttack_RListImg1,9,
				GameUtils.skill_LListImg1,GameUtils.skill_RListImg1,11);
		//初始化张飞对象
		role2 = new Role(100,270,72,77,GameUtils.hp2,GameUtils.atk2,GameUtils.walkSpeed2,
				GameUtils.stand_LImg2,GameUtils.stand_RImg2,GameUtils.defend_LImg2,GameUtils.defend_RImg2,
				GameUtils.run_LListImg2,GameUtils.run_RListImg2,8,GameUtils.quickGo_LListImg2,GameUtils.quickGo_RListImg2,3,
				GameUtils.jump_LListImg2,GameUtils.jump_RListImg2,21,GameUtils.cut_LListImg2,GameUtils.cut_RListImg2,3,
				GameUtils.flyKick_LListImg2,GameUtils.flyKick_RListImg2,6,GameUtils.longAttack_LListImg2,GameUtils.longAttack_RListImg2,7,
				GameUtils.skill_LListImg2,GameUtils.skill_RListImg2,11);
		//初始化赵云对象
		role3 = new Role(100,270,56,76,GameUtils.hp3,GameUtils.atk3,GameUtils.walkSpeed3,
				GameUtils.stand_LImg3,GameUtils.stand_RImg3,GameUtils.defend_LImg3,GameUtils.defend_RImg3,
				GameUtils.run_LListImg3,GameUtils.run_RListImg3,8,GameUtils.quickGo_LListImg3,GameUtils.quickGo_RListImg3,5,
				GameUtils.jump_LListImg3,GameUtils.jump_RListImg3,21,GameUtils.cut_LListImg3,GameUtils.cut_RListImg3,6,
				GameUtils.flyKick_LListImg3,GameUtils.flyKick_RListImg3,3,GameUtils.longAttack_LListImg3,GameUtils.longAttack_RListImg3,7,
				GameUtils.skill_LListImg3,GameUtils.skill_RListImg3,7);
		//初始化魏延对象
		role4 = new Role(100,270,62,76,GameUtils.hp4,GameUtils.atk4,GameUtils.walkSpeed4,
				GameUtils.stand_LImg4,GameUtils.stand_RImg4,GameUtils.defend_LImg4,GameUtils.defend_RImg4,
				GameUtils.run_LListImg4,GameUtils.run_RListImg4,8,GameUtils.quickGo_LListImg4,GameUtils.quickGo_RListImg4,3,
				GameUtils.jump_LListImg4,GameUtils.jump_RListImg4,21,GameUtils.cut_LListImg4,GameUtils.cut_RListImg4,5,
				GameUtils.flyKick_LListImg4,GameUtils.flyKick_RListImg4,6,GameUtils.longAttack_LListImg4,GameUtils.longAttack_RListImg4,9,
				GameUtils.skill_LListImg4,GameUtils.skill_RListImg4,10);
		
		//初始化临时敌人对象
		temporaryEnemy = new Enemy(0,270,68,79,GameUtils.hpEnemy2,GameUtils.atkEnemy2,10,
				GameUtils.stand_LEnemyImg2,GameUtils.stand_REnemyImg2,GameUtils.run_LEnemyListImg2,GameUtils.run_REnemyListImg2,5,
				GameUtils.quickGo_LEnemyListImg2,GameUtils.quickGo_REnemyListImg2,3,
				GameUtils.cut_LEnemyListImg2,GameUtils.cut_REnemyListImg2,4,
				GameUtils.skill_LEnemyListImg2,GameUtils.skill_REnemyListImg2,4);
		//初始化图片
		GameUtils.init();
		//初始化gameState = 0 时的背景图(随机选择图片)
		head = (int)(Math.random()*3+1);
		
		
		//鼠标点击监听,在游戏状态为1的时候,选择角色
		addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				Point p = new Point(e.getX(),e.getY());
				//鼠标点击来开始游戏或者看按键帮助
				if (gameState == 0) {
					if (p.x>330 && p.x<554 && p.y>300 && p.y<354) gameState = 1;
					if (p.x>880 && p.x<980 && p.y>50 && p.y<89) gameState = 6;
				}
				//鼠标点击来选择人物
				if (gameState == 1){
					if (p.x>150 && p.x<216 && p.y>50 && p.y<150) {
						gameState = 7;//改变游戏状态
						role = role1;//设置主角
					}else if (p.x>350 && p.x<416 && p.y>50 && p.y<150){
						gameState = 8;
						role = role2;
					}else if (p.x>550 && p.x<616 && p.y>50 && p.y<150){
						gameState = 9;
						role = role3;
					}else if (p.x>750 && p.x<816 && p.y>50 && p.y<150){
						gameState = 10;
						role = role4;
					}else if (p.x>20 && p.x<141 && p.y>40 && p.y<77) {
						gameState = 0;//返回按钮
					}			
				}
				if (gameState == 6) {
					if (p.x>20 && p.x<141 && p.y>40 && p.y<77) gameState = 0;//返回按钮
					if (p.x>920 && p.x<983 && p.y>320 && p.y<383) gameState = 11;//进入状态11:敌人的介绍
				}
				if (gameState == 7 || gameState == 8 || gameState == 9 || gameState == 10) {
					if (p.x>20 && p.x<141 && p.y>40 && p.y<77) gameState = 1;//返回按钮
					if (p.x>400 && p.x<522 && p.y>300 && p.y<338) gameState = 12;//开始按钮,进入状态12:开始游戏的进度条
				}
				if (gameState == 11) {
					if (p.x>20 && p.x<141 && p.y>40 && p.y<77) gameState = 6;//返回按钮
				}
			}
		});
		
		
		//重复绘制
		while(true) {
			if (gameState == 2) creatObj();//创建敌人
			repaint();
			try {
				Thread.sleep(100);
			} catch (Exception e) {}
		}
	}
	

3.重置(用于重新开始游戏):

    public void init() {
		bgWalk = 0;
		nowBgNum = 0;
		GameUtils.gameObjListImg.clear();//删除列表中的所有元素
		GameUtils.enemyListImg.clear();
		GameUtils.bossListImg.clear();
		soldierCount = 0;//小怪数量清零
		boss1 = null;
		boss2 = null;
		boss3 = null;
		if (role == role1) role.hp = GameUtils.hp1;//恢复主角的血量
		if (role == role2) role.hp = GameUtils.hp2;
		if (role == role3) role.hp = GameUtils.hp3;
		if (role == role4) role.hp = GameUtils.hp4;
	}

4.创建敌人:

    public void creatObj() {
			int n = (int)(Math.random()*3);//一次性随机数
			int site = 0;//小怪出现的位置,小怪的随机出现位置只有在左边和右边
			if (n == 0) site = 0;
			if (n == 1 || n == 2) site = 900;//小怪大约有三分之二的概率从右边出现
			//小怪随机添加
			int n2 = (int)(Math.random()*10);
			//如果是第1关,只有蛮兵,枪兵,小怪的生成速度是每100帧
			if (nowBgNum == 0 && appearEnemySpeed >= 100 && soldierCount < 8) {
				appearEnemySpeed = 0;
				if (n2 <= 5) {//有一半的概率生成蛮兵
					//将小怪1添加到enemyListImg中
					GameUtils.enemyListImg.add(new Enemy(site,270,56,93,GameUtils.hpEnemy1,GameUtils.atkEnemy1,GameUtils.walkSpeedEnemy1,
							GameUtils.stand_LEnemyImg1,GameUtils.stand_REnemyImg1,GameUtils.run_LEnemyListImg1,GameUtils.run_REnemyListImg1,6,
							GameUtils.quickGo_LEnemyListImg1,GameUtils.quickGo_REnemyListImg1,6,
							GameUtils.cut_LEnemyListImg1,GameUtils.cut_REnemyListImg1,5,
							GameUtils.skill_LEnemyListImg1,GameUtils.skill_REnemyListImg1,4));
				}else {//将小怪2添加到enemyListImg中
					GameUtils.enemyListImg.add(new Enemy(site,270,68,79,GameUtils.hpEnemy2,GameUtils.atkEnemy2,GameUtils.walkSpeedEnemy2,
							GameUtils.stand_LEnemyImg2,GameUtils.stand_REnemyImg2,GameUtils.run_LEnemyListImg2,GameUtils.run_REnemyListImg2,5,
							GameUtils.quickGo_LEnemyListImg2,GameUtils.quickGo_REnemyListImg2,3,
							GameUtils.cut_LEnemyListImg2,GameUtils.cut_REnemyListImg2,4,
							GameUtils.skill_LEnemyListImg2,GameUtils.skill_REnemyListImg2,4));	
				}
				soldierCount++;
				nowEnemyCount+=5;
			}
			//如果是第2关,只有重刀兵,刺客
			if (nowBgNum == 1 && appearEnemySpeed >= 60 && soldierCount < 15) {
				appearEnemySpeed = 0;
				if (n2 <= 5) {
					GameUtils.enemyListImg.add(new Enemy(site,270,80,64,GameUtils.hpEnemy3,GameUtils.atkEnemy3,GameUtils.walkSpeedEnemy3,
							GameUtils.stand_LEnemyImg3,GameUtils.stand_REnemyImg3,GameUtils.run_LEnemyListImg3,GameUtils.run_REnemyListImg3,2,
							GameUtils.quickGo_LEnemyListImg3,GameUtils.quickGo_REnemyListImg3,3,
							GameUtils.cut_LEnemyListImg3,GameUtils.cut_REnemyListImg3,3,
							GameUtils.skill_LEnemyListImg3,GameUtils.skill_REnemyListImg3,3));	
				}else {
					GameUtils.enemyListImg.add(new Enemy(site,270,48,80,GameUtils.hpEnemy4,GameUtils.atkEnemy4,GameUtils.walkSpeedEnemy4,
							GameUtils.stand_LEnemyImg4,GameUtils.stand_REnemyImg4,GameUtils.run_LEnemyListImg4,GameUtils.run_REnemyListImg4,5,
							GameUtils.quickGo_LEnemyListImg4,GameUtils.quickGo_REnemyListImg4,3,
							GameUtils.cut_LEnemyListImg4,GameUtils.cut_REnemyListImg4,3,
							GameUtils.skill_LEnemyListImg4,GameUtils.skill_REnemyListImg4,4));		
				}
				soldierCount++;
				nowEnemyCount+=5;
			}
			//如果是第3关,5个兵种都有几率出现,但主要是重锤兵
			if (nowBgNum == 2 && appearEnemySpeed >= 80 && soldierCount < 20) {
				appearEnemySpeed = 0;
				switch (n2) {
					case 0:
						GameUtils.enemyListImg.add(new Enemy(site,270,56,93,GameUtils.hpEnemy1,GameUtils.atkEnemy1,GameUtils.walkSpeedEnemy1,
								GameUtils.stand_LEnemyImg1,GameUtils.stand_REnemyImg1,GameUtils.run_LEnemyListImg1,GameUtils.run_REnemyListImg1,6,
								GameUtils.quickGo_LEnemyListImg1,GameUtils.quickGo_REnemyListImg1,3,
								GameUtils.cut_LEnemyListImg1,GameUtils.cut_REnemyListImg1,5,
								GameUtils.skill_LEnemyListImg1,GameUtils.skill_REnemyListImg1,4));
						break;
					case 1,2:
						GameUtils.enemyListImg.add(new Enemy(site,270,68,79,GameUtils.hpEnemy2,GameUtils.atkEnemy2,GameUtils.walkSpeedEnemy2,
								GameUtils.stand_LEnemyImg2,GameUtils.stand_REnemyImg2,GameUtils.run_LEnemyListImg2,GameUtils.run_REnemyListImg2,5,
								GameUtils.quickGo_LEnemyListImg2,GameUtils.quickGo_REnemyListImg2,3,
								GameUtils.cut_LEnemyListImg2,GameUtils.cut_REnemyListImg2,4,
								GameUtils.skill_LEnemyListImg2,GameUtils.skill_REnemyListImg2,4));	
						break;
					case 3,4:
						GameUtils.enemyListImg.add(new Enemy(site,270,80,64,GameUtils.hpEnemy3,GameUtils.atkEnemy3,GameUtils.walkSpeedEnemy3,
								GameUtils.stand_LEnemyImg3,GameUtils.stand_REnemyImg3,GameUtils.run_LEnemyListImg3,GameUtils.run_REnemyListImg3,2,
								GameUtils.quickGo_LEnemyListImg3,GameUtils.quickGo_REnemyListImg3,3,
								GameUtils.cut_LEnemyListImg3,GameUtils.cut_REnemyListImg3,3,
								GameUtils.skill_LEnemyListImg3,GameUtils.skill_REnemyListImg3,3));	
						break;
					case 5,6:
						GameUtils.enemyListImg.add(new Enemy(site,270,48,80,GameUtils.hpEnemy4,GameUtils.atkEnemy4,GameUtils.walkSpeedEnemy4,
								GameUtils.stand_LEnemyImg4,GameUtils.stand_REnemyImg4,GameUtils.run_LEnemyListImg4,GameUtils.run_REnemyListImg4,5,
								GameUtils.quickGo_LEnemyListImg4,GameUtils.quickGo_REnemyListImg4,3,
								GameUtils.cut_LEnemyListImg4,GameUtils.cut_REnemyListImg4,3,
								GameUtils.skill_LEnemyListImg4,GameUtils.skill_REnemyListImg4,4));		
						break;
					case 7,8,9:
						GameUtils.enemyListImg.add(new Enemy(site,270,80,80,GameUtils.hpEnemy5,GameUtils.atkEnemy5,GameUtils.walkSpeedEnemy5,
								GameUtils.stand_LEnemyImg5,GameUtils.stand_REnemyImg5,GameUtils.run_LEnemyListImg5,GameUtils.run_REnemyListImg5,4,
								GameUtils.quickGo_LEnemyListImg5,GameUtils.quickGo_REnemyListImg5,3,
								GameUtils.cut_LEnemyListImg5,GameUtils.cut_REnemyListImg5,3,
								GameUtils.skill_LEnemyListImg5,GameUtils.skill_REnemyListImg5,4));	
						break;
				}
				soldierCount++;
				nowEnemyCount+=5;
			}
			
		//如果没有Boss,而且背景移动到头了,添加Boss1
		if (boss1 == null && bgWalk <= -3500 && nowBgNum == 0) {
			boss1 = new Enemy(900,200,96,112,GameUtils.hpBoss1,GameUtils.atkBoss1,GameUtils.walkSpeedBoss1,
					GameUtils.stand_LBossImg1,GameUtils.stand_RBossImg1,GameUtils.run_LBossListImg1,GameUtils.run_RBossListImg1,5,
					GameUtils.quickGo_LBossListImg1,GameUtils.quickGo_RBossListImg1,3,
					GameUtils.cut_LBossListImg1,GameUtils.cut_RBossListImg1,5,
					GameUtils.skill_LBossListImg1,GameUtils.skill_RBossListImg1,5);
			GameUtils.bossListImg.add(boss1);//将Boss添加到bossListImg中
			nowEnemyCount+=5;
		}
		//在第2关创建Boss2
		if (boss2 == null && bgWalk <= -3500 && nowBgNum == 1) {
			boss2 = new Enemy(900,200,160,96,GameUtils.hpBoss2,GameUtils.atkBoss2,GameUtils.walkSpeedBoss2,
					GameUtils.stand_LBossImg2,GameUtils.stand_RBossImg2,GameUtils.run_LBossListImg2,GameUtils.run_RBossListImg2,4,
					GameUtils.quickGo_LBossListImg2,GameUtils.quickGo_RBossListImg2,3,
					GameUtils.cut_LBossListImg2,GameUtils.cut_RBossListImg2,4,
					GameUtils.skill_LBossListImg2,GameUtils.skill_RBossListImg2,2);
			GameUtils.bossListImg.add(boss2);
			nowEnemyCount+=5;
		}
		//在第3关创建Boss3
		if (boss3 == null && bgWalk <= -3500 && nowBgNum == 2) {
			boss3 = new Enemy(900,200,112,128,GameUtils.hpBoss3,GameUtils.atkBoss3,GameUtils.walkSpeedBoss3,
					GameUtils.stand_LBossImg3,GameUtils.stand_RBossImg3,GameUtils.run_LBossListImg3,GameUtils.run_RBossListImg3,4,
					GameUtils.quickGo_LBossListImg3,GameUtils.quickGo_RBossListImg3,3,
					GameUtils.cut_LBossListImg3,GameUtils.cut_RBossListImg3,5,
					GameUtils.skill_LBossListImg3,GameUtils.skill_RBossListImg3,5);
			GameUtils.bossListImg.add(boss3);
			nowEnemyCount+=5;
		}
	}
	

5.绘制图片:

    @Override
	public void paint(Graphics g) {
		if (offScreenImg == null) offScreenImg = createImage(width,height);
		Graphics gImage = offScreenImg.getGraphics();
		gImage.fillRect(0, 0, width, height);
		//0未开始
		if (gameState == 0) {
			//随机设置背景
			if (head == 1) gImage.drawImage(GameUtils.title1Img,0,0,null);
			if (head == 2) gImage.drawImage(GameUtils.title2Img,0,0,null);
			if (head == 3) gImage.drawImage(GameUtils.title3Img,0,0,null);
			gImage.drawImage(GameUtils.begin1Img,330,300,null);//开始游戏
			gImage.drawImage(GameUtils.helpImg,880,50,null);//游戏帮助
		}
		//1选择人物
		if (gameState == 1) {
			gImage.drawImage(GameUtils.title4Img,0,0,null);
			gImage.drawImage(GameUtils.returnImg,20,40,null);//返回的按钮
			gImage.drawImage(GameUtils.header1Img,150,50,null);
			gImage.drawImage(GameUtils.header2Img,350,50,null);
			gImage.drawImage(GameUtils.header3Img,550,50,null);
			gImage.drawImage(GameUtils.header4Img,750,50,null);
		}
		//2开始游戏
		if (gameState == 2) {
			//Music.startPlay();
			//实现背景的移动
			if (role.getStatus().indexOf("right") != -1) {
				//bgWalk是为了实现背景的移动,人物向右走的时候,背景也跟着动;人物向左走的时候,背景不会动
				bgWalk += -(role.getXSpeed()*2.5);
				if (bgWalk < -4120) bgWalk = -4120;// //防止bgWalk超出范围
			}
			//绘制背景
			gImage.drawImage(allBgImg.get(nowBgNum),bgWalk,0,null);
			//绘制人物
			gImage.drawImage(role.getShow(), role.getX(),role.getY(),null);
			gImage.drawImage(GameUtils.bloodImg,15,35,null);//绘制血条,血条长200
			gImage.setColor(Color.red);
			if (role == role1) {
				gImage.fillRect(30,47,(int)role.getHp()/(int)(GameUtils.hp1/200),8);
				//关羽被动,随着击杀敌人的数量增加,攻击力不断增加
				role.atk += killEnemyCount*2;
				killEnemyCount = 0;//清零,防止重复加
			}
			if (role == role2) {
				gImage.fillRect(30,47,(int)role.getHp()/(int)(GameUtils.hp2/200),8);
				//张飞的被动在Role中
			}
			if (role == role3) {
				gImage.fillRect(30,47,(int)role.getHp()/(int)(GameUtils.hp3/200),8);
				//赵云被动,在场的敌人数量越多,攻击力越高
				role.atk = GameUtils.atk3 + nowEnemyCount;			
			}
			if (role == role4) {
				gImage.fillRect(30,47,(int)role.getHp()/(int)(GameUtils.hp4/200),8);
				//魏延被动,击杀敌人后,恢复所杀敌人血量的百分之五的血量,被动在Enemy
			}
			gImage.drawImage(GameUtils.atkImg,25,70,null);//绘制主角的攻击力
			gImage.setColor(Color.yellow);
			gImage.fillRect(25,71,(int)role.getAtk(),7);
			role.isWound();//是否受伤
			role.eatFood();//吃食物
			
			//遍历小怪列表
			for (int i = 0;i<GameUtils.enemyListImg.size();i++) {
				//绘制敌人
				gImage.drawImage(GameUtils.enemyListImg.get(i).getShow(),GameUtils.enemyListImg.get(i).getX(),GameUtils.enemyListImg.get(i).getY(),null);
				GameUtils.enemyListImg.get(i).action();//让敌人开始一系列动作
				//绘制血条的白色背景
				gImage.setColor(Color.white);
				gImage.fillRect(GameUtils.enemyListImg.get(i).getX()-10,GameUtils.enemyListImg.get(i).getY()-10,100,5);//填充的矩形长度是100
				//绘制血条
				gImage.setColor(Color.red);
				gImage.fillRect(GameUtils.enemyListImg.get(i).getX()-10,GameUtils.enemyListImg.get(i).getY()-10,
						(int)GameUtils.enemyListImg.get(i).getHp()/(int)(GameUtils.hpEnemy1/100),5);
			}
			//遍历Boss列表
			for (int i = 0;i<GameUtils.bossListImg.size();i++) {
				gImage.drawImage(GameUtils.bossListImg.get(i).getShow(),GameUtils.bossListImg.get(i).getX(),GameUtils.bossListImg.get(i).getY(),null);
				GameUtils.bossListImg.get(i).action();//让Boss开始一系列动作
				//绘制血条的白色背景
				gImage.setColor(Color.white);
				gImage.fillRect(GameUtils.bossListImg.get(i).getX()-10,GameUtils.bossListImg.get(i).getY()-10,100,5);//填充的矩形长度是100
				//绘制血条
				gImage.setColor(Color.red);
				gImage.fillRect(GameUtils.bossListImg.get(i).getX()-10,GameUtils.bossListImg.get(i).getY()-10,
						(int)GameUtils.bossListImg.get(i).getHp()/(int)(GameUtils.hpBoss1/100),5);
			}
			//绘制食物(主角吃食物的代码在Role中)
			for (int i = 0;i<GameUtils.gameObjListImg.size();i++) {
				gImage.drawImage(GameUtils.gameObjListImg.get(i).getImg(),GameUtils.gameObjListImg.get(i).getX(),GameUtils.gameObjListImg.get(i).getY(),null);
			}
			//删除已经吃过的食物
			GameUtils.gameObjListImg.removeAll(GameUtils.removeObjListImg);
			//删除已经死亡的敌人
			GameUtils.enemyListImg.removeAll(GameUtils.removeEnemyListImg);//在gameListImg中删除死掉的小怪
			GameUtils.bossListImg.removeAll(GameUtils.removeEnemyListImg);//在bossListImg中删除死掉的Boss
			//判断游戏胜利的条件
			if (GameUtils.enemyListImg.size() == 0 && GameUtils.bossListImg.size() == 0 && bgWalk <= -4100 && role.getX() >= 950) {
				if (nowBgNum == 2) gameState = 5;//全部关卡都已经通过,胜利了
				nowBgNum ++;
				bgWalk = 0;//将背景的移动清零
				soldierCount = 0;//将小怪的数量清零
				role.setX(50);//改正主角的位置
				role.setY(270);
			}
		}
		//3暂停
		if (gameState == 3) {
			gImage.drawImage(GameUtils.title5Img,0,0,null);
			gImage.setColor(Color.red);
			gImage.setFont(new Font("仿宋",Font.BOLD+ Font.ITALIC,40));
			gImage.drawString("大人,战事紧急,还请速速回去", 200,350);
		}
		//4失败
		if (gameState == 4) {
			//绘制角色死后的图片
			gImage.drawImage(GameUtils.failImg, 380,100,null);
			if (role == role1) gImage.drawImage(GameUtils.did1Img,430,200,null);
			if (role == role2) gImage.drawImage(GameUtils.did2Img,430,200,null);
			if (role == role3) gImage.drawImage(GameUtils.did3Img,430,200,null);
			if (role == role4) gImage.drawImage(GameUtils.did4Img,430,200,null);
		}
		//5胜利
		if (gameState == 5) {
			gImage.drawImage(GameUtils.title9Img,0,0,null);
			gImage.setColor(Color.red);
			gImage.setFont(new Font("仿宋",Font.BOLD+ Font.ITALIC,40));
			gImage.drawString("胜利", 450,100);
		}
		//6按键介绍
		if (gameState == 6) {
			gImage.setColor(Color.red);
			gImage.setFont(new Font("仿宋",Font.BOLD+ Font.ITALIC,30));
			gImage.drawString("按键介绍", 380,80);
			gImage.setFont(new Font("仿宋",Font.BOLD+ Font.ITALIC,20));
			gImage.drawString("A:向左移动", 100,120);
			gImage.drawString("D:向右移动", 100,140);
			gImage.drawString("S:防御,减少敌人三分之二的攻击,但不能移动", 100,160);
			gImage.drawString("W:跳跃,冷却1秒", 100,180);
			gImage.drawString("J:拳击,可以在移动,跳跃时使用,无冷却", 100,200);
			gImage.drawString("K:飞踢,必须在点击跳跃的时候,点击K键方可使用,冷却0.5秒", 100,220);
			gImage.drawString("L:连击,又名王八拳,移动和跳跃会打断连击,冷却0.5秒", 100,240);
			gImage.drawString("I:技能,一直按压I键,来释放完整的技能,冷却3秒", 100,260);
			gImage.drawString("O:冲锋,向前突进一段距离,并对敌人造成伤害,冷却0.5秒", 100,280);
			gImage.drawString("游戏开始时,点击空格暂停游戏",100,320);
			gImage.drawString("死亡或胜利后,点击空格重新开始游戏",100,340);

			gImage.drawImage(GameUtils.returnImg,20,40,null);//返回的按钮
			gImage.drawImage(GameUtils.introduceEnemyImg,920,320,null);//下一个介绍的按钮
		}
		//7,8,9,10,四个主角的被动介绍
		if (gameState == 7 || gameState == 8 || gameState == 9 || gameState == 10){
			gImage.drawImage(GameUtils.title7Img,0,0,null);
			gImage.setColor(Color.red);
			gImage.setFont(new Font("仿宋",Font.BOLD+ Font.ITALIC,20));
			gImage.drawImage(GameUtils.begin2Img,400,300,null);//开始的按钮
			gImage.drawImage(GameUtils.returnImg,20,40,null);//返回的按钮
			//7关羽的被动介绍
			if (gameState == 7) {
				gImage.drawImage(GameUtils.header1Img,440,50,null);
				gImage.drawString("关羽",450,180);
				gImage.drawString("血量:4000,攻击:100,速度:5",310,240);
				gImage.drawString("被动:过五关斩六将:随着击杀敌人的数量增加,攻击力不断增加,每击杀一个敌人,增加2点攻击力", 60,280);
			}
			//8张飞的被动介绍
			if (gameState == 8) {
				gImage.drawImage(GameUtils.header2Img,440,50,null);
				gImage.drawString("张飞",450,180);
				gImage.drawString("血量:3400,攻击:80,速度:5",310,240);
				gImage.drawString("被动:愈战愈勇: 随着生命的降低,攻击力不断增加,每损失100生命值,增加1点的攻击力", 100,280);
			}
			//9赵云的被动介绍
			if (gameState == 9) {
				gImage.drawImage(GameUtils.header3Img,440,50,null);
				gImage.drawString("赵云",450,180);
				gImage.drawString("血量:2800,攻击:120,速度:6",310,240);
				gImage.drawString("被动:单枪匹马:在场的敌人数量越多,攻击力越高,场上每多1个敌人,攻击力增加5", 100,280);
				gImage.drawString("冷静的头脑:喝酒不会增加赵云的攻击力",290,300);
			}
			//10魏延的被动介绍
			if (gameState == 10) {
				gImage.drawImage(GameUtils.header4Img,440,50,null);
				gImage.drawString("魏延",450,180);
				gImage.drawString("血量:5000,攻击:50,速度:3",310,240);
				gImage.drawString("被动:以战养战:击杀敌人后,恢复所杀敌人血量的百分之十的血量", 160,280);
			}
		}
		//11敌人的介绍
		if (gameState == 11) {
			gImage.drawImage(GameUtils.title6Img,0,0,null);
			gImage.drawImage(GameUtils.returnImg,20,40,null);//返回的按钮
			gImage.setColor(Color.red);
			gImage.setFont(new Font("仿宋",Font.ITALIC,10));
			gImage.drawImage(GameUtils.stand_REnemyImg1,40,100,null);//小怪1
			gImage.drawString("蛮兵,血量:1000,攻击:2",10,220);
			gImage.drawImage(GameUtils.stand_REnemyImg2,190,100,null);//小怪2
			gImage.drawString("枪兵,血量:1000,攻击:3",160,220);
			gImage.drawImage(GameUtils.stand_REnemyImg3,360,120,null);//小怪3
			gImage.drawString("重刀兵,血量:1000,攻击:5",320,220);
			gImage.drawImage(GameUtils.stand_REnemyImg4,520,110,null);//小怪4
			gImage.drawString("刺客,血量:1000,攻击:6",480,220);
			gImage.drawImage(GameUtils.stand_REnemyImg5,670,110,null);//小怪5
			gImage.drawString("重锤兵,血量:1000,攻击:8",630,220);
			gImage.drawImage(GameUtils.stand_RBossImg1,30,260,null);//Boss1
			gImage.drawString("Boss1,血量:4000,攻击:6",10,390);
			gImage.drawImage(GameUtils.stand_RBossImg2,150,260,null);//Boss2
			gImage.drawString("Boss2,血量:4000,攻击:9",170,390);
			gImage.drawImage(GameUtils.stand_RBossImg3,330,250,null);//Boss3
			gImage.drawString("Boss3,血量:4000,攻击:12",320,390);
			//食物的介绍
			gImage.drawImage(GameUtils.food1Img,510,340,null);//Boss3
			gImage.drawString("包子:恢复100血量",480,390);
			gImage.drawImage(GameUtils.food2Img,600,340,null);//Boss3
			gImage.drawString("鸡肉:恢复200血量",580,390);
			gImage.drawImage(GameUtils.food3Img,690,340,null);//Boss3
			gImage.drawString("猪肉:恢复300血量",680,390);
			gImage.drawImage(GameUtils.drinkImg,790,330,null);//Boss3
			gImage.drawString("酒:增加10攻击力",780,390);
		}
		//12开始游戏的进度条
		if (gameState == 12) {
			gImage.drawImage(GameUtils.title8Img,0,0,null);
			gImage.drawImage(GameUtils.waitImg,0,350,null);
			//绘制临时的小怪走路
			gImage.drawImage(temporaryEnemy.getShow(),temporaryEnemy.getX(),temporaryEnemy.getY(),null);
			temporaryEnemy.rightMove();
			if (temporaryEnemy.getX() >= 920) gameState = 2;
			gImage.setColor(Color.red);
			gImage.setFont(new Font("仿宋",Font.ITALIC,20));
			int n = (int)(Math.random()*6);
			switch (n) {
				case 0:
					gImage.drawString("据说曹公极好人妻......",760,400);
					break;
				case 1:
					gImage.drawString("追杀曹贼中......",760,400);
					break;
				case 2:
					gImage.drawString("正在赶往战场......",760,400);
					break;
				case 3:
					gImage.drawString("曹贼!!!哪里逃......",760,400);
					break;
				case 4:
					gImage.drawString("匡扶汉室......",760,400);
					break;
				case 5:
					gImage.drawString("敌人正在赶来的路上......",760,400);
					break;
			}
		}
		
		appearEnemySpeed++;
		//绘制双缓存图片
		g.drawImage(offScreenImg,0,0,null);
	}
	

6.键盘控制(键盘控制的具体代码在Role类中):

    class KeyMonitor extends KeyAdapter{
		//按下键盘
		@Override
		public void keyPressed(KeyEvent e) {	
			//按压空格键
			if (e.getKeyCode() == KeyEvent.VK_SPACE) {
				//暂停功能
				if (gameState == 2) {
					gameState = 3;
				}else if (gameState == 3) {
					gameState = 2;
				}
				//重新开始功能
				if (gameState == 4 || gameState == 5) {
					gameState = 1;
					init();//初始化一切
					creatObj();//重新创建敌人
				}
			}
			if(gameState == 2) role.keyPressed(e);//进入了游戏,开始通过键盘按压来控制人物移动
		}
		//松开键盘
		@Override
		public void keyReleased(KeyEvent e) {
			if (gameState == 2) role.keyReleased(e);
		}
	}

7.主入口:

    public static void main(String[] args) {
		new GameFame().launch();
	}

 二、GameUtils 工具类

1.背景,道具图片:

    //背景
	public static Image bg1Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/Round6.png");
	public static Image bg2Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/Round1.png");
	public static Image bg3Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/Round2.png");
	public static Image title1Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title1.png");
	public static Image title2Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title2.png");
	public static Image title3Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title3.png");
	public static Image title4Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title4.png");
	public static Image title5Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title5.png");
	public static Image title6Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title6.png");
	public static Image title7Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title7.png");
	public static Image title8Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title8.png");
	public static Image title9Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/title9.png");
	public static Image waitImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/wait.png");
	public static Image begin1Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/begin1.png");
	public static Image begin2Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/begin2.png");
	public static Image helpImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/help.png");
	public static Image returnImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/return.png");
	public static Image failImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/fail.png");
	public static Image introduceEnemyImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/introduceEnemy.png");
	public static Image bloodImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/blood.png");
	public static Image atkImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/5.场景/show/atk.png");
	//道具
	public static Image food1Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/6.道具/food1.png");
	public static Image food2Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/6.道具/food2.png");
	public static Image food3Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/6.道具/food3.png");
	public static Image drinkImg = Toolkit.getDefaultToolkit().getImage("imgs/res改正/6.道具/drink.png");

2.人物头像,死亡图片:

    //人物头像
	public static Image header1Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/关羽头像.png");
	public static Image header2Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/张飞头像.png");
	public static Image header3Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/赵云头像.png");
	public static Image header4Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/魏延头像.png");
	//人物死亡
	public static Image did1Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/关羽死亡.png");
	public static Image did2Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/张飞死亡.png");
	public static Image did3Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/赵云死亡.png");
	public static Image did4Img = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/魏延死亡.png");
	

3.主角的动作图片:

    //关羽
	public static float hp1 = 4000;//关羽的血量
	public static float atk1 = 100;//关羽的攻击
	public static int walkSpeed1 = 5;//关羽的速度
	public static Image stand_LImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/0.png");//向左站立
	public static Image stand_RImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/0.png");//向右站立
	public static Image defend_LImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/95.png");//防御
	public static Image defend_RImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/95.png");//防御
	public static List<Image> run_LListImg1 = new ArrayList<>();//向左跑
	public static List<Image> run_RListImg1 = new ArrayList<>();//向右跑
	public static List<Image> jump_LListImg1 = new ArrayList<>();//向左跳跃
	public static List<Image> jump_RListImg1 = new ArrayList<>();//向右跳跃
	public static List<Image> cut_LListImg1 = new ArrayList<>();//向左攻击
	public static List<Image> cut_RListImg1 = new ArrayList<>();//向右攻击
	public static List<Image> flyKick_LListImg1 = new ArrayList<>();//飞踢向左攻击
	public static List<Image> flyKick_RListImg1 = new ArrayList<>();//飞踢向右攻击
	public static List<Image> longAttack_LListImg1 = new ArrayList<>();//连击,向左
	public static List<Image> longAttack_RListImg1 = new ArrayList<>();//连击,向右
	public static List<Image> skill_LListImg1 = new ArrayList<>();//技能左
	public static List<Image> skill_RListImg1 = new ArrayList<>();//技能右
	public static List<Image> quickGo_LListImg1 = new ArrayList<>();//冲锋左
	public static List<Image> quickGo_RListImg1 = new ArrayList<>();//冲锋右
	//张飞
	public static float hp2 = 3400;//张飞的血量
	public static float atk2 = 80;//张飞的攻击
	public static int walkSpeed2 = 5;//张飞的速度
	public static Image stand_LImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/0.png");//向左站立
	public static Image stand_RImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/0.png");//向右站立
	public static Image defend_LImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/115.png");//防御
	public static Image defend_RImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/115.png");//防御
	public static List<Image> run_LListImg2 = new ArrayList<>();//向左跑
	public static List<Image> run_RListImg2 = new ArrayList<>();//向右跑
	public static List<Image> jump_LListImg2 = new ArrayList<>();//向左跳跃
	public static List<Image> jump_RListImg2 = new ArrayList<>();//向右跳跃
	public static List<Image> cut_LListImg2 = new ArrayList<>();//向左攻击
	public static List<Image> cut_RListImg2 = new ArrayList<>();//向右攻击
	public static List<Image> flyKick_LListImg2 = new ArrayList<>();//飞踢向左攻击
	public static List<Image> flyKick_RListImg2 = new ArrayList<>();//飞踢向右攻击
	public static List<Image> longAttack_LListImg2 = new ArrayList<>();//连击,向左
	public static List<Image> longAttack_RListImg2 = new ArrayList<>();//连击,向右
	public static List<Image> skill_LListImg2 = new ArrayList<>();//技能左
	public static List<Image> skill_RListImg2 = new ArrayList<>();//技能右
	public static List<Image> quickGo_LListImg2 = new ArrayList<>();//冲锋左
	public static List<Image> quickGo_RListImg2 = new ArrayList<>();//冲锋右
	//赵云
	public static float hp3 = 2800;//赵云的血量
	public static float atk3 = 120;//赵云的攻击
	public static int walkSpeed3 = 6;//赵云的速度
	public static Image stand_LImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/0.png");//向左站立
	public static Image stand_RImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/0.png");//向右站立
	public static Image defend_LImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/48.png");//防御
	public static Image defend_RImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/48.png");//防御
	public static List<Image> run_LListImg3 = new ArrayList<>();//向左跑
	public static List<Image> run_RListImg3 = new ArrayList<>();//向右跑
	public static List<Image> jump_LListImg3 = new ArrayList<>();//向左跳跃
	public static List<Image> jump_RListImg3 = new ArrayList<>();//向右跳跃
	public static List<Image> cut_LListImg3 = new ArrayList<>();//向左攻击
	public static List<Image> cut_RListImg3 = new ArrayList<>();//向右攻击
	public static List<Image> flyKick_LListImg3 = new ArrayList<>();//飞踢向左攻击
	public static List<Image> flyKick_RListImg3 = new ArrayList<>();//飞踢向右攻击
	public static List<Image> longAttack_LListImg3 = new ArrayList<>();//连击,向左
	public static List<Image> longAttack_RListImg3 = new ArrayList<>();//连击,向右
	public static List<Image> skill_LListImg3 = new ArrayList<>();//技能左
	public static List<Image> skill_RListImg3 = new ArrayList<>();//技能右
	public static List<Image> quickGo_LListImg3 = new ArrayList<>();//冲锋左
	public static List<Image> quickGo_RListImg3 = new ArrayList<>();//冲锋右
	//魏延
	public static float hp4 = 5000;//魏延的血量
	public static float atk4 = 50;//魏延的攻击
	public static int walkSpeed4 = 3;//魏延的速度
	public static Image stand_LImg4 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/0.png");//向左站立
	public static Image stand_RImg4 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/0.png");//向右站立
	public static Image defend_LImg4 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/103.png");//防御
	public static Image defend_RImg4 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/103.png");//防御
	public static List<Image> run_LListImg4 = new ArrayList<>();//向左跑
	public static List<Image> run_RListImg4 = new ArrayList<>();//向右跑
	public static List<Image> jump_LListImg4 = new ArrayList<>();//向左跳跃
	public static List<Image> jump_RListImg4 = new ArrayList<>();//向右跳跃
	public static List<Image> cut_LListImg4 = new ArrayList<>();//向左攻击
	public static List<Image> cut_RListImg4 = new ArrayList<>();//向右攻击
	public static List<Image> flyKick_LListImg4 = new ArrayList<>();//飞踢向左攻击
	public static List<Image> flyKick_RListImg4 = new ArrayList<>();//飞踢向右攻击
	public static List<Image> longAttack_LListImg4 = new ArrayList<>();//连击,向左
	public static List<Image> longAttack_RListImg4 = new ArrayList<>();//连击,向右
	public static List<Image> skill_LListImg4 = new ArrayList<>();//技能左
	public static List<Image> skill_RListImg4 = new ArrayList<>();//技能右
	public static List<Image> quickGo_LListImg4 = new ArrayList<>();//冲锋左
	public static List<Image> quickGo_RListImg4 = new ArrayList<>();//冲锋右
	

4.敌人的动作图片:

    //存放小怪
	public static List<Enemy> enemyListImg = new ArrayList<>();
	//存放Boss元素
	public static List<Enemy> bossListImg = new ArrayList<>();
	//需要删除敌人元素
	public static List<Enemy> removeEnemyListImg = new ArrayList<>();
	//存放道具
	public static List<GameObj> gameObjListImg = new ArrayList<>();
	//需要删除道具元素
	public static List<GameObj> removeObjListImg = new ArrayList<>();
	
	//因为图片刷新的很快,所以要将敌人的攻击力设置的小一点,最好是三的倍数,因为主角的防御状态会降低敌方三分之二的攻击
	//小怪1
	public static float hpEnemy1 = 1000;//第一种敌人的血量
	public static float atkEnemy1 = 2;//第一种敌人的攻击
	public static int walkSpeedEnemy1 = 3;//第一种敌人的速度
	public static Image stand_LEnemyImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/0.png");//向左站立
	public static Image stand_REnemyImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/0.png");//向右站立
	public static List<Image> run_LEnemyListImg1 = new ArrayList<>();//移动
	public static List<Image> run_REnemyListImg1 = new ArrayList<>();
	public static List<Image> cut_LEnemyListImg1 = new ArrayList<>();//攻击
	public static List<Image> cut_REnemyListImg1 = new ArrayList<>();
	public static List<Image> skill_LEnemyListImg1 = new ArrayList<>();//技能
	public static List<Image> skill_REnemyListImg1 = new ArrayList<>();
	public static List<Image> quickGo_LEnemyListImg1 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_REnemyListImg1 = new ArrayList<>();
	//小怪2,由于小怪在同一个列表中,当绘制血条时,会出现问题,只能将小怪的血量设为相同的了
	public static float hpEnemy2 = 1000;//第2种敌人的血量
	public static float atkEnemy2 = 3;//第2种敌人的攻击
	public static int walkSpeedEnemy2 = 3;//第2种敌人的速度
	public static Image stand_LEnemyImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.L枪兵/0.png");//向左站立
	public static Image stand_REnemyImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.R枪兵/0.png");//向右站立
	public static List<Image> run_LEnemyListImg2 = new ArrayList<>();//向左跑
	public static List<Image> run_REnemyListImg2 = new ArrayList<>();//向右跑
	public static List<Image> cut_LEnemyListImg2 = new ArrayList<>();//向左攻击
	public static List<Image> cut_REnemyListImg2 = new ArrayList<>();//向右攻击
	public static List<Image> skill_LEnemyListImg2 = new ArrayList<>();//向左技能
	public static List<Image> skill_REnemyListImg2 = new ArrayList<>();//向右技能
	public static List<Image> quickGo_LEnemyListImg2 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_REnemyListImg2 = new ArrayList<>();
	//小怪3
	public static float hpEnemy3 = 1000;//第3种敌人的血量
	public static float atkEnemy3 = 5;//第3种敌人的攻击
	public static int walkSpeedEnemy3 = 5;//第3种敌人的速度
	public static Image stand_LEnemyImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.L重刀兵/0.png");//向左站立
	public static Image stand_REnemyImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.R重刀兵/0.png");//向右站立
	public static List<Image> run_LEnemyListImg3 = new ArrayList<>();//向左跑
	public static List<Image> run_REnemyListImg3 = new ArrayList<>();//向右跑
	public static List<Image> cut_LEnemyListImg3 = new ArrayList<>();//向左攻击
	public static List<Image> cut_REnemyListImg3 = new ArrayList<>();//向右攻击
	public static List<Image> skill_LEnemyListImg3 = new ArrayList<>();//向左技能
	public static List<Image> skill_REnemyListImg3 = new ArrayList<>();//向右技能
	public static List<Image> quickGo_LEnemyListImg3 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_REnemyListImg3 = new ArrayList<>();
	//小怪4
	public static float hpEnemy4 = 1000;//第4种敌人的血量
	public static float atkEnemy4 = 7;//第4种敌人的攻击
	public static int walkSpeedEnemy4 = 6;//第4种敌人的速度
	public static Image stand_LEnemyImg4 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.L刺客/0.png");//向左站立
	public static Image stand_REnemyImg4 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.R刺客/0.png");//向右站立
	public static List<Image> run_LEnemyListImg4 = new ArrayList<>();//向左跑
	public static List<Image> run_REnemyListImg4 = new ArrayList<>();//向右跑
	public static List<Image> cut_LEnemyListImg4 = new ArrayList<>();//向左攻击
	public static List<Image> cut_REnemyListImg4 = new ArrayList<>();//向右攻击
	public static List<Image> skill_LEnemyListImg4 = new ArrayList<>();//向左技能
	public static List<Image> skill_REnemyListImg4 = new ArrayList<>();//向右技能
	public static List<Image> quickGo_LEnemyListImg4 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_REnemyListImg4 = new ArrayList<>();
	//小怪5
	public static float hpEnemy5 = 1000;//第5种敌人的血量
	public static float atkEnemy5 = 8;//第5种敌人的攻击
	public static int walkSpeedEnemy5 = 3;//第3种敌人的速度
	public static Image stand_LEnemyImg5 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.L重锤兵/0.png");//向左站立
	public static Image stand_REnemyImg5 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.R重锤兵/0.png");//向右站立
	public static List<Image> run_LEnemyListImg5 = new ArrayList<>();//向左跑
	public static List<Image> run_REnemyListImg5 = new ArrayList<>();//向右跑
	public static List<Image> cut_LEnemyListImg5 = new ArrayList<>();//向左攻击
	public static List<Image> cut_REnemyListImg5 = new ArrayList<>();//向右攻击
	public static List<Image> skill_LEnemyListImg5 = new ArrayList<>();//向左技能
	public static List<Image> skill_REnemyListImg5 = new ArrayList<>();//向右技能
	public static List<Image> quickGo_LEnemyListImg5 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_REnemyListImg5 = new ArrayList<>();

	//Boss1
	public static float hpBoss1 = 4000;//第一种Boss的血量
	public static float atkBoss1 = 6;//第一种Boss的攻击力
	public static int walkSpeedBoss1 = 6;//第一种Boss的速度
	public static Image stand_LBossImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.LBoss/0.png");//向左站立
	public static Image stand_RBossImg1 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.RBoss/0.png");//向右站立
	public static List<Image> run_LBossListImg1 = new ArrayList<>();//向左跑
	public static List<Image> run_RBossListImg1 = new ArrayList<>();//向右跑
	public static List<Image> cut_LBossListImg1 = new ArrayList<>();//向左攻击
	public static List<Image> cut_RBossListImg1 = new ArrayList<>();//向右攻击
	public static List<Image> skill_LBossListImg1 = new ArrayList<>();//技能左
	public static List<Image> skill_RBossListImg1 = new ArrayList<>();//技能右
	public static List<Image> quickGo_LBossListImg1 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_RBossListImg1 = new ArrayList<>();
	//Boss2
	public static float hpBoss2 = 4000;//第2种Boss的血量
	public static float atkBoss2 = 9;//第2种Boss的攻击力
	public static int walkSpeedBoss2 = 6;//第2种Boss的速度
	public static Image stand_LBossImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.LBoss/0.png");//向左站立
	public static Image stand_RBossImg2 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.RBoss/0.png");//向右站立
	public static List<Image> run_LBossListImg2 = new ArrayList<>();//向左跑
	public static List<Image> run_RBossListImg2 = new ArrayList<>();//向右跑
	public static List<Image> cut_LBossListImg2 = new ArrayList<>();//向左攻击
	public static List<Image> cut_RBossListImg2 = new ArrayList<>();//向右攻击
	public static List<Image> skill_LBossListImg2 = new ArrayList<>();//技能左
	public static List<Image> skill_RBossListImg2 = new ArrayList<>();//技能右
	public static List<Image> quickGo_LBossListImg2 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_RBossListImg2 = new ArrayList<>();
	//Boss3
	public static float hpBoss3 = 4000;//第3种Boss的血量
	public static float atkBoss3 = 12;//第3种Boss的攻击力
	public static int walkSpeedBoss3 = 8;//第3种Boss的速度
	public static Image stand_LBossImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.LBoss/0.png");//向左站立
	public static Image stand_RBossImg3 = Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.RBoss/0.png");//向右站立
	public static List<Image> run_LBossListImg3 = new ArrayList<>();//向左跑
	public static List<Image> run_RBossListImg3 = new ArrayList<>();//向右跑
	public static List<Image> cut_LBossListImg3 = new ArrayList<>();//向左攻击
	public static List<Image> cut_RBossListImg3 = new ArrayList<>();//向右攻击
	public static List<Image> skill_LBossListImg3 = new ArrayList<>();//技能左
	public static List<Image> skill_RBossListImg3 = new ArrayList<>();//技能右
	public static List<Image> quickGo_LBossListImg3 = new ArrayList<>();//冲锋
	public static List<Image> quickGo_RBossListImg3 = new ArrayList<>();

5.初始化图片集合:

    public static void init() {
		//关羽,移动
		for (int i = 1;i<=8 ;i++) run_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/"+i+".png"));
		for (int i = 1;i<=8 ;i++) run_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/"+i+".png"));
		//跳跃 (4张跳跃图片刷新的太快了,点击一下跳跃键,跳跃图片循环了4次,所以想了个歪招)
		for (int i = 1;i<=3;i++) jump_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/49.png"));
		for (int i = 1;i<=5;i++) jump_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/50.png"));
		for (int i = 1;i<=8;i++) jump_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/51.png"));
		for (int i = 1;i<=5;i++) jump_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/52.png"));
		for (int i = 1;i<=3;i++) jump_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/49.png"));
		for (int i = 1;i<=5;i++) jump_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/50.png"));
		for (int i = 1;i<=8;i++) jump_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/51.png"));
		for (int i = 1;i<=5;i++) jump_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/52.png"));
		//攻击
		for (int i = 9;i<= 11 ;i++) cut_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/"+i+".png"));
		for (int i = 9;i<= 11 ;i++) cut_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/"+i+".png"));
		//飞踢
		for (int i = 54;i<= 58;i++) flyKick_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/"+i+".png"));
		for (int i = 54;i<= 58;i++) flyKick_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/"+i+".png"));
		//连击
		for (int i = 12;i<= 20;i++) longAttack_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/"+i+".png"));
		for (int i = 12;i<= 20;i++) longAttack_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/"+i+".png"));
		//技能
		for (int i = 132;i<= 138;i++) skill_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/"+i+".png"));
		for (int i = 163;i<= 166;i++) skill_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/"+i+".png"));
		for (int i = 132;i<= 138;i++) skill_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/"+i+".png"));
		for (int i = 163;i<= 166;i++) skill_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/"+i+".png"));
		//冲锋
		for (int i = 40;i<=42;i++) quickGo_LListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.L关羽/"+i+".png"));
		for (int i = 40;i<=42;i++) quickGo_RListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/1.R关羽/"+i+".png"));
		
		//张飞,移动
		for (int i = 1;i<=8;i++) run_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/"+i+".png"));
		for (int i = 1;i<=8;i++) run_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/"+i+".png"));
		//跳跃
		for (int i = 1;i<=3;i++) jump_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/63.png"));
		for (int i = 1;i<=5;i++) jump_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/65.png"));
		for (int i = 1;i<=8;i++) jump_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/66.png"));
		for (int i = 1;i<=5;i++) jump_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/67.png"));
		for (int i = 1;i<=3;i++) jump_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/63.png"));
		for (int i = 1;i<=5;i++) jump_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/65.png"));
		for (int i = 1;i<=8;i++) jump_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/66.png"));
		for (int i = 1;i<=5;i++) jump_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/67.png"));
		//攻击
		for (int i = 9;i<=11;i++) cut_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/"+i+".png"));
		for (int i = 9;i<=11;i++) cut_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/"+i+".png"));
		//飞踢
		for (int i = 73;i<=78;i++) flyKick_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/"+i+".png"));
		for (int i = 73;i<=78;i++) flyKick_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/"+i+".png"));
		//连击
		for (int i = 12;i<=18;i++) longAttack_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/"+i+".png"));
		for (int i = 12;i<=18;i++) longAttack_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/"+i+".png"));
		//技能
		for (int i = 151;i<=153;i++) skill_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/"+i+".png"));
		for (int i = 210;i<=217;i++) skill_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/"+i+".png"));
		for (int i = 151;i<=153;i++) skill_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/"+i+".png"));
		for (int i = 210;i<=217;i++) skill_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/"+i+".png"));
		//冲锋
		for (int i = 60;i<=62;i++) quickGo_LListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.L张飞/"+i+".png"));
		for (int i = 60;i<=62;i++) quickGo_RListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/2.R张飞/"+i+".png"));
		
		//赵云,移动
		for (int i = 1;i<=8;i++) run_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/"+i+".png"));
		for (int i = 1;i<=8;i++) run_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/"+i+".png"));
		//跳跃
		for (int i = 1;i<=3;i++) jump_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/9.png"));
		for (int i = 1;i<=5;i++) jump_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/10.png"));
		for (int i = 1;i<=8;i++) jump_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/11.png"));
		for (int i = 1;i<=5;i++) jump_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/12.png"));
		for (int i = 1;i<=3;i++) jump_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/9.png"));
		for (int i = 1;i<=5;i++) jump_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/10.png"));
		for (int i = 1;i<=8;i++) jump_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/11.png"));
		for (int i = 1;i<=5;i++) jump_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/12.png"));
		//攻击
		for (int i = 16;i<=21;i++) cut_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/"+i+".png"));
		for (int i = 16;i<=21;i++) cut_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/"+i+".png"));
		//飞踢
		for (int i = 13;i<=15;i++) flyKick_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/"+i+".png"));
		for (int i = 13;i<=15;i++) flyKick_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/"+i+".png"));
		//连击
		for (int i = 22;i<=28;i++) longAttack_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/"+i+".png"));
		for (int i = 22;i<=28;i++) longAttack_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/"+i+".png"));
		//技能
		for (int i = 33;i<=39;i++) skill_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/"+i+".png"));
		for (int i = 33;i<=39;i++) skill_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/"+i+".png"));
		//冲锋
		for (int i = 42;i<=46;i++) quickGo_LListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.L赵云/"+i+".png"));
		for (int i = 42;i<=46;i++) quickGo_RListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/3.R赵云/"+i+".png"));
		
		//魏延,移动
		for (int i = 1;i<=8;i++) run_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 1;i<=8;i++) run_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		//跳跃
		for (int i = 1;i<=3;i++) jump_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/52.png"));
		for (int i = 1;i<=5;i++) jump_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/54.png"));
		for (int i = 1;i<=8;i++) jump_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/55.png"));
		for (int i = 1;i<=5;i++) jump_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/56.png"));
		for (int i = 1;i<=3;i++) jump_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/52.png"));
		for (int i = 1;i<=5;i++) jump_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/54.png"));
		for (int i = 1;i<=8;i++) jump_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/55.png"));
		for (int i = 1;i<=5;i++) jump_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/56.png"));
		//攻击
		for (int i = 12;i<=16;i++) cut_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 12;i<=16;i++) cut_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		//飞踢
		for (int i = 57;i<=62;i++) flyKick_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 57;i<=62;i++) flyKick_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		//连击
		for (int i = 17;i<=21;i++) longAttack_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 37;i<=40;i++) longAttack_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 17;i<=21;i++) longAttack_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		for (int i = 37;i<=40;i++) longAttack_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		//技能
		for (int i = 167;i<=172;i++) skill_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 154;i<=157;i++) skill_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 167;i<=172;i++) skill_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		for (int i = 154;i<=157;i++) skill_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		//冲锋
		for (int i = 41;i<=43;i++) quickGo_LListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.L魏延/"+i+".png"));
		for (int i = 41;i<=43;i++) quickGo_RListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/1.主角/4.R魏延/"+i+".png"));
		
		//小怪1
		for (int i = 1;i<=6;i++) run_LEnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/"+i+".png"));//移动
		for (int i = 1;i<=6;i++) run_REnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/"+i+".png"));
		for (int i = 8;i<=12;i++) cut_LEnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/"+i+".png"));//攻击
		for (int i = 8;i<=12;i++) cut_REnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/"+i+".png"));
		for (int i = 17;i<=20;i++) skill_LEnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/"+i+".png"));//技能
		for (int i = 17;i<=20;i++) skill_REnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/"+i+".png"));
		
		for (int i = 1;i<=2;i++) quickGo_LEnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/6.png"));
		for (int i = 1;i<=3;i++) quickGo_LEnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/7.png"));
		for (int i = 1;i<=2;i++) quickGo_LEnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/8.png"));
		for (int i = 1;i<=2;i++) quickGo_REnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/6.png"));
		for (int i = 1;i<=3;i++) quickGo_REnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/7.png"));
		for (int i = 1;i<=2;i++) quickGo_REnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/8.png"));
		/*
		for (int i = 6;i<=8;i++) quickGo_LEnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.L蛮兵/"+i+".png"));
		for (int i = 6;i<=8;i++) quickGo_REnemyListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.R蛮兵/"+i+".png"));
		*/
		//小怪2
		for (int i = 1;i<=5;i++) run_LEnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.L枪兵/"+i+".png"));//移动
		for (int i = 1;i<=5;i++) run_REnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.R枪兵/"+i+".png"));
		for (int i = 17;i<=20;i++) cut_LEnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.L枪兵/"+i+".png"));//攻击
		for (int i = 17;i<=20;i++) cut_REnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.R枪兵/"+i+".png"));
		for (int i = 12;i<=15;i++) skill_LEnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.L枪兵/"+i+".png"));//技能
		for (int i = 12;i<=15;i++) skill_REnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.R枪兵/"+i+".png"));
		for (int i = 19;i<=21;i++) quickGo_LEnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.L枪兵/"+i+".png"));//技能
		for (int i = 19;i<=21;i++) quickGo_REnemyListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.R枪兵/"+i+".png"));//技能
		//小怪3
		for (int i = 1;i<=2;i++) run_LEnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.L重刀兵/"+i+".png"));//移动
		for (int i = 1;i<=2;i++) run_REnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.R重刀兵/"+i+".png"));
		for (int i = 3;i<=5;i++) cut_LEnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.L重刀兵/"+i+".png"));//攻击
		for (int i = 3;i<=5;i++) cut_REnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.R重刀兵/"+i+".png"));
		for (int i = 6;i<=8;i++) skill_LEnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.L重刀兵/"+i+".png"));//技能
		for (int i = 6;i<=8;i++) skill_REnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.R重刀兵/"+i+".png"));
		for (int i = 19;i<=21;i++) quickGo_LEnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.L重刀兵/"+i+".png"));//技能
		for (int i = 19;i<=21;i++) quickGo_REnemyListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.R重刀兵/"+i+".png"));//技能
		//小怪4
		for (int i = 1;i<=5;i++) run_LEnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.L刺客/"+i+".png"));//移动
		for (int i = 1;i<=5;i++) run_REnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.R刺客/"+i+".png"));
		for (int i = 6;i<=8;i++) cut_LEnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.L刺客/"+i+".png"));//攻击
		for (int i = 6;i<=8;i++) cut_REnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.R刺客/"+i+".png"));
		for (int i = 9;i<=12;i++) skill_LEnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.L刺客/"+i+".png"));//技能
		for (int i = 9;i<=12;i++) skill_REnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.R刺客/"+i+".png"));
		for (int i = 18;i<=20;i++) quickGo_LEnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.L刺客/"+i+".png"));//技能
		for (int i = 18;i<=20;i++) quickGo_REnemyListImg4.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/4.R刺客/"+i+".png"));//技能
		//小怪5
		for (int i = 1;i<=4;i++) run_LEnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.L重锤兵/"+i+".png"));//移动
		for (int i = 1;i<=4;i++) run_REnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.R重锤兵/"+i+".png"));
		for (int i = 5;i<=7;i++) cut_LEnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.L重锤兵/"+i+".png"));//攻击
		for (int i = 5;i<=7;i++) cut_REnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.R重锤兵/"+i+".png"));
		for (int i = 8;i<=11;i++) skill_LEnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.L重锤兵/"+i+".png"));//技能
		for (int i = 8;i<=11;i++) skill_REnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.R重锤兵/"+i+".png"));
		for (int i = 20;i<=22;i++) quickGo_LEnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.L重锤兵/"+i+".png"));//技能
		for (int i = 20;i<=22;i++) quickGo_REnemyListImg5.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/5.R重锤兵/"+i+".png"));//技能
		//Boss1
		for (int i = 1;i<=5;i++) run_LBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.LBoss/"+i+".png"));//移动
		for (int i = 1;i<=5;i++) run_RBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.RBoss/"+i+".png"));
		for (int i = 8;i<=12;i++) cut_LBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.LBoss/"+i+".png"));//攻击
		for (int i = 8;i<=12;i++) cut_RBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.RBoss/"+i+".png"));
		for (int i = 17;i<=21;i++) skill_LBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.LBoss/"+i+".png"));//技能
		for (int i = 17;i<=21;i++) skill_RBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.RBoss/"+i+".png"));
		for (int i = 23;i<=25;i++) quickGo_LBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.LBoss/"+i+".png"));//技能
		for (int i = 23;i<=25;i++) quickGo_RBossListImg1.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/1.RBoss/"+i+".png"));//技能
		//Boss2
		for (int i = 1;i<=4;i++) run_LBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.LBoss/"+i+".png"));//移动
		for (int i = 1;i<=4;i++) run_RBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.RBoss/"+i+".png"));
		for (int i = 5;i<=8;i++) cut_LBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.LBoss/"+i+".png"));//攻击
		for (int i = 5;i<=8;i++) cut_RBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.RBoss/"+i+".png"));
		for (int i = 9;i<=10;i++) skill_LBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.LBoss/"+i+".png"));//技能
		for (int i = 9;i<=10;i++) skill_RBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.RBoss/"+i+".png"));
		for (int i = 11;i<=13;i++) quickGo_LBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.LBoss/"+i+".png"));//技能
		for (int i = 11;i<=13;i++) quickGo_RBossListImg2.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/2.RBoss/"+i+".png"));//技能
		//Boss2		
		for (int i = 1;i<=4;i++) run_LBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.LBoss/"+i+".png"));//移动
		for (int i = 1;i<=4;i++) run_RBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.RBoss/"+i+".png"));
		for (int i = 5;i<=9;i++) cut_LBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.LBoss/"+i+".png"));//攻击
		for (int i = 5;i<=9;i++) cut_RBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.RBoss/"+i+".png"));
		for (int i = 10;i<=14;i++) skill_LBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.LBoss/"+i+".png"));//技能
		for (int i = 10;i<=14;i++) skill_RBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.RBoss/"+i+".png"));
		for (int i = 14;i<=16;i++) quickGo_LBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.LBoss/"+i+".png"));//技能
		for (int i = 14;i<=16;i++) quickGo_RBossListImg3.add(Toolkit.getDefaultToolkit().getImage("imgs/res改正/3.小怪/3.RBoss/"+i+".png"));//技能
	}

 三、GameObj 物品道具类

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;

public class GameObj {
	Image img;//图片
	int x,y;//坐标
	int width,height;//图片的边长
	int recover;//恢复的血量值
	
	//构造方法
	public GameObj() {}
	public GameObj(Image img, int x,int y,int width,int height,int recover) {
		this.img = img;
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.recover = recover;
	}
	
	//绘制自身的图片
	public void paintSelf(Graphics gImage) {
		gImage.drawImage(img, x,y,null);
	}
	//返回自身矩形,可以进行碰撞检测
	public Rectangle getRec() {
		return new Rectangle(x,y,width,height);
	}
	
	//一些set get函数
	public void setImg(Image img) {
		this.img = img;
	}
	public void setX(int x) {
		this.x = x;
	}
	public void setY(int y) {
		this.y = y;
	}
	public void setWidth(int width) {
		this.width = width;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public void setRecover(int recover) {
		this.recover = recover;
	}
	public Image getImg() {
		return img;
	}
	public int getX() {
		return x;
	}
	public int getY() {
		return y;
	}
	public int getWidth() {
		return width;
	}
	public int getHeight() {
		return height;
	}
	public int getRecover() {
		return recover;
	}
}

 四、People 人物类

1.变量和构造方法:

    private int x, y;//人物的坐标
	int width,height;//角色的宽,高
	float hp;//血量
	float atk;//攻击力
	//当前的状态
	public String status;
	//显示当前的状态所对应的图像
	public Image show = null;
	//创建一个线程对象,来实现人物的动作
	private Thread thread = null;
	private int walkSpeed;//需要传入的参数速度
	private int xSpeed;//移动速度
	private int ySpeed;//跳跃速度
	private int upTime = 0;//表示主角的上升的时间
	
	//定义索引,用于我们获得人物的移动图片;因为移动,跳,攻击等图片的数量不同,所以要定义不同的索引
	int indexRun;//索引,移动的图片
	int indexJump;//索引,跳的图片
	int indexAttack;//索引,拳击的图片
	int indexFlyKick; //索引,飞踢的图片
	int indexLongAttack;//索引,连击的图片
	int indexSkill;//索引,技能的图片
	int indexQuickGo;//索引,冲锋的图片
	
	//(应该传入具体的图片数量,如5,3等格式,不要用 ......size()的格式,不然人物会卡空白)
	int runImgNum;//移动的图片数
	int jumpImgNum;//跳跃的图片数
	int cutImgNum;//拳击的图片数
	int flyKickImgNum;//飞踢的图片数
	int longAttackImgNum;//连击的图片数
	int skillImgNum;//技能的图片数
	int quickGoImgNum;//冲撞的图片数
	
	boolean cutCoolDown = true;//攻击冷却
	boolean quickGoCoolDown = true;//冲锋冷却
	boolean jumpCoolDown = true;//跳跃冷却状态
	boolean flyKickCoolDown = true;//飞踢冷却状态
	boolean longAttackCoolDown = true;//连击冷却状态
	boolean skillCoolDown = true;//技能冷却状态
	
	//各种行为图片的列表
	Image stand_LImg;//向左站立
	Image stand_RImg;//向右站立
	Image defend_LImg;//防御
	Image defend_RImg;//防御
	List<Image> run_LListImg = new ArrayList<>();//向左跑
	List<Image> run_RListImg = new ArrayList<>();//向右跑
	List<Image> jump_LListImg = new ArrayList<>();//向左跳跃
	List<Image> jump_RListImg = new ArrayList<>();//向右跳跃
	List<Image> cut_LListImg = new ArrayList<>();//向左攻击
	List<Image> cut_RListImg = new ArrayList<>();//向右攻击
	List<Image> flyKick_LListImg = new ArrayList<>();//飞踢向左
	List<Image> flyKick_RListImg = new ArrayList<>();//飞踢向右
	List<Image> longAttack_LListImg = new ArrayList<>();//连击向左
	List<Image> longAttack_RListImg = new ArrayList<>();//连击向右
	List<Image> skill_LListImg = new ArrayList<>();//技能左
	List<Image> skill_RListImg = new ArrayList<>();//技能右
	List<Image> quickGo_LListImg = new ArrayList<>();//冲锋左
	List<Image> quickGo_RListImg = new ArrayList<>();//冲锋右

	
	//构造方法
	public People() {}
	//敌人用的构造方法(包含小怪,Boss)
	public People(int x,int y,int width,int height,float hp,float atk,int walkSpeed,Image stand_LImg,
			Image stand_RImg,List<Image> run_LListImg,List<Image> run_RListImg,int runImgNum,
			List<Image> cut_LListImg,List<Image> cut_RListImg,int cutImgNum,
			List<Image> skill_LListImg,List<Image> skill_RListImg,int skillImgNum) {
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.hp = hp;
		this.atk = atk;
		this.walkSpeed = walkSpeed;
		this.stand_LImg = stand_LImg;
		this.stand_RImg = stand_RImg;
		this.run_LListImg = run_LListImg;
		this.run_RListImg = run_RListImg;
		this.runImgNum = runImgNum;
		this.cut_LListImg = cut_LListImg;
		this.cut_RListImg = cut_RListImg;
		this.cutImgNum = cutImgNum;
		this.skill_LListImg = skill_LListImg;
		this.skill_RListImg = skill_RListImg;
		this.skillImgNum = skillImgNum;
		//默认的初始值
		this.status = "stand--right";
		this.show = stand_RImg;
		this.thread = new Thread(this);
		thread.start();
	}
	//敌人2
	public People(int x,int y,int width,int height,float hp,float atk,int walkSpeed,Image stand_LImg,
			Image stand_RImg,List<Image> run_LListImg,List<Image> run_RListImg,int runImgNum,
			List<Image> quickGo_LListImg,List<Image> quickGo_RListImg,int quickGoImgNum,
			List<Image> cut_LListImg,List<Image> cut_RListImg,int cutImgNum,
			List<Image> skill_LListImg,List<Image> skill_RListImg,int skillImgNum) {
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.hp = hp;
		this.atk = atk;
		this.walkSpeed = walkSpeed;
		this.stand_LImg = stand_LImg;
		this.stand_RImg = stand_RImg;
		this.run_LListImg = run_LListImg;
		this.run_RListImg = run_RListImg;
		this.runImgNum = runImgNum;
		this.quickGo_LListImg = quickGo_LListImg;
		this.quickGo_RListImg = quickGo_RListImg;
		this.quickGoImgNum = quickGoImgNum;
		this.cut_LListImg = cut_LListImg;
		this.cut_RListImg = cut_RListImg;
		this.cutImgNum = cutImgNum;
		this.skill_LListImg = skill_LListImg;
		this.skill_RListImg = skill_RListImg;
		this.skillImgNum = skillImgNum;
		//默认的初始值
		this.status = "stand--right";
		this.show = stand_RImg;
		this.thread = new Thread(this);
		thread.start();
	}

	//主角用的构造方法
	public People(int x,int y,int width,int height,float hp,float atk,int walkSpeed,Image stand_LImg,Image stand_RImg,
			Image defend_LImg,Image defend_RImg,List<Image> run_LListImg,List<Image> run_RListImg,int runImgNum,
			List<Image> quickGo_LListImg,List<Image> quickGo_RListImg,int quickGoImgNum,
			List<Image> jump_LListImg,List<Image> jump_RListImg,int jumpImgNum,
			List<Image> cut_LListImg,List<Image> cut_RListImg,int cutImgNum,
			List<Image> flyKick_LListImg,List<Image> flyKick_RListImg,int flyKickImgNum,
			List<Image> longAttack_LListImg,List<Image> longAttack_RListImg,int longAttackImgNum,
			List<Image> skill_LListImg,List<Image> skill_RListImg,int skillImgNum) {
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.hp = hp;
		this.atk = atk;
		this.walkSpeed = walkSpeed;
		this.stand_LImg = stand_LImg;
		this.stand_RImg = stand_RImg;
		this.defend_LImg = defend_LImg;
		this.defend_RImg = defend_RImg;
		this.quickGo_LListImg = quickGo_LListImg;
		this.quickGo_RListImg = quickGo_RListImg;
		this.quickGoImgNum= quickGoImgNum;
		this.run_LListImg = run_LListImg;
		this.run_RListImg = run_RListImg;
		this.runImgNum = runImgNum;
		this.jump_LListImg = jump_LListImg;
		this.jump_RListImg = jump_RListImg;
		this.jumpImgNum = jumpImgNum;
		this.cut_LListImg = cut_LListImg;
		this.cut_RListImg = cut_RListImg;
		this.cutImgNum = cutImgNum;
		this.flyKick_LListImg = flyKick_LListImg;
		this.flyKick_RListImg = flyKick_RListImg;
		this.flyKickImgNum = flyKickImgNum;
		this.longAttack_LListImg = longAttack_LListImg;
		this.longAttack_RListImg = longAttack_RListImg;
		this.longAttackImgNum = longAttackImgNum;
		this.skill_LListImg = skill_LListImg;
		this.skill_RListImg = skill_RListImg;
		this.skillImgNum = skillImgNum;
		//默认的初始值
		this.status = "stand--right";//默认的人物状态是向右站立
		this.show = stand_RImg;//默认向右站立(不写也可以)
		this.thread = new Thread(this);
		thread.start();//开启线程
	}

2.人物的移动,攻击,技能方法:

    //向左移动时 调用此函数
	public void leftMove() {
		xSpeed = -walkSpeed;//改变速度
		status = "run--left";
	}
	//向右移动时 调用此函数
	public void rightMove() {
		xSpeed = walkSpeed;
		status = "run--right";
	}
	//面向左停止
	public void leftStop() {
		xSpeed = 0;
		status = "stop--left";
	}
	//面向右停止
	public void rightStop() {
		xSpeed = 0;
		status = "stop--right";
	}
	//防御
	public void defend() {
		xSpeed = 0;//防御时不能移动
		if (status.indexOf("jump") == -1) {//跳跃的时候不能防御
			if (status.indexOf("left") != -1) {//如果面向左
				status = "defend--left";
			}else {
				status = "defend--right";
			}
		}
	}
	//冲锋
	public void quickGo() {
		if (status.indexOf("jump") == -1) {//不在跳跃状态
			if (status.indexOf("left") != -1) {//如果面向左
				status = "quickGo--left";
				this.xSpeed = -walkSpeed*2;
			}else {
				status = "quickGo--right";
				this.xSpeed = walkSpeed*2;
			}
		}
	}
	//跳跃
	public void jump() {
		if (status.indexOf("left") != -1) {//如果面向左
			status = "jump--left";
		}else {
			status = "jump--right";
		}
		ySpeed = -10;//向上跳y 减少
		upTime = 5;//相当于向上跳了50像素
	}
	//主角,小怪,Boss的普通攻击
	public void attack() {
		if (status.indexOf("left") != -1) {//如果面朝着左边
			status = "cut--left";
		}else {
			status = "cut--right";
		}
	}
	//主角飞踢
	public void flyKick() {
		if (status.indexOf("left") != -1) {//如果面朝着左边
			status = "flyKick--left";
		}else {
			status = "flyKick--right";
		}
	}
	//主角连击
	public void longAttack() {
		if (status.indexOf("jump") == -1) {//只有站立在地面上才能使用连击
			xSpeed = 0;//使用连击时不能移动
			if (status.indexOf("left") != -1) {//如果面朝着左边
				status = "longAttack--left";
			}else {
				status = "longAttack--right";
			}
		}
	}
	//主角,小怪,Boss的技能
	public void skill() {
		if (status.indexOf("left") != -1) {
			status = "skill--left";
		}else {
			status = "skill--right";
		}
	}
	//人物结束了攻击,跳跃,技能等行为
	public void actionStop() {
		if (status.indexOf("slip") != -1) this.y = 270;
		if (status.indexOf("quickGo") != -1) this.setXSpeed(0);
		if (status.indexOf("left") != -1) {//如果面朝着左边	
			status = "stop--left";
		}else {//如果面朝着右边
			status = "stop--right";
		}
	}
	

3.在死循环里判断人物的动作:

    //在死循环里判断
	@Override
	public void run() {
		while(true) {
			if(y == 270 && upTime == 0) {//此时在地面上
				//此时人物没有拳击,连击,技能,冲锋,防御
				if (status.indexOf("cut") == -1 && status.indexOf("longAttack") == -1 && 
						status.indexOf("skill") == -1 && status.indexOf("quickGo") == -1
						&& status.indexOf("defend") == -1) {
					if (status.indexOf("left") != -1 ) {//判断方向
						if(xSpeed != 0) {//判断是否在移动中
							status = "run--left";
						}else {
							status = "stop--left";
						}
					}else if (status.indexOf("right") != -1) { 
						if(xSpeed != 0) {//判断是否在移动中
							status = "run--right";
						}else {
							status = "stop--right";
						}
					}
				}
			}else {//处于上升或下降的状态
				if(upTime != 0) {
					upTime --;//让upTime 一直自减
				}else {//这时upTime=0,达到了最高点
					ySpeed = 10;//改变ySpeed 的正负,让人物下降
				}
				y += ySpeed;//实现y 轴坐标的上下改变
			}
			
			//判断是否在运动,如果在运动,改变位置坐标
			if (xSpeed != 0) {
				x += xSpeed;
				//判断是否运动到了屏幕的边界,并防止超出屏幕界限
				if (x < 0) x = 0;
				if (x >= 960) x = 960;
			}
			
			//判断当前是否是移动状态,改变跑步图片的索引,如果在移动,改变索引(不断改变索引,从而改变图片)
			if (status.contains("run")) indexRun = indexRun < runImgNum-1 ? indexRun+1 : 0;
			//改变跳的图片的索引
			if (status.contains("jump")) indexJump = indexJump < jumpImgNum-1 ? indexJump+1 : 0;
			//改变普通攻击的图片的索引
			if (status.contains("cut")) indexAttack = indexAttack < cutImgNum-1 ? indexAttack+1 : 0;
			//改变飞踢的图片的索引
			if (status.contains("flyKick")) indexFlyKick = indexFlyKick < flyKickImgNum-1 ? indexFlyKick+1 : 0;
			//改变连击的图片的索引
			if (status.contains("longAttack")) indexLongAttack = indexLongAttack < longAttackImgNum-1 ? indexLongAttack+1 : 0;
			//改变放技能的图片的索引
			if (status.contains("skill")) indexSkill = indexSkill < skillImgNum-1 ? indexSkill+1 : 0;
			//改变冲锋的图片的索引
			if (status.contains("quickGo")) indexQuickGo = indexQuickGo < quickGoImgNum-1 ? indexQuickGo+1 : 0;
			
			//改变停止的图片
			if (status.equals("stop--left")) show = stand_LImg;
			if (status.equals("stop--right")) show = stand_RImg;
			//改变防御的图片
			if (status.equals("defend--left")) show = defend_LImg;
			if (status.equals("defend--right")) show = defend_RImg;
			//改变移动的图片
			if (status.equals("run--left")) show = run_LListImg.get(indexRun);
			if (status.equals("run--right")) show = run_RListImg.get(indexRun);
			//改变跳跃的图片
			if (status.equals("jump--left")) show = jump_LListImg.get(indexJump);
			if (status.equals("jump--right")) show = jump_RListImg.get(indexJump);
			//改变攻击的图片
			if (status.equals("cut--left"))show = cut_LListImg.get(indexAttack);
			if (status.equals("cut--right")) show = cut_RListImg.get(indexAttack);
			//改变飞踢的图片
			if (status.equals("flyKick--left")) show = flyKick_LListImg.get(indexFlyKick);
			if (status.equals("flyKick--right")) show = flyKick_RListImg.get(indexFlyKick);
			//改变连击的图片
			if (status.equals("longAttack--left")) show = longAttack_LListImg.get(indexLongAttack);  
			if (status.equals("longAttack--right")) show = longAttack_RListImg.get(indexLongAttack);  
			//改变技能的图片
			if (status.equals("skill--left")) show = skill_LListImg.get(indexSkill);  
			if (status.equals("skill--right")) show = skill_RListImg.get(indexSkill);  
			//改变冲锋的图片
			if (status.equals("quickGo--left")) show = quickGo_LListImg.get(indexQuickGo);  
			if (status.equals("quickGo--right")) show = quickGo_RListImg.get(indexQuickGo);  
			
			//休眠100毫秒,最好与主包里的休眠时间一致
			try {
				Thread.sleep(100);
			} catch (Exception e) {}
		}
	}

4.人物的各种动作的冷却:

    //攻击冷却
	class cutCD extends Thread{
		public void run() {
			cutCoolDown = false;
			try {
				Thread.sleep(500);//拳击冷却时间,每隔0.5秒
				cutCoolDown = true;
			} catch (Exception e) {}
			this.interrupt();//中断线程(如果不中断好像暂时也没有问题)
		}
	}
	//跳跃冷却
	class jumpCD extends Thread{
		public void run() {
			jumpCoolDown = false;
			try {
				Thread.sleep(1000);
				jumpCoolDown = true;
			} catch (Exception e) {}
			this.interrupt();
		}
	}
	//飞踢冷却
	class flyKickCD extends Thread{
		public void run() {
			flyKickCoolDown = false;
			try {
				Thread.sleep(500);
				flyKickCoolDown = true;
			} catch (Exception e) {}
			this.interrupt();
		}
	}
	//连击冷却
	class longAttackCD extends Thread{
		public void run() {
			longAttackCoolDown = false;
			try {
				Thread.sleep(500);
				longAttackCoolDown = true;
			} catch (Exception e) {}
			this.interrupt();
		}
	}
	//技能冷却
	class skillCD extends Thread{
		public void run() {
			skillCoolDown = false;
			try {
				Thread.sleep(3000);
				skillCoolDown = true;
			} catch (Exception e) {}
			this.interrupt();
		}
	}
	//冲锋冷却
	class quickGoCD extends Thread{
		public void run() {
			quickGoCoolDown = false;
			try {
				Thread.sleep(500);
				quickGoCoolDown = true;
			} catch (Exception e) {}
			this.interrupt();
		}
	}

5.碰撞

    //碰撞
	public Rectangle getRec() {
		return new Rectangle(x,y,width,height);
	}

6.一些set,get方法:

    //一些set函数
	public void setX(int x) {
		this.x = x;
	}
	public void setY(int y) {
		this.y = y;
	}
	public void setShow(Image show) {
		this.show = show;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public void setXSpeed(int xSpeed) {
		this.xSpeed = xSpeed;
	}
	public void setYSpeed(int ySpeed) {
		this.ySpeed = ySpeed;
	}
	public void setUpTime(int upTime) {
		this.upTime = upTime;
	}
	//get函数
	public int getX() {
		return x;
	}
	public int getY() {
		return y;
	}
	public int getWidth() {
		return width;
	}
	public int getHeight() {
		return height;
	}
	public float getHp() {
		return hp;
	}
	public float getAtk() {
		return atk;
	}
	public String getStatus() {
		return status;
	}
	public Image getShow() {
		return show;
	}
	public int getXSpeed() {
		return xSpeed;
	}
	public int getYSpeed() {
		return ySpeed;
	}
	public int getUpTime() {
		return upTime;
	}
	//获得相关行为的图片索引
	public int getIndexRun() {
		return indexRun;
	}
	public int getIndexJump() {
		return indexJump;
	}
	public int getIndexAttack() {
		return indexAttack;
	}
	public int getIndexFlyKick() {
		return indexFlyKick;
	}
	public int getIndexLongAttack() {
		return indexLongAttack;
	}
	public int getIndexSkill() {
		return indexSkill;
	}
	//获得相关行为的图片数量
	public int getRunImgNum() {
		return runImgNum;
	}
	public int getJumpImgNum() {
		return jumpImgNum;
	}
	public int getCutImgNum() {
		return cutImgNum;
	}
	public int getFlyKickImgNum() {
		return flyKickImgNum;
	}
	public int getLongAttackImgNum() {
		return longAttackImgNum;
	}
	public int getSkillImgNum() {
		return skillImgNum;
	}
	//获得相关攻击图片列表
	public List<Image> getCut_LListImg(){
		return cut_LListImg;
	}
	public List<Image> getCut_RListImg(){
		return cut_RListImg;
	}
	public List<Image> getFlyKick_LListImg(){
		return flyKick_LListImg;
	}
	public List<Image> getFlyKick_RListImg(){
		return flyKick_RListImg;
	}
	public List<Image> getLongAttack_LListImg(){
		return longAttack_LListImg;
	}
	public List<Image> getLongAttack_RListImg(){
		return longAttack_RListImg;
	}
	public List<Image> getSkill_ListImg(){
		return skill_LListImg;
	}
	public List<Image> getSkill_RistImg(){
		return skill_RListImg;
	}

 五、Role 主角类

1.构造方法:

    //构造方法
	public Role() {}
	public Role(int x,int y,int width,int height,float hp,float atk,int walkSpeed,Image stand_LImg,Image stand_RImg,
			Image defend_LImg,Image defend_RImg,List<Image> run_LListImg,List<Image> run_RListImg,int runImgNum,
			List<Image> slip_LListImg,List<Image> slip_RLIstImg,int slipImgNum,
			List<Image> jump_LListImg,List<Image> jump_RListImg,int jumpImgNum,
			List<Image> cut_LListImg,List<Image> cut_RListImg,int cutImgNum,
			List<Image> flyKick_LListImg,List<Image> flyKick_RListImg,int flyKickImgNUm,
			List<Image> longAttack_LListImg,List<Image> longAttack_RListImg,int longAttackImgNum,
			List<Image> skill_LListImg,List<Image> skill_RListImg,int skillImgNum) {
		super(x,y,width,height,hp,atk,walkSpeed,stand_LImg,stand_RImg,defend_LImg,defend_RImg,run_LListImg,run_RListImg,
				runImgNum,slip_LListImg,slip_RLIstImg,slipImgNum,jump_LListImg,jump_RListImg,jumpImgNum,cut_LListImg,
				cut_RListImg,cutImgNum,flyKick_LListImg,flyKick_RListImg,flyKickImgNUm,longAttack_LListImg,
				longAttack_RListImg,longAttackImgNum,skill_LListImg,skill_RListImg,skillImgNum);
	}

2.主角被攻击:

    //主角被攻击
	public void isWound() {
		GameFame.isCutAgoHp = this.getHp();//被攻击前的血量,用于张飞的被动 
		//被小怪攻击
		for (int i = 0;i<GameUtils.enemyListImg.size();i++) {
			//如果遇到了小怪
			if (this.getRec().intersects(GameUtils.enemyListImg.get(i).getRec())) {
				//主角死亡
				if (hp <= 0) GameFame.gameState = 4;
				//被拳击攻击到
				if (GameUtils.enemyListImg.get(i).getStatus().indexOf("cut") != -1 ) {
					if (this.status.indexOf("defend") != -1) {//如果此时在防御,只受到敌人三分之一的攻击力
						this.hp -= GameUtils.enemyListImg.get(i).getAtk()/3;
					}else {
						this.hp -= GameUtils.enemyListImg.get(i).getAtk();
					}
				}
				//被技能攻击到
				if (GameUtils.enemyListImg.get(i).getStatus().indexOf("skill") != -1) {
					if (this.status.indexOf("defend") != -1) {
						this.hp -= (GameUtils.enemyListImg.get(i).getAtk()*2)/3;
					}else {
						this.hp -= GameUtils.enemyListImg.get(i).getAtk()*2;
					}
				}
				//被冲锋攻击到
				if (GameUtils.enemyListImg.get(i).getStatus().indexOf("quickGo") != -1) {
					if (this.status.indexOf("defend") != -1) {
						this.hp -= (GameUtils.enemyListImg.get(i).getAtk()*2)/3;
					}else {
						this.hp -= GameUtils.enemyListImg.get(i).getAtk()*1.5;
					}
				}
			}
		}
		//被Boss攻击
		for (int i = 0;i<GameUtils.bossListImg.size();i++) {
			//如果遇到了Boss
			if (this.getRec().intersects(GameUtils.bossListImg.get(i).getRec())) {
				//主角死亡
				if (hp <= 0) GameFame.gameState = 4;
				//被拳击攻击到
				if (GameUtils.bossListImg.get(i).getStatus().indexOf("cut") != -1 ) {
					if (this.status.indexOf("defend") != -1) {//如果此时在防御,只受到敌人三分之一的攻击力
						this.hp -= GameUtils.bossListImg.get(i).getAtk()/3;
					}else {
						this.hp -= GameUtils.bossListImg.get(i).getAtk();
					}
				}
				//被技能攻击到
				if (GameUtils.bossListImg.get(i).getStatus().indexOf("skill") != -1) {
					if (this.status.indexOf("defend") != -1) {
						this.hp -= (GameUtils.bossListImg.get(i).getAtk()*2)/3;
					}else {
						this.hp -= GameUtils.bossListImg.get(i).getAtk()*2;
					}
				}
				if (GameUtils.bossListImg.get(i).getStatus().indexOf("quickGo") != -1) {
					if (this.status.indexOf("defend") != -1) {
						this.hp -= (GameUtils.bossListImg.get(i).getAtk()*2)/3;
					}else {
						this.hp -= GameUtils.bossListImg.get(i).getAtk()*1.5;
					}
				}
			}
		}
		//用于张飞的被动,随着生命的降低,攻击力不断增加,相当于每损失100 血量,增加1点攻击
		if (GameFame.role == GameFame.role2) {
			float n = (GameFame.isCutAgoHp - this.getHp())/100;
			this.atk += n;
		}
	}

3.主角吃食物:

    public void eatFood() {
    	//遍历食物列表
		for (int i = 0;i<GameUtils.gameObjListImg.size();i++) {
			if (GameUtils.gameObjListImg.get(i).getRec().intersects(this.getRec())) {
				//当食物是酒时能增加攻击力
				if (GameUtils.gameObjListImg.get(i).getImg() == GameUtils.drinkImg) {
					this.atk +=GameUtils.gameObjListImg.get(i).getRecover();
				}else {//恢复血量
					if (this.getHp() < GameUtils.hp1) {
						//防止血量超出上限
						if (GameFame.role == GameFame.role1) {//主角1
							if (this.getHp()+GameUtils.gameObjListImg.get(i).getRecover() > GameUtils.hp1) {
								this.hp = GameUtils.hp1;
							}else {
								this.hp += GameUtils.gameObjListImg.get(i).getRecover();
							}
						}
						if (GameFame.role == GameFame.role2) {//主角2
							if (this.getHp()+GameUtils.gameObjListImg.get(i).getRecover() > GameUtils.hp2) {
								this.hp = GameUtils.hp2;
							}else {
								this.hp += GameUtils.gameObjListImg.get(i).getRecover();
							}
						}
						if (GameFame.role == GameFame.role3) {//主角3
							if (this.getHp()+GameUtils.gameObjListImg.get(i).getRecover() > GameUtils.hp3) {
								this.hp = GameUtils.hp3;
							}else {
								this.hp += GameUtils.gameObjListImg.get(i).getRecover();
							}
						}
						if (GameFame.role == GameFame.role4) {//主角4
							if (this.getHp()+GameUtils.gameObjListImg.get(i).getRecover() > GameUtils.hp4) {
								this.hp = GameUtils.hp4;
							}else {
								this.hp += GameUtils.gameObjListImg.get(i).getRecover();
							}
						}
					}
				}
				//将已经吃过的食物添加到removeObjListImg中
				GameUtils.removeObjListImg.add(GameUtils.gameObjListImg.get(i));
			}
			//人物向右走时,为了实现食物与人物的距离在减小
			if (this.getStatus().contains("run--right") && GameFame.bgWalk != -4120) {
				int foodX = GameUtils.gameObjListImg.get(i).getX();
				GameUtils.gameObjListImg.get(i).setX(foodX-this.getXSpeed());
			}
		}
	}

4.键盘控制:

    //键盘的按下,来控制移动
	public void keyPressed(KeyEvent e) {
		switch (e.getKeyCode()){
			case KeyEvent.VK_A://向左走
				leftMove();
				break;
			case KeyEvent.VK_D://向右走
				rightMove();
				break;
			case KeyEvent.VK_S://防御
				defend();
				break;
			case KeyEvent.VK_O://冲锋,0.5秒冷却
				if (quickGoCoolDown) {
					quickGo();
					new quickGoCD().start();
				}
				break;
			case KeyEvent.VK_W://跳跃1秒冷却
				if (jumpCoolDown) {
					jump();
					new jumpCD().start();//判断跳跃冷却状态
				}
				break;
			case KeyEvent.VK_J://拳击,无冷却
					attack();
				break;
			case KeyEvent.VK_K://飞踢,0.5秒冷却
				if (flyKickCoolDown) {
					flyKick();
					new flyKickCD().start();
				}
				break;
			case KeyEvent.VK_L://连击,0.5无冷却
				if (longAttackCoolDown){
					longAttack();
					new longAttackCD().start();	
				}
				break;
			case KeyEvent.VK_I://技能,3秒冷却
				if (skillCoolDown) {
					skill();
					new skillCD().start();
				}
				break;
		}
	}
	//键盘的松开,来控制暂停
	public void keyReleased(KeyEvent e) {
		switch (e.getKeyCode()){
			case KeyEvent.VK_A:
				leftStop();
				break;
			case KeyEvent.VK_D:
				rightStop();
				break;
			case KeyEvent.VK_S:
			case KeyEvent.VK_I:
			case KeyEvent.VK_O:
			case KeyEvent.VK_J:
			case KeyEvent.VK_K:
			case KeyEvent.VK_L:
				actionStop();//停止各种攻击,跳跃,技能等行为
				break;	
		}
	}

 六、Enemy 敌人类

Boss和小怪使用的是同一个类

1.构造方法:

    int foodMove;//用于人物移动时,人物与食物之间的距离也会变化
	//构造方法
	public Enemy() {}
	//用于敌人
	public Enemy(int x,int y,int width,int height,float hp,float atk,int walkSpeed,Image stand_LImg,
			Image stand_RImg,List<Image> run_LListImg,List<Image> run_RListImg,int runImgNum,
			List<Image> quickGo_LListImg,List<Image> quickGo_RListImg,int quickGoImgNum,
			List<Image> cut_LListImg,List<Image> cut_RListImg,int cutImgNum,
			List<Image> skill_LListImg,List<Image> skill_RListImg,int skillImgNum) {
		super(x,y,width,height,hp,atk,walkSpeed,stand_LImg,stand_RImg,run_LListImg,run_RListImg,runImgNum,
				quickGo_LListImg,quickGo_RListImg,quickGoImgNum,
				cut_LListImg,cut_RListImg,cutImgNum,skill_LListImg,skill_RListImg,skillImgNum);	
	}
	

2.移动和攻击

    public void goAndCut() {
    	//被攻击减血
		isWound();
		//相遇了
		if (isRec() ) {
			//拳击
			if (cutCoolDown) {
				attack();
				new cutCD().start();
			}
			//技能
			if (skillCoolDown) {
				int n = (int)(Math.random()*100);
				if (n < 10 && this.getHp() > 800) skill();//血量大于800时,大约有十分之一的概率,发动技能
				if (n < 30 && this.getHp() <= 500) skill();//血量小于500时,发动技能的概率为十分之三
				new skillCD().start();
			}
		}else {
			//移动
			//通过敌人与主角x坐标差值的正负,来让敌人一直靠近主角,并在相遇的同时攻击主角
			if (this.getX()-GameFame.role.getX() < 0) {
				rightMove();
			}else {
				leftMove();
			}
			//敌人有百分之五的概率发动冲锋
			int n = (int)(Math.random()*100);
			if (quickGoCoolDown && n<5) {
				 quickGo();
				new quickGoCD().start();
			}
		}		
	}

3.敌人的行为:

    public void action() {
		//判断敌人是否死亡
		if (this.getHp() <= 0) {
			GameFame.killEnemyCount ++;
			//有概率生成食物,并将出现的食物添加到gameObjListImg中
			int n = (int)(Math.random()*10);
			switch (n) {
				case 0,1,2,3://有十分之四的概率不会掉落食物
					break;
				case 4,5:
					GameUtils.gameObjListImg.add(new GameObj(GameUtils.food1Img,this.getX()+25,this.getY()+40,48,32,100));
					break;
				case 6,7:
					GameUtils.gameObjListImg.add(new GameObj(GameUtils.food2Img,this.getX()+25,this.getY()+40,48,32,200));
					break;
				case 8:
					GameUtils.gameObjListImg.add(new GameObj(GameUtils.food3Img,this.getX()+25,this.getY()+40,64,32,300));
					break;
				case 9://这里酒增加的是攻击力
					GameUtils.gameObjListImg.add(new GameObj(GameUtils.drinkImg,this.getX()+25,this.getY()+40,48,48,10));
					break;
			}
			//用于魏延的被动
			if (GameFame.role == GameFame.role4) {
				if (100 + GameFame.role.getHp() > GameUtils.hp4) {
					this.hp = GameUtils.hp4;
				}else {
					GameFame.role.hp += 100;
				}
			}
			//将死亡的敌人添加到removeEnemyListImg中
			GameUtils.removeEnemyListImg.add(this);
			GameFame.nowEnemyCount-=5;//用于赵云的被动
		}
		goAndCut();//移动和攻击
	}

4.敌人被攻击到了

    public void isWound() {
		if (isRec()) {//如果相遇
			//判断主角是否攻击了,而且是哪一种攻击方式
			//拳击击中了敌人
			if (GameFame.role.getStatus().indexOf("cut") != -1) this.hp -= GameFame.role.getAtk()/2;
			//飞踢击中了敌人
			if (GameFame.role.getStatus().indexOf("flyKick") != -1) this.hp -= GameFame.role.getAtk()/1.5;
			//连击击中了敌人
			if (GameFame.role.getStatus().indexOf("longAttack") != -1) this.hp -= GameFame.role.getAtk()/1.5;
			//技能击中了敌人
			if (GameFame.role.getStatus().indexOf("skill") != -1) this.hp -= GameFame.role.getAtk();
			//冲撞击中了敌人
			if (GameFame.role.getStatus().indexOf("quickGo") != -1) this.hp -= GameFame.role.getAtk()/1.5;
		}
	}

5.判断敌人与主角是否相遇

    public boolean isRec() {
		if(this.getRec().intersects(GameFame.role.getRec())) {
			return true;//相遇了
		}else {
			return false;//未相遇
		}
	}

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值