Java实现萝卜勇者游戏的示例代码

前言

《萝卜勇者》是由国内玩家自制的一款独立游戏,玩家扮演萝卜勇士闯关,打败各种邪恶的敌人,获得最后的胜利。

《萝卜勇者》游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想。

主要需求

参考《萝卜勇者》的剧情,实现JAVA版本的单机游戏。

主要设计

1、 用Swing库做可视化界面

2、键盘监听,用WSAD可以控制光标移动,J是确定,K是取消,游戏中,WSAD移动,J攻击,K格挡。

3、 用线程实现画面刷新。

4、用流实现音乐播放。

5、支持多种语言,支持用户翻译语言文件。

6、在帮助界面下,按键盘1234567890可以启用秘籍(传奇模式:一刀砍999血)

7、使用的是JDK8

8、文件编码GBK

功能截图

游戏开始

Java实现萝卜勇者游戏的示例代码_第1张图片

游戏帮助

Java实现萝卜勇者游戏的示例代码_第2张图片

游戏设置

Java实现萝卜勇者游戏的示例代码_第3张图片

选择不同的关卡

Java实现萝卜勇者游戏的示例代码_第4张图片

游戏效果

Java实现萝卜勇者游戏的示例代码_第5张图片

怪物攻击效果

Java实现萝卜勇者游戏的示例代码_第6张图片

代码实现

启动类

@SuppressWarnings("serial")
public class TestWindowBuilder extends JFrame {

	TextLibrary textLib;
	settingLoader settingLib;
	private JPanel contentPane;
	boolean isCheating;
	saveSelect saveSelectMenu;
	int[] startMenuPointer=new int[1];
	JLabel lblNewLabel1;
	JLabel lblNewLabel2;
	JLabel lblNewLabel3;
	JLabel lblNewLabel3_2;
	JLabel lblNewLabel3_1;
	JLabel lblNewLabel4;
	JLabel lblNewLabel5;
	JLabel lblNewLabel6;
	
	CMusicLink CMLHead=new CMusicLink(1);
	CMusicLink CMLLast=new CMusicLink(2);
	
	boolean sawExplain=true;
	
	CMusic menuBGMusic;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TestWindowBuilder frame = new TestWindowBuilder();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
public TestWindowBuilder() {
		this.setTitle("CARROT MAN II");
		this.setIconImage(new ImageIcon("resource/down4.png").getImage());
		int screenWidth=Calculator.setInside(ScreenSize.getWidth(), 800, 99999);
		int screenHeight=Calculator.setInside(ScreenSize.getHeight(), 450, 99999);
		
		System.out.println("启动控制台222...");
		
		CMLHead.next=CMLLast;
		CMLLast.prev=CMLHead;
		
		settingLib=new settingLoader();
		settingLib.loadSetting();//加载设置
		settingLib.saveSetting();
		textLib=new TextLibrary();
		textLib.saveText();//创建默认的语言文件
		textLib.loadText(settingLib.settings[0]);
		startNewMenuBGMusic(1);
		/*游戏阶段:
		 * 0开始菜单
		 * */
		int gamePhase=0;
		isCheating=false;
		/*开始菜单指针
		 * 0开始
		 * 1帮助
		 * 2退出
		 * */
		startMenuPointer[0]=0;
		int allSMPCount=5;//总指针数
		TestWindowBuilder testMenu=this;
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds((screenWidth-800)/2, (screenHeight-450)/2, 800, 450);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel mainMenu = new JPanel();
		mainMenu.setBounds(0, 0, 784, 412);
		contentPane.add(mainMenu);
		mainMenu.setLayout(null);
		
		lblNewLabel1 = new JLabel();//菜单标题
		lblNewLabel1.setBounds(192, 10, 400, 150);
		lblNewLabel1.setIcon(new ImageIcon("resource/MenuTitle.png"));
		mainMenu.add(lblNewLabel1);
		
		lblNewLabel2 = new JLabel();//开始
		lblNewLabel2.setBounds(10, 193, 764, 43);
		lblNewLabel2.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel2.setFont(new Font("Adobe 黑体 Std R", Font.PLAIN, 21));
		lblNewLabel2.setForeground(new Color(200,200,200));
		mainMenu.add(lblNewLabel2);
		
		lblNewLabel3 = new JLabel();//帮助
		lblNewLabel3.setBounds(10, 223, 764, 43);
		lblNewLabel3.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel3.setFont(new Font("Adobe 黑体 Std R", Font.PLAIN, 21));
		lblNewLabel3.setForeground(new Color(200,200,200));
		mainMenu.add(lblNewLabel3);
		
		lblNewLabel3_2 = new JLabel();//设置
		lblNewLabel3_2.setBounds(10, 253, 764, 43);
		lblNewLabel3_2.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel3_2.setFont(new Font("Adobe 黑体 Std R", Font.PLAIN, 21));
		lblNewLabel3_2.setForeground(new Color(200,200,200));
		mainMenu.add(lblNewLabel3_2);
		
		lblNewLabel3_1 = new JLabel();//语言
		lblNewLabel3_1.setBounds(10, 283, 764, 43);
		lblNewLabel3_1.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel3_1.setFont(new Font("Adobe 黑体 Std R", Font.PLAIN, 21));
		lblNewLabel3_1.setForeground(new Color(200,200,200));
		mainMenu.add(lblNewLabel3_1);
		
		lblNewLabel4 = new JLabel();//退出
		lblNewLabel4.setBounds(10, 313, 764, 43);
		lblNewLabel4.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel4.setFont(new Font("Adobe 黑体 Std R", Font.PLAIN, 21));
		lblNewLabel4.setForeground(new Color(200,200,200));
		mainMenu.add(lblNewLabel4);
		
		lblNewLabel5 = new JLabel(textLib.textData[5]);//底部提示
		lblNewLabel5.setBounds(10, 371, 764, 31);
		lblNewLabel5.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel5.setFont(new Font("Adobe 黑体 Std R", Font.PLAIN, 15));
		lblNewLabel5.setForeground(new Color(200,200,200));
		mainMenu.add(lblNewLabel5);
		
		lblNewLabel6 = new JLabel();//半透明黑背景
		lblNewLabel6.setBounds(267, 193, 250, 209);
		lblNewLabel6.setIcon(new ImageIcon("resource/mainMenuButtonBackGround.png"));
		mainMenu.add(lblNewLabel6);
		
		JLabel MenuBackGroundLabel = new JLabel();//白色背景
		MenuBackGroundLabel.setBounds(0, 0, 800, 450);
		MenuBackGroundLabel.setIcon(new ImageIcon("resource/mainMenuBackGround.png"));		
		mainMenu.add(MenuBackGroundLabel);
		
		reflash();
		
		
		
		//键盘监听器
		this.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				char cmd=e.getKeyChar();
				if(gamePhase==0)//开始菜单
				{
					if(sawExplain==false)
					{
						sawExplain=true;
						StartView sv=new StartView(testMenu);
						sv.setVisible(true);
						testMenu.setVisible(false);
					}
					else
					{
						if(TestWindowBuilder.charEqualsIgnoreCase(cmd, 'w'))
						{
							startMenuPointer[0]=(startMenuPointer[0]-1+allSMPCount)%allSMPCount;
							startNewSound("pointerMove.wav",false,1);
						}
						if(TestWindowBuilder.charEqualsIgnoreCase(cmd, 's'))
						{
							startMenuPointer[0]=(startMenuPointer[0]+1)%allSMPCount;
							startNewSound("pointerMove.wav",false,1);
						}
						reflash();
						if(TestWindowBuilder.charEqualsIgnoreCase(cmd, 'j'))
						{
							if(startMenuPointer[0]==0)
							{
								saveSelectMenu=new saveSelect(testMenu);
								saveSelectMenu.setVisible(true);
								testMenu.setVisible(false);
								startNewSound("menuChange.wav",false,1);
							}
							if(startMenuPointer[0]==1)
							{
								HelpMenu helpMenu=new HelpMenu(testMenu);
								helpMenu.setVisible(true);
								testMenu.setVisible(false);
								startNewSound("menuChange.wav",false,1);
							}
							if(startMenuPointer[0]==2)
							{
								settingMenu sMenu=new settingMenu(testMenu);
								sMenu.setVisible(true);
								testMenu.setVisible(false);
								startNewSound("menuChange.wav",false,1);
							}
							if(startMenuPointer[0]==3)
							{
								settingLanguage settingMenu=new settingLanguage(testMenu);
								settingMenu.setVisible(true);
								testMenu.setVisible(false);
								startNewSound("menuChange.wav",false,1);
							}
							if(startMenuPointer[0]==4)
							{
								startNewSound("menuChange.wav",false,1);
								System.exit(0);
							}
						}
					}
				}
			}
		});
	}

	public void reflash()
	{
		lblNewLabel1.setText(textLib.textData[1]);
		lblNewLabel2.setText(textLib.textData[6]);
		lblNewLabel3.setText(textLib.textData[3]);
		lblNewLabel3_2.setText(textLib.textData[60]);
		lblNewLabel3_1.setText(textLib.textData[49]);
		lblNewLabel4.setText(textLib.textData[4]);			
		lblNewLabel5.setText(textLib.textData[5]);					
		if(startMenuPointer[0]==0)
		{
			lblNewLabel2.setText(textLib.textData[6]+" <--");
		}
		if(startMenuPointer[0]==1)
		{
			lblNewLabel3.setText(textLib.textData[3]+" <--");
		}
		if(startMenuPointer[0]==2)
		{
			lblNewLabel3_2.setText(textLib.textData[60]+" <--");
		}
		if(startMenuPointer[0]==3)
		{
			lblNewLabel3_1.setText(textLib.textData[49]+" <--");
		}
		if(startMenuPointer[0]==4)
		{
			lblNewLabel4.setText(textLib.textData[4]+" <--");
		}
	}
	
	public void startNewMenuBGMusic(int prepare)
	{
		if(settingLib.settings[1].equals("1"))
		{
			if(menuBGMusic!=null)
				menuBGMusic.endMusic();
			menuBGMusic=new CMusic("menuMusic.wav",true,30000);
			menuBGMusic.start();
		}
		else if(prepare==1)
		{
			if(menuBGMusic!=null)
				menuBGMusic.endMusic();
			menuBGMusic=new CMusic("menuMusic.wav",true,30000);
			menuBGMusic.start();
			menuBGMusic.pauseMusic();
		}
	}
	
	public void startNewSound(String soundName,boolean isReplay,int replayDelay)//开启新音效
	{
		if(settingLib.settings[2].equals("1"))
			new CMusicLink(CMLLast,soundName,isReplay,replayDelay);
	}
	
	/**
	 * 判断字母a和字母b是否相同(无视大小写)
	 * @param a 字母a
	 * @param b 字母b
	 * @return true:字母a和字母b相同 | false:字母a和字母b不同,或ab中存在非字母
	 */
	public static boolean charEqualsIgnoreCase(char a,char b)
	{
		if(((int)a)>=65&&((int)a)<=90)//大写
		{
			if(a==b)
				return true;
			if(a+32==b)
				return true;
		}
		if(((int)a)>=97&&((int)a)<=122)//小写
		{
			if(a==b)
				return true;
			if(a-32==b)
				return true;
		}
		return false;
	}
}

键盘监听

public class KeyLininter extends KeyAdapter
{
	GameMenu gameMenu;
	
	public KeyLininter(GameMenu gameMenu)
	{
		this.gameMenu=gameMenu;
	}
	
	
	public void keyPressed(KeyEvent e) {
		char cmd = e.getKeyChar();
		if(cmd=='w'||cmd=='W')
		{
			gameMenu.pressingW=1;
		}
		if(cmd=='s'||cmd=='S')
		{
			gameMenu.pressingS=1;
		}
		if(cmd=='a'||cmd=='A')
		{
			gameMenu.pressingA=1;
		}
		if(cmd=='d'||cmd=='D')
		{
			gameMenu.pressingD=1;
		}
		if(cmd=='j'||cmd=='J')
		{
			gameMenu.pressingJ=1;
		}
		if(cmd=='k'||cmd=='K')
		{
			gameMenu.pressingK=1;
		}
	}
	public void keyReleased(KeyEvent e)
	{
		char cmd = e.getKeyChar();
		if(cmd=='w'||cmd=='W')
		{
			gameMenu.pressingW=0;
		}
		if(cmd=='s'||cmd=='S')
		{
			gameMenu.pressingS=0;
		}
		if(cmd=='a'||cmd=='A')
		{
			gameMenu.pressingA=0;
		}
		if(cmd=='d'||cmd=='D')
		{
			gameMenu.pressingD=0;
		}
		if(cmd=='j'||cmd=='J')
		{
			gameMenu.pressingJ=0;
		}
		if(cmd=='k'||cmd=='K')
		{
			gameMenu.pressingK=0;
		}
	}
}

核心算法

@SuppressWarnings("serial")
public class GameMenu extends JFrame {

	GameMenu thisMenu;
	private JPanel contentPane;
	TestWindowBuilder fatherMenu;
	boolean isCheating;
	CMusic battleBGM,questCompleteBGM;

	int pressingW;
	int pressingS;
	int pressingA;
	int pressingD;
	int pressingJ;
	int pressingK;
	
	int playingSave;
	int playingProfessionID;
	
	int g_int1;
	
	Role playingRole;
	double playerX;//0-734
	double playerY;//0-312
	int rotationSpeed=15;//旋转速度
	int movementSpeed=3;//移动速度
	int NormalSpeed=3;
	int attackSpeed=3;//攻击速度
	int activeCounter;
	int attackCounter;
	int defenceCounter=0;
	int perfectDefenceTime=0;//完美格挡剩余时间(在敌人发动攻击前0.1秒启动的格挡能让格挡所需体力消耗减少到原来的十分之一)
	int defenceCooldown=0;//格挡冷却 这样阻止了玩家疯狂地启动/停止格挡
	int playerWidth=50;
	int playerHeight=50;
	int gamePhaseTimeCounter=0;
	int gamePhaseTimeCounter2=0;
	int endPhase=6*4;//游戏通关的阶段
	/*第一关 0
	 * 第二关 6
	 * */
	int gamePhase=0;//游戏开始时的阶段(正常玩家从第一关开始打,阶段应当从0开始)
	
	String humanIconContorler;
	
	JPanel viewMap;
	
	//玩家有两个Label 一个在boss上方 一个在boss下方
	int usingPlayerLabel=0;
	JLabel[] playerLabel=new JLabel[2];
	
	JLabel lblNewLabel_6;
	JLabel lblNewLabel_7;
	JLabel[] GiantBackGround=new JLabel[400];
	JLabel bossLabel;
	JLabel lblNewLabel_2;
	JLabel lblNewLabel_3;
	JLabel lblNewLabel_2B;
	JLabel lblNewLabel_3B;
	JLabel MobHead;
	JLabel MobName;
	JLabel MobHPBar;
	JLabel MobHPText;
	JLabel TitleLabelT;
	JLabel SubTitleLabelT;
	JLabel TitleLabel;
	JLabel SubTitleLabel;
	JPanel Titles;
	JLabel placeNameLabel;
	JLabel groundArrayLabel;
	JLabel placeChangeBlack;//换场地时的黑幕
	JLabel placeChangeBlack_1;//换场地时的黑幕(用于属性条)

	
	int maxProCount=5000;
	JLabel[] proLabel=new JLabel[maxProCount];
	boolean[] proIsUsed=new boolean[maxProCount];
	proLink proHead=new proLink();
	int existProCount;
	
	int maxParCount=5000;
	JLabel[] parLabel=new JLabel[maxParCount];
	boolean[] parIsUsed=new boolean[maxParCount];
	parLink parHead=new parLink();
	int existParCount;
	
	int existPro=0;
	int proTeamPointer=0;//队列指针 0-499
	
	int existPar=0;
	int parTeamPointer=0;

	JPanel panel;
	
	Mob boss;
	
	int allPhaseCount=1;
	int gameTime=0;
	
	Map map;
	
	/**
	 * Create the frame.
	 */
	public GameMenu(TestWindowBuilder fatherMenu,boolean isCheating,int professionID,int partID,int playingSave)
	{
		this.setTitle("CARROT MAN II");
		this.setIconImage(new ImageIcon("resource/down4.png").getImage());
		for(int i=0;i784-playerWidth/2)
			playerX=784-playerWidth/2;
		if(playerY362-playerHeight/2)
			playerY=362-playerHeight/2;	
	}
	
	@SuppressWarnings("unused")
	public void saveData(int part)
	{
		if(Integer.parseInt(fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[1])0)
		{
			//刷新体力条
			lblNewLabel_3.setBounds(50, 25, (int) (200*playingRole.energy/playingRole.MaxEnergy), 25);
			lblNewLabel_3B.setText(""+(int)playingRole.energy+"/"+(int)playingRole.MaxEnergy);
			//刷新血条
			lblNewLabel_2.setBounds(50, 0, (int) (200*playingRole.HP/playingRole.MaxHP), 25);
			lblNewLabel_2B.setText(""+(int)playingRole.HP+"/"+(int)playingRole.MaxHP);			
		}
		else if(gamePhase!=-1)
		{
			boss.target=null;
			gamePhaseTimeCounter=0;
			gamePhase=-1;
			movementSpeed=0;
			TitleLabelT.setText("YOU DIED");
			TitleLabelT.setVisible(true);
			playerLabel[usingPlayerLabel].setVisible(false);
			lblNewLabel_6.setVisible(false);
			lblNewLabel_3.setBounds(50, 25, (int) (200*playingRole.energy/playingRole.MaxEnergy), 25);
			lblNewLabel_3B.setText(""+(int)playingRole.energy+"/"+(int)playingRole.MaxEnergy);
			lblNewLabel_2.setBounds(50, 0, (int) (200*playingRole.HP/playingRole.MaxHP), 25);
			lblNewLabel_2B.setText(""+(int)playingRole.HP+"/"+(int)playingRole.MaxHP);		
		}
		
		
		
		++gameTime;
		allProjectilesFly();
		allParticlesFly();
		if(gamePhase==0)
		{
			if(gamePhaseTimeCounter<50)
				gamePhaseTimeCounter=50;
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter==51)
			{
				System.out.println("启动控制台...");
				movementSpeed=0;
				placeChangeBlack.setBounds(0, 0, 784, 362);
				placeChangeBlack_1.setBounds(0, 0, 784, 362);
				placeChangeBlack.setVisible(true);
				placeChangeBlack_1.setVisible(true);
				TitleLabelT.setVisible(false);
				SubTitleLabelT.setVisible(false);
				groundArrayLabel.setVisible(false);
				for(int i=0;i<128;++i)//初始化第一关地面
				{
					String backGroundContorler="resource/ground";
					GiantBackGround[i].setBounds(50*(i%16),50*(int)(i/16), 50, 50);
					if(Math.random()<0.9)
						backGroundContorler=backGroundContorler+"1.png";
					else
						backGroundContorler=backGroundContorler+"2.png";
					GiantBackGround[i].setIcon(new ImageIcon(backGroundContorler));
				}
				playerX=50;
				playerY=200;
				placeNameLabel.setText(fatherMenu.textLib.textData[13]);
				TitleLabelT.setText(fatherMenu.textLib.textData[13]);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[37]);
				SubTitleLabelT.setVisible(true);
			}
			if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)
			{
				placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
				placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
			}
			if(gamePhaseTimeCounter==151)
			{
				startNewBattleBGM(1);
				placeChangeBlack.setVisible(false);
				placeChangeBlack_1.setVisible(false);
				gamePhaseTimeCounter=0;
				++gamePhase;
			}
		}
		if(gamePhase%6==1)
		{
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter>=200)
			{
				++gamePhase;
				TitleLabelT.setVisible(false);
				SubTitleLabelT.setVisible(false);
				movementSpeed=NormalSpeed;
			}
		}
		if(gamePhase==2)
		{
			gamePhaseTimeCounter=0;
			boss=new Mob(1,bossLabel,thisMenu);
			boss.reflash();
			bossLabel.setVisible(true);
			++gamePhase;
		}
		if(gamePhase==3)
		{
			if(boss.HP>0)
				boss.reflash();
			else
			{
				bossLabel.setVisible(false);
				MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);
				MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);
				++gamePhase;
				gamePhaseTimeCounter=0;
				TitleLabelT.setText(fatherMenu.textLib.textData[38]);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);
				SubTitleLabelT.setVisible(true);
				saveData(2);
				startQuestCompleteBGM();
				endBattleBGM();
			}
		}
		if(gamePhase%6==4)
		{
			playingRole.percentReHP(0.005);
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter>200)
			{
				gamePhaseTimeCounter=0;
				++gamePhase;
				TitleLabelT.setText(fatherMenu.textLib.textData[40]);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[41]);
				SubTitleLabelT.setVisible(true);
				gamePhaseTimeCounter2=0;
			}
		}
		if(gamePhase%6==5)
		{
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter2==0)
			{
				if(gamePhaseTimeCounter>50)
				{
					groundArrayLabel.setVisible(true);
					if(playerX>709&&playerX<759&&playerY>156&&playerY<206)//进入箭头
					{
						gamePhaseTimeCounter=0;
						gamePhaseTimeCounter2=1;
						movementSpeed=0;
						placeChangeBlack.setBounds(-784,0,784,362);
						placeChangeBlack.setVisible(true);
						placeChangeBlack_1.setBounds(-784,0,784,362);
						placeChangeBlack_1.setVisible(true);
					}
				}
			}
			if(gamePhaseTimeCounter2==1)
			{
				if(gamePhaseTimeCounter>=0&&gamePhaseTimeCounter<=50)
				{
					placeChangeBlack.setBounds((int)(gamePhaseTimeCounter*0.02*784-784), 0, 784, 362);
					placeChangeBlack_1.setBounds((int)(gamePhaseTimeCounter*0.02*784-784), 0, 784, 362);
				}
				if(gamePhaseTimeCounter==51)
				{
					++gamePhase;
					gamePhaseTimeCounter=0;
				}
			}
		}
		if(gamePhase==6)
		{
			movementSpeed=0;
			if(gamePhaseTimeCounter<50)
				gamePhaseTimeCounter=50;
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter==51)
			{
				placeChangeBlack.setBounds(0, 0, 784, 362);
				placeChangeBlack.setVisible(true);
				placeChangeBlack_1.setBounds(0, 0, 784, 362);
				placeChangeBlack_1.setVisible(true);
				TitleLabelT.setVisible(false);
				SubTitleLabelT.setVisible(false);
				groundArrayLabel.setVisible(false);
				for(int i=0;i<325;++i)
				{
					GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);
					GiantBackGround[i].setIcon(new ImageIcon("resource/ground6.png"));
				}
				playerX=50;
				playerY=200;
				placeNameLabel.setText(fatherMenu.textLib.textData[14]);
				TitleLabelT.setText(fatherMenu.textLib.textData[14]);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[42]);
				SubTitleLabelT.setVisible(true);
			}
			if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)
			{
				placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
				placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
			}
			if(gamePhaseTimeCounter==151)
			{
				startNewBattleBGM(2);
				placeChangeBlack.setVisible(false);
				placeChangeBlack_1.setVisible(false);
				gamePhaseTimeCounter=0;
				++gamePhase;
			}
		}
		if(gamePhase==8)
		{
			gamePhaseTimeCounter=0;
			boss=new Mob(2,bossLabel,thisMenu);
			bossLabel.setBounds(375, 175, 100, 100);
			boss.reflash();
			bossLabel.setVisible(true);
			++gamePhase;
		}
		if(gamePhase==9)
		{
			if(boss.HP>0)
				boss.reflash();
			else
			{
				bossLabel.setVisible(false);
				MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);
				MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);
				++gamePhase;
				gamePhaseTimeCounter=0;
				TitleLabelT.setText(fatherMenu.textLib.textData[43]);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);
				SubTitleLabelT.setVisible(true);
				saveData(3);
				startQuestCompleteBGM();
				endBattleBGM();
			}
		}
		if(gamePhase==12)
		{
			movementSpeed=0;
			if(gamePhaseTimeCounter<50)
				gamePhaseTimeCounter=50;
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter==51)
			{
				placeChangeBlack.setBounds(0, 0, 784, 362);
				placeChangeBlack.setVisible(true);
				placeChangeBlack_1.setBounds(0, 0, 784, 362);
				placeChangeBlack_1.setVisible(true);
				TitleLabelT.setVisible(false);
				SubTitleLabelT.setVisible(false);
				groundArrayLabel.setVisible(false);
				for(int i=0;i<325;++i)
				{
					GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);
					GiantBackGround[i].setIcon(new ImageIcon("resource/ground7.png"));
				}
				playerX=50;
				playerY=200;
				placeNameLabel.setText(fatherMenu.textLib.textData[15]);
				TitleLabelT.setText(fatherMenu.textLib.textData[15]);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[44]);
				SubTitleLabelT.setVisible(true);
			}
			if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)
			{
				placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
				placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
			}
			if(gamePhaseTimeCounter==151)
			{
				startNewBattleBGM(3);
				placeChangeBlack.setVisible(false);
				placeChangeBlack_1.setVisible(false);
				gamePhaseTimeCounter=0;
				++gamePhase;
			}
		}
		if(gamePhase==14)
		{
			gamePhaseTimeCounter=0;
			boss=new Mob(3,bossLabel,thisMenu);
			bossLabel.setBounds(375, 175, 100, 100);
			boss.reflash();
			bossLabel.setVisible(true);
			++gamePhase;
		}
		if(gamePhase==15)
		{
			if(boss.HP>0)
				boss.reflash();
			else
			{
				bossLabel.setVisible(false);
				MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);
				MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);
				++gamePhase;
				gamePhaseTimeCounter=0;
				TitleLabelT.setText(fatherMenu.textLib.textData[45]);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);
				SubTitleLabelT.setVisible(true);
				saveData(4);
				startQuestCompleteBGM();
				endBattleBGM();
			}
		}
		if(gamePhase==18)
		{
			movementSpeed=0;
			if(gamePhaseTimeCounter<50)
				gamePhaseTimeCounter=50;
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter==51)
			{
				placeChangeBlack.setBounds(0, 0, 784, 362);
				placeChangeBlack.setVisible(true);
				placeChangeBlack_1.setBounds(0, 0, 784, 362);
				placeChangeBlack_1.setVisible(true);
				TitleLabelT.setVisible(false);
				SubTitleLabelT.setVisible(false);
				groundArrayLabel.setVisible(false);
				//需要修改开始
				for(int i=0;i<325;++i)
				{
					GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);
					GiantBackGround[i].setIcon(new ImageIcon("resource/ground8.png"));
				}
				//需要修改结束
				playerX=50;
				playerY=200;
				//需要修改开始
				placeNameLabel.setText(fatherMenu.textLib.textData[70]);
				TitleLabelT.setText(fatherMenu.textLib.textData[70]);
				TitleLabelT.setForeground(Color.LIGHT_GRAY);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[71]);
				SubTitleLabelT.setForeground(Color.LIGHT_GRAY);
				//需要修改结束
				SubTitleLabelT.setVisible(true);
			}
			if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)
			{
				placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
				placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);
			}
			if(gamePhaseTimeCounter==151)
			{
				startNewBattleBGM(4);//需要修改
				placeChangeBlack.setVisible(false);
				placeChangeBlack_1.setVisible(false);
				gamePhaseTimeCounter=0;
				++gamePhase;
			}
		}
		if(gamePhase==20)
		{
			gamePhaseTimeCounter=0;
			boss=new Mob(4,bossLabel,thisMenu);//需要修改
			bossLabel.setBounds(375, 175, 100, 100);//需要修改
			boss.reflash();
			bossLabel.setVisible(true);
			++gamePhase;
		}
		if(gamePhase==21)
		{
			if(boss.HP>0)
				boss.reflash();
			else
			{
				bossLabel.setVisible(false);
				MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);
				MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);
				++gamePhase;
				gamePhaseTimeCounter=0;
				//需要修改开始
				TitleLabelT.setText(fatherMenu.textLib.textData[72]);
				TitleLabelT.setForeground(Color.LIGHT_GRAY);
				TitleLabelT.setVisible(true);
				SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);
				TitleLabelT.setForeground(Color.LIGHT_GRAY);
				SubTitleLabelT.setVisible(true);
				//saveData(4);
				//需要修改完成
				startQuestCompleteBGM();
				endBattleBGM();
			}
		}
		if(gamePhase==endPhase)
		{
			endBattleBGM();
			winMenu WM=new winMenu(thisMenu);
			WM.setVisible(true);
			thisMenu.setVisible(false);
			map.stop();
		}
		if(gamePhase==-1)
		{
			if(boss.HP>0)
				boss.reflash();
			++gamePhaseTimeCounter;
			if(gamePhaseTimeCounter>250)
			{
				endBattleBGM();
				loseMenu LM=new loseMenu(thisMenu);
				LM.setVisible(true);
				thisMenu.setVisible(false);
				map.stop();
			}
		}
		
		//刷新bossBar
		if(boss!=null&&gamePhase%6==3)
		{
			MobHead.setIcon(new ImageIcon("resource/MobHead_"+boss.MobId+".png"));
			MobName.setText(""+boss.Name);
			MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);
			MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);
		}
		
		//玩家试图面向方向
		if(attackCounter==0&&defenceCounter==0)
		{
			if(pressingD==1&&pressingW==0&&pressingS==0)
			{
				playingRole.tryingFace=0;
			}
			else if(pressingD==1&&pressingW==1)
			{
				playingRole.tryingFace=45;
			}
			else if(pressingW==1&&pressingA==0&&pressingD==0)
			{
				playingRole.tryingFace=90;
			}
			else if(pressingW==1&&pressingA==1)
			{
				playingRole.tryingFace=135;
			}
			else if(pressingA==1&&pressingW==0&&pressingS==0)
			{
				playingRole.tryingFace=180;
			}
			else if(pressingA==1&&pressingS==1)
			{
				playingRole.tryingFace=225;
			}
			else if(pressingS==1&&pressingA==0&&pressingD==0)
			{
				playingRole.tryingFace=270;
			}
			else if(pressingS==1&&pressingD==1)
			{
				playingRole.tryingFace=315;
			}
		}
		
		playingRole.setFace();
		humanIconContorler="resource/human_"+playingRole.face;
		
		if(attackCounter==0&&defenceCounter==0&&(pressingW==1||pressingS==1||pressingA==1||pressingD==1))//进行转向
		{
			double d_angle=(playingRole.facingAngle-playingRole.tryingFace+360)%360;//0-180为顺时针
			if(d_angle<=rotationSpeed||d_angle>=360-rotationSpeed)//旋转功能
			{
				playingRole.facingAngle=playingRole.tryingFace;
			}
			else
			{
				if(d_angle>0&&d_angle<=180)
				{
					playingRole.facingAngle-=rotationSpeed;
				}
				else
				{
					playingRole.facingAngle+=rotationSpeed;
				}
			}
		}
		
		
		
		if(attackCounter==0&&defenceCounter==0&&(pressingW==1||pressingS==1||pressingA==1||pressingD==1))//进行移动
		{
			++activeCounter;
			playerX+=(int)(movementSpeed*Math.cos(playingRole.facingAngle*Math.PI/180));
			playerY-=(int)(movementSpeed*Math.sin(playingRole.facingAngle*Math.PI/180));
			checkPlayerLocation();
			if(activeCounter>=10)//10Tick一次 切换移动图片
			{
				activeCounter=0;
				playingRole.lastMoveActive=(playingRole.lastMoveActive+1)%4;
			}
			if(playingRole.lastMoveActive==2)
				humanIconContorler=humanIconContorler+'_'+0;
			else if(playingRole.lastMoveActive==3)
				humanIconContorler=humanIconContorler+'_'+2;
			else
				humanIconContorler=humanIconContorler+'_'+playingRole.lastMoveActive;
		}
		
		if(pressingJ==1&&attackCounter==0&&defenceCounter==0&&playingRole.HP>0)//发动攻击
		{
			attackCounter=1;
		}
		
		if(attackCounter>0&&attackCounter<=8*attackSpeed)//正在攻击
		{
			++attackCounter;
			if(attackCounter>0&&attackCounter<=attackSpeed)
			{
				humanIconContorler=humanIconContorler+'_'+3;
			}
			else if(attackCounter<=2*attackSpeed)
			{
				humanIconContorler=humanIconContorler+'_'+4;
			}
			else if(attackCounter<=3*attackSpeed)
			{
				humanIconContorler=humanIconContorler+'_'+5;
			}
			else if(attackCounter<=4*attackSpeed)
			{
				humanIconContorler=humanIconContorler+'_'+6;
			}
			else if(attackCounter<=5*attackSpeed)
			{
				humanIconContorler=humanIconContorler+'_'+7;
			}
			else if(attackCounter<=6*attackSpeed)
			{
				humanIconContorler=humanIconContorler+'_'+8;
			}
			else if(attackCounter<=7*attackSpeed)
			{
				humanIconContorler=humanIconContorler+'_'+9;
			}
		}

		if(attackCounter==3*attackSpeed)//完成攻击
		{
			playingRole.costEnergy(10);
			fatherMenu.startNewSound("sweep"+Calculator.randomInt(1,3)+".wav",false,1);
			playingRole.doAttack();
		}
		if(attackCounter>8*attackSpeed)//结束硬直
		{
			attackCounter=0;
		}
		
		
		if(defenceCooldown>0)
		{
			--defenceCooldown;
		}
		if(perfectDefenceTime>0)
		{
			--perfectDefenceTime;
		}
		if(pressingK==1&&attackCounter==0&&defenceCounter==0&&defenceCooldown==0)//发动防御
		{
			perfectDefenceTime=5;
			defenceCounter=1;
			playingRole.defenceStance=true;
			playingRole.isBlocked=false;
		}
		if(defenceCounter==1)
		{
			if(pressingK==0)//解除格挡
			{
				defenceCounter=0;
				playingRole.defenceStance=false;
				if(playingRole.isBlocked==true)
					defenceCooldown=0;
				else
					defenceCooldown=30;
			}
			else
			{
				humanIconContorler=humanIconContorler+'_'+10;
			}
		}
		
		humanIconContorler=humanIconContorler+".png";
		if(boss!=null&&playingRole.HP>0)
		{
			if(playerY>=boss.bossY&&usingPlayerLabel==0)//玩家应当盖住boss,但是却没盖住
			{
				usingPlayerLabel=1;
				playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);
				playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);
				playerLabel[0].setVisible(false);
				playerLabel[1].setVisible(true);
			}
			if(playerY 
 

总结

通过此次的《萝卜勇者》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

以上就是Java实现萝卜勇者游戏的示例代码的详细内容,更多关于Java萝卜勇者的资料请关注脚本之家其它相关文章!

你可能感兴趣的:(Java实现萝卜勇者游戏的示例代码)