Java實(shí)現(xiàn)蘿卜勇者游戲的示例代碼
前言
《蘿卜勇者》是由國內(nèi)玩家自制的一款獨(dú)立游戲,玩家扮演蘿卜勇士闖關(guān),打敗各種邪惡的敵人,獲得最后的勝利。
《蘿卜勇者》游戲是用java語言實(shí)現(xiàn),采用了swing技術(shù)進(jìn)行了界面化處理,設(shè)計(jì)思路用了面向?qū)ο笏枷搿?/p>
主要需求
參考《蘿卜勇者》的劇情,實(shí)現(xiàn)JAVA版本的單機(jī)游戲。
主要設(shè)計(jì)
1、 用Swing庫做可視化界面
2、鍵盤監(jiān)聽,用WSAD可以控制光標(biāo)移動(dòng),J是確定,K是取消,游戲中,WSAD移動(dòng),J攻擊,K格擋。
3、 用線程實(shí)現(xiàn)畫面刷新。
4、用流實(shí)現(xiàn)音樂播放。
5、支持多種語言,支持用戶翻譯語言文件。
6、在幫助界面下,按鍵盤1234567890可以啟用秘籍(傳奇模式:一刀砍999血)
7、使用的是JDK8
8、文件編碼GBK
功能截圖
游戲開始

游戲幫助

游戲設(shè)置

選擇不同的關(guān)卡

游戲效果

怪物攻擊效果

代碼實(shí)現(xiàn)
啟動(dòng)類
@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("啟動(dòng)控制臺(tái)222...");
CMLHead.next=CMLLast;
CMLLast.prev=CMLHead;
settingLib=new settingLoader();
settingLib.loadSetting();//加載設(shè)置
settingLib.saveSetting();
textLib=new TextLibrary();
textLib.saveText();//創(chuàng)建默認(rèn)的語言文件
textLib.loadText(settingLib.settings[0]);
startNewMenuBGMusic(1);
/*游戲階段:
* 0開始菜單
* */
int gamePhase=0;
isCheating=false;
/*開始菜單指針
* 0開始
* 1幫助
* 2退出
* */
startMenuPointer[0]=0;
int allSMPCount=5;//總指針數(shù)
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();//菜單標(biāo)題
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();//設(shè)置
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();
//鍵盤監(jiān)聽器
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;
}
}鍵盤監(jiān)聽
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;//旋轉(zhuǎn)速度
int movementSpeed=3;//移動(dòng)速度
int NormalSpeed=3;
int attackSpeed=3;//攻擊速度
int activeCounter;
int attackCounter;
int defenceCounter=0;
int perfectDefenceTime=0;//完美格擋剩余時(shí)間(在敵人發(fā)動(dòng)攻擊前0.1秒啟動(dòng)的格擋能讓格擋所需體力消耗減少到原來的十分之一)
int defenceCooldown=0;//格擋冷卻 這樣阻止了玩家瘋狂地啟動(dòng)/停止格擋
int playerWidth=50;
int playerHeight=50;
int gamePhaseTimeCounter=0;
int gamePhaseTimeCounter2=0;
int endPhase=6*4;//游戲通關(guān)的階段
/*第一關(guān) 0
* 第二關(guān) 6
* */
int gamePhase=0;//游戲開始時(shí)的階段(正常玩家從第一關(guān)開始打,階段應(yīng)當(dāng)從0開始)
String humanIconContorler;
JPanel viewMap;
//玩家有兩個(gè)Label 一個(gè)在boss上方 一個(gè)在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;//換場地時(shí)的黑幕
JLabel placeChangeBlack_1;//換場地時(shí)的黑幕(用于屬性條)
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;//隊(duì)列指針 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;i<proIsUsed.length;++i)
proIsUsed[i]=false;
for(int i=0;i<parIsUsed.length;++i)
parIsUsed[i]=false;
playingProfessionID=professionID;
this.playingSave=playingSave;
gamePhase=(partID-1)*6;
this.fatherMenu=fatherMenu;
this.isCheating=isCheating;
//this.isCheating=true;//測試用
g_int1=0;
playerX=50;
playerY=200;
thisMenu=this;
activeCounter=0;
attackCounter=0;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(fatherMenu.getBounds());
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//轉(zhuǎn)場黑幕 第100層
placeChangeBlack=new JLabel("");
placeChangeBlack.setIcon(new ImageIcon("resource/black.png"));
placeChangeBlack.setVisible(true);
placeChangeBlack_1=new JLabel("");
placeChangeBlack_1.setIcon(new ImageIcon("resource/black.png"));
placeChangeBlack_1.setVisible(true);
placeChangeBlack.setBounds(0, 0, 784, 362);
placeChangeBlack_1.setBounds(0, 0, 784, 362);
//contentPane.add(placeChangeBlack);
JPanel panel_1 = new JPanel();
panel_1.setBounds(0, 0, 784, 50);
contentPane.add(panel_1);
panel_1.setLayout(null);
panel_1.add(placeChangeBlack_1);
JLabel lblNewLabel = new JLabel("");//頭像
lblNewLabel.setBounds(0, 0, 50, 50);
lblNewLabel.setIcon(new ImageIcon("resource/HPBarHead.png"));
panel_1.add(lblNewLabel);
lblNewLabel_2B = new JLabel("");//血量字
lblNewLabel_2B.setForeground(Color.WHITE);
lblNewLabel_2B.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2B.setBounds(50, 0, 200, 25);
panel_1.add(lblNewLabel_2B);
lblNewLabel_3B = new JLabel("");//體力字
lblNewLabel_3B.setForeground(Color.WHITE);
lblNewLabel_3B.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_3B.setBounds(50, 25, 200, 25);
panel_1.add(lblNewLabel_3B);
lblNewLabel_2 = new JLabel("");//血條
lblNewLabel_2.setBounds(50, 0, 200, 25);
lblNewLabel_2.setIcon(new ImageIcon("resource/RedBar.png"));
panel_1.add(lblNewLabel_2);
lblNewLabel_3 = new JLabel("");//體力條
lblNewLabel_3.setBounds(50, 25, 200, 25);
lblNewLabel_3.setIcon(new ImageIcon("resource/GreenBar.png"));
panel_1.add(lblNewLabel_3);
JLabel lblNewLabel_1 = new JLabel("");//血條體力條背景
lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_1.setBounds(50, 0, 200, 50);
lblNewLabel_1.setIcon(new ImageIcon("resource/HPBarBG.png"));
panel_1.add(lblNewLabel_1);
JLabel lblNewLabel_4 = new JLabel("J");
lblNewLabel_4.setForeground(Color.GRAY);
lblNewLabel_4.setFont(new Font("黑體", Font.BOLD, 30));
lblNewLabel_4.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_4.setBounds(250, 0, 50, 50);
panel_1.add(lblNewLabel_4);
JLabel lblNewLabel_5 = new JLabel("");
lblNewLabel_5.setFont(new Font("宋體", Font.PLAIN, 20));
lblNewLabel_5.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_5.setBounds(250, 0, 50, 50);
lblNewLabel_5.setIcon(new ImageIcon("resource/skillJ.png"));
panel_1.add(lblNewLabel_5);
JLabel skillKLabel = new JLabel("K");
skillKLabel.setForeground(Color.GRAY);
skillKLabel.setFont(new Font("黑體", Font.BOLD, 30));
skillKLabel.setHorizontalAlignment(SwingConstants.CENTER);
skillKLabel.setBounds(300, 0, 50, 50);
panel_1.add(skillKLabel);
JLabel skillKLabel2 = new JLabel("");
skillKLabel2.setFont(new Font("宋體", Font.PLAIN, 20));
skillKLabel2.setHorizontalAlignment(SwingConstants.CENTER);
skillKLabel2.setBounds(300, 0, 50, 50);
skillKLabel2.setIcon(new ImageIcon("resource/skillK.png"));
panel_1.add(skillKLabel2);
placeNameLabel = new JLabel("");
placeNameLabel.setFont(new Font("宋體", Font.PLAIN, 30));
placeNameLabel.setHorizontalAlignment(SwingConstants.CENTER);
placeNameLabel.setBounds(350, 0, 200, 50);
panel_1.add(placeNameLabel);
JLabel placeNameLabel2 = new JLabel("");
placeNameLabel2.setHorizontalAlignment(SwingConstants.CENTER);
placeNameLabel2.setBounds(350, 0, 200, 50);
placeNameLabel2.setIcon(new ImageIcon("resource/placeNameBackGround.png"));
panel_1.add(placeNameLabel2);
MobHead = new JLabel("");
MobHead.setHorizontalAlignment(SwingConstants.CENTER);
MobHead.setBounds(550, 0, 50, 50);
MobHead.setIcon(new ImageIcon("resource/MobHead_0.png"));
panel_1.add(MobHead);
MobName = new JLabel("");
MobName.setHorizontalAlignment(SwingConstants.CENTER);
MobName.setBounds(600, 0, 184, 25);
panel_1.add(MobName);
MobHPText = new JLabel("");
MobHPText.setForeground(Color.WHITE);
MobHPText.setHorizontalAlignment(SwingConstants.CENTER);
MobHPText.setBounds(600, 25, 184, 25);
panel_1.add(MobHPText);
MobHPBar = new JLabel("");
MobHPBar.setHorizontalAlignment(SwingConstants.CENTER);
MobHPBar.setBounds(600, 25, 184, 25);
MobHPBar.setIcon(new ImageIcon("resource/RedBar.png"));
panel_1.add(MobHPBar);
JLabel MobNameBG = new JLabel("");
MobNameBG.setHorizontalAlignment(SwingConstants.CENTER);
MobNameBG.setBounds(600, 0, 184, 50);
MobNameBG.setIcon(new ImageIcon("resource/MobNameBG.png"));
panel_1.add(MobNameBG);
panel = new JPanel();
panel.setBounds(0, 50, 784, 362);
contentPane.add(panel);
viewMap=panel;
panel.setLayout(null);
panel.add(placeChangeBlack);
lblNewLabel_7 = new JLabel("");//玩家tryingFace指示器(暫時(shí)停用)
lblNewLabel_7.setBounds((int)playerX, (int)playerY, 5, 5);
lblNewLabel_7.setIcon(new ImageIcon("resource/moveDeraction2.png"));
lblNewLabel_7.setVisible(false);
panel.add(lblNewLabel_7);
//第99層
//標(biāo)題
TitleLabelT = new JLabel("");
TitleLabelT.setFont(new Font("黑體", Font.PLAIN, 45));
TitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);
TitleLabelT.setBounds(100, 50, 584, 50);
TitleLabelT.setVisible(true);
panel.add(TitleLabelT);
//副標(biāo)題
SubTitleLabelT = new JLabel("");
SubTitleLabelT.setFont(new Font("黑體", Font.PLAIN, 25));
SubTitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);
SubTitleLabelT.setBounds(100, 100, 584, 50);
SubTitleLabelT.setVisible(true);
panel.add(SubTitleLabelT);
//預(yù)先創(chuàng)建粒子效果的Label,第6層
for(int i=0;i<maxParCount;++i)
{
parLabel[i]=new JLabel("");
panel.add(parLabel[i]);
}
//boss上方的玩家,第5層
playerLabel[1]=new JLabel("");
playerLabel[1].setHorizontalAlignment(SwingConstants.CENTER);
playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerHeight, playerWidth);
playerLabel[1].setIcon(new ImageIcon("resource/HumanRight_0.png"));
playerLabel[1].setVisible(false);
panel.add(playerLabel[1]);
//bossLabel,第4.5層
bossLabel = new JLabel("");
panel.add(bossLabel);
//boss下方的玩家,第4層
playerLabel[0]=new JLabel("");
playerLabel[0].setHorizontalAlignment(SwingConstants.CENTER);
playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerHeight, playerWidth);
playerLabel[0].setIcon(new ImageIcon("resource/HumanRight_0.png"));
playerLabel[0].setVisible(true);
panel.add(playerLabel[0]);
//玩家面向方向指示器,第3層
lblNewLabel_6 = new JLabel("");
lblNewLabel_6.setBounds((int)playerX, (int)playerY, 5, 5);
lblNewLabel_6.setIcon(new ImageIcon("resource/moveDeraction.png"));
panel.add(lblNewLabel_6);
//預(yù)先創(chuàng)建發(fā)射物的Label,第2層
for(int i=0;i<maxProCount;++i)
{
proLabel[i]=new JLabel("");
panel.add(proLabel[i]);
}
//創(chuàng)建地面箭頭,第1.5層
groundArrayLabel=new JLabel("");
groundArrayLabel.setBounds(709,156, 50, 50);
groundArrayLabel.setIcon(new ImageIcon("resource/groundArray.png"));
groundArrayLabel.setVisible(false);
panel.add(groundArrayLabel);
//創(chuàng)建地面Label,第1層
for(int i=0;i<400;++i)
{
GiantBackGround[i]=new JLabel("");
GiantBackGround[i].setVisible(true);
panel.add(GiantBackGround[i]);
}
playingRole=new Role(professionID,thisMenu);
KeyLininter kl=new KeyLininter(thisMenu);
this.addKeyListener(kl);
map=new Map(thisMenu);
map.start();
}
//發(fā)射物相關(guān)
public int addProjectile(Projectile pro)
{
existProCount=proHead.getLength();
if(existProCount<maxProCount)
{
proHead.insert(new proLink(pro));
int tempFinder=0;
for(int i=0;i<maxProCount;++i)
{
if(proIsUsed[i]==false)
{
proIsUsed[i]=true;
tempFinder=i;
break;
}
}
return tempFinder;
}
return -1;
}
public void removeProjectile(int id)
{
proLabel[id].setVisible(false);
proIsUsed[id]=false;
}
public void allProjectilesFly()
{
proLink tempNode=proHead;
while(tempNode.next!=null)
{
tempNode=tempNode.next;
tempNode.data.doFly();
}
}
//發(fā)射物相關(guān)結(jié)束
//粒子效果相關(guān)
public int addParticle(particle par)
{
existParCount=parHead.getLength();
if(existParCount<maxParCount)
{
parHead.insert(new parLink(par));
int tempFinder=0;
for(int i=0;i<maxParCount;++i)
{
if(parIsUsed[i]==false)
{
parIsUsed[i]=true;
tempFinder=i;
break;
}
}
return tempFinder;
}
return -1;
}
public void removeParticle(int id)
{
parLabel[id].setVisible(false);
parIsUsed[id]=false;
}
public void allParticlesFly()
{
parLink tempNode=parHead;
while(tempNode.next!=null)
{
tempNode=tempNode.next;
tempNode.data.doFly();
}
}
public void checkPlayerLocation()//檢測玩家位置 如果超出地圖 則拉回地圖
{
if(playerX<playerWidth/2)
playerX=playerWidth/2;
if(playerX>784-playerWidth/2)
playerX=784-playerWidth/2;
if(playerY<playerHeight/2)
playerY=playerHeight/2;
if(playerY>362-playerHeight/2)
playerY=362-playerHeight/2;
}
@SuppressWarnings("unused")
public void saveData(int part)
{
if(Integer.parseInt(fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[1])<part)
{
String[] temp= {
fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[0],
fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[1]
};
fatherMenu.saveSelectMenu.savedData[playingSave]=""+playingProfessionID+" "+part;
fatherMenu.saveSelectMenu.saveSaves();
}
}
@SuppressWarnings({ "deprecation" })
public void modTick()//每秒執(zhí)行50次
{
if(attackCounter==0&&defenceCounter==0)
playingRole.regenerate();
if(playingRole.HP>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("啟動(dòng)控制臺(tái)...");
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)//初始化第一關(guān)地面
{
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)//進(jìn)入箭頭
{
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"));
}
//需要修改結(jié)束
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);
//需要修改結(jié)束
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))//進(jìn)行轉(zhuǎn)向
{
double d_angle=(playingRole.facingAngle-playingRole.tryingFace+360)%360;//0-180為順時(shí)針
if(d_angle<=rotationSpeed||d_angle>=360-rotationSpeed)//旋轉(zhuǎn)功能
{
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))//進(jìn)行移動(dòng)
{
++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一次 切換移動(dòng)圖片
{
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)//發(fā)動(dòng)攻擊
{
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)//結(jié)束硬直
{
attackCounter=0;
}
if(defenceCooldown>0)
{
--defenceCooldown;
}
if(perfectDefenceTime>0)
{
--perfectDefenceTime;
}
if(pressingK==1&&attackCounter==0&&defenceCounter==0&&defenceCooldown==0)//發(fā)動(dòng)防御
{
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)//玩家應(yīng)當(dāng)蓋住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<boss.bossY&&usingPlayerLabel==1)//boss應(yīng)當(dāng)蓋住玩家,但是卻沒蓋住
{
usingPlayerLabel=0;
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(true);
playerLabel[1].setVisible(false);
}
}
playerLabel[usingPlayerLabel].setIcon(new ImageIcon(humanIconContorler));
playerLabel[usingPlayerLabel].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);
lblNewLabel_6.setBounds((int)playerX+(int)(25*Math.cos(playingRole.facingAngle*Math.PI/180))-2, (int)playerY-(int)(25*Math.sin(playingRole.facingAngle*Math.PI/180))-2, 4,4);
lblNewLabel_7.setBounds((int)playerX+(int)(25*Math.cos(playingRole.tryingFace*Math.PI/180))-2, (int)playerY-(int)(25*Math.sin(playingRole.tryingFace*Math.PI/180))-2, 4,4);
}
public void startNewBattleBGM(int bossID)
{
if(fatherMenu.settingLib.settings[1].equals("1"))
{
if(battleBGM!=null)
battleBGM.endMusic();
battleBGM=new CMusic("boss"+bossID+".wav",true,1);
battleBGM.start();
}
}
public void endBattleBGM()
{
if(battleBGM!=null)
battleBGM.endMusic();
}
public void startQuestCompleteBGM()
{
if(questCompleteBGM!=null)
questCompleteBGM.endMusic();
questCompleteBGM=new CMusic("QuestComplete.wav",false,1);
questCompleteBGM.start();
}
}總結(jié)
通過此次的《蘿卜勇者》游戲?qū)崿F(xiàn),讓我對swing的相關(guān)知識有了進(jìn)一步的了解,對java這門語言也有了比以前更深刻的認(rèn)識。
java的一些基本語法,比如數(shù)據(jù)類型、運(yùn)算符、程序流程控制和數(shù)組等,理解更加透徹。java最核心的核心就是面向?qū)ο笏枷?,對于這一個(gè)概念,終于悟到了一些。
以上就是Java實(shí)現(xiàn)蘿卜勇者游戲的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Java蘿卜勇者的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java ThreadPoolExecutor線程池拒絕策略避坑
這篇文章主要為大家介紹了java ThreadPoolExecutor拒絕策略避坑踩坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Spring數(shù)據(jù)庫事務(wù)的實(shí)現(xiàn)機(jī)制講解
這篇文章主要介紹了Spring數(shù)據(jù)庫事務(wù)的實(shí)現(xiàn)機(jī)制講解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
JavaFx實(shí)現(xiàn)登錄成功跳轉(zhuǎn)到程序主頁面
這篇文章主要為大家詳細(xì)介紹了JavaFx實(shí)現(xiàn)登錄成功跳轉(zhuǎn)到程序主頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
java線程并發(fā)countdownlatch類使用示例
javar的CountDownLatch是個(gè)計(jì)數(shù)器,它有一個(gè)初始數(shù),等待這個(gè)計(jì)數(shù)器的線程必須等到計(jì)數(shù)器倒數(shù)到零時(shí)才可繼續(xù)。2014-01-01

