?? myplayer.java
字號(hào):
package obj;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.io.*;
import main.*;
import java.util.*;
public class MyPlayer extends Sprite{
private int w,h;//屏幕的寬高
private int viewx=0, viewy=0;//屏幕的坐標(biāo)。
private int mapw,maph;//底圖的寬高。
private int player_x=0;//玩家的位置
private int player_y=0;
private String playerName;
public int playerLevel;//等級(jí)
public int playerHp;
public int playerMp;
public int playerEx;//經(jīng)驗(yàn)
public int playerHit;//攻
public int playerRecovery;//防
public boolean playerBooty=false;//獲得戰(zhàn)利品。
private int playerMoney;
private int playerMaxHp;
private int playerMaxMp;
private int playerNextEx;//經(jīng)驗(yàn)
private int imgw=0;//玩家圖片大小
private int imgh=0;
private Image speakImg;//說話的圖片
private int speakx;
private int speaky;
int temp_a=0;//這三個(gè)數(shù)記錄按1鍵的次數(shù)。
int temp_b=0;
int pressA_Num=1;
private boolean speakSure=false;//按1確認(rèn)說話。
private boolean hitNpcOk=false;
private boolean showBuyGrid=false;//顯示買賣的窗口。
private int BuyGridxPos=0,BuyGridyPos=15;//交易窗口的坐標(biāo)
private Cur cur; ///顯示買賣的窗口時(shí)的圖標(biāo)。
private boolean curSwap=false;
private boolean hitDrugstore=false;//是否與藥店的人相碰
private boolean hitSmith=false;//是否與鐵匠相碰。
Random r=new Random();
int speak_Num=-1;//npc選取那個(gè)話說。
public boolean isWarfare=false;//戰(zhàn)斗狀態(tài)。
private int speed;//速度
private boolean isShowGrid=false;//是否顯示物品欄。
int sx,sy;//玩家移動(dòng)時(shí)的坐標(biāo)變化量。在圖片移動(dòng)時(shí):因?yàn)橐傆?所以放在外面,不用每次都創(chuàng)建
private int step=0;//運(yùn)動(dòng)圖片的變化計(jì)數(shù)器
/////////////////////////////////////////////////////////////////////////////////////////
public MyPlayer(Image img,int imagew,int imageh,int Map_w,int Map_h,int boardw,int boardh) {
super(img,imagew,imageh);
imgw=imagew;//圖的寬高
imgh=imageh;
w=boardw;//屏幕的寬高
h=boardh;
mapw=Map_w;
maph=Map_h;
player_x=mapw/2;//玩家的初始位置
player_y=maph/2;
speakImg=MyControl.load.speakingImg;//說話的底圖
speed=MyControl.load.playerSpeed;
this.setPosition(player_x,player_y);
this.playerLoadFile();
this.playerNewMen();
cur=new Cur(BuyGridxPos,BuyGridyPos,w,h,playerMoney);//交易和使用物品時(shí)的光標(biāo)。
}
////////////
public void playerInit(){//玩家的初始位置
player_x=mapw/2;
player_y=maph/2;
this.setPosition(player_x,player_y);
}
public void playerNeedSaves(){//須要保存的數(shù)據(jù)。//以后要做個(gè)存文件的來保存這些數(shù)據(jù).
playerName="圣騎士";
playerLevel=0;//等級(jí)
playerHp=30;
playerMp=20;
playerEx=10;//經(jīng)驗(yàn)
playerMoney=1000;
cur.getVector();//玩家的物品。
//長(zhǎng)級(jí)比
//賣回東西的價(jià)格比
//怪掉錢比。
}
/////////////////////???????????????????????????????????????????????????????????????????
private void playerLoadFile(){
playerName="圣騎士";
playerLevel=0;//等級(jí)
playerHp=30;
playerMp=20;
playerEx=0;//經(jīng)驗(yàn)
playerMoney=1000;
}
//////////////////////////??????????????????????????????????/
private int count(int NN,int level){//升級(jí)計(jì)算公式。
for(int i=0;i<level;i++){ NN=NN+NN*10/100;}
return NN;}
//////////////////
private void playerNewMen(){//人物的屬性。讀取時(shí)計(jì)算
playerMaxHp=count(50,playerLevel);
playerMaxMp=count(30,playerLevel);
playerHit=count(20,playerLevel);//攻
playerRecovery=count(10,playerLevel);//防
playerNextEx=2*count(30,playerLevel);//經(jīng)驗(yàn)
playerLevel+=1;//等級(jí)
playerHp=playerMaxHp;
playerMp=playerMaxMp;
playerEx=0;
}
public void playerHitMap(TiledLayer backMap,Sprite point_0,Sprite point_1){
this.hitMap(backMap);//與Map層的碰撞檢測(cè).
this.hitCarryPoint(point_1);//與傳送點(diǎn)碰撞
palyerhitAimPoint(point_0);
}
////////////////
private void npcSpeak(Graphics g,Npc npc,String s1,String s2){//npc說話的
speakx=npc.getXpos()-speakImg.getWidth()/2-viewx;
speaky=npc.getYpos()-speakImg.getHeight()-viewy;
g.drawImage(speakImg,speakx,speaky,Graphics.LEFT|Graphics.TOP);
g.setColor(0xffffff);
g.drawString(s1,speakx+5,speaky+5,0);
g.drawString(s2,speakx+5,speaky+20,0);
}
//////////////
private boolean playerHitNpc(Npc npc){//與村中的npc相碰撞,npc停下,不碰時(shí),npc繼續(xù)動(dòng)
if(this.collidesWith(npc,true))
{ npc.isSpeaking=true;
hitNpcOk=true;//控制按1時(shí)看是否碰撞。
return true;}//相碰撞返回真
else {
if(npc.isSpeaking){
speak_Num=-1;//為說話的選取給初值。
pressA_Num=1;//為按1鍵的次數(shù)給初值。
hitNpcOk=false;
speakSure=false;//關(guān)閉與NPC對(duì)話的窗口。
npc.isSpeaking=false;
hitDrugstore=false;
hitSmith=false;
}
return false;}
}
/////////////////////
private void hitCarryPoint(Sprite point_1){//與傳送點(diǎn)相碰撞
if( this.collidesWith(point_1,true))
{int mapid=MyControl.load.backMapId;
switch(mapid){
case 0:MyControl.load.backMapId=1;break;
case 1:MyControl.load.backMapId=2;break;
case 2:MyControl.load.backMapId=0;break;
}
MyControl.gameBoard.boardInit();
}
}
/////////////////////
public void palyerhitAimPoint(Sprite po){//與傳送點(diǎn)相碰撞
if( this.collidesWith(po,true))
{int mapid=MyControl.load.backMapId;
switch(mapid){
case 0:MyControl.load.backMapId=2;break;
case 1:MyControl.load.backMapId=0;break;
case 2:MyControl.load.backMapId=1;break;
}
MyControl.gameBoard.boardInit();
}
}
/////////////
private void hitMap(TiledLayer backMap){//與地圖上的房子碰撞
player_x+=sx; //這樣做的碰撞檢測(cè),一個(gè)方向碰撞后,另一個(gè)方向不停.
setPosition(player_x,player_y);
if(collidesWith(backMap,true)){
player_x-=sx;setPosition(player_x,player_y);}
player_y+=sy;
setPosition(player_x,player_y);
if(collidesWith(backMap,true)){
player_y-=sy;setPosition(player_x,player_y);}
// player_x+=sx; //這樣做的一個(gè)方向碰撞后,另一個(gè)方向也停了.
// player_y+=sy;
// setPosition(player_x,player_y);//設(shè)定玩家的當(dāng)前位置
// if(collidesWith(backMap,true)){
// player_x-=sx; player_y-=sy;
// setPosition(player_x,player_y);//設(shè)定玩家的當(dāng)前位置
// }
}
////////////////
private int pressA(int st){// 計(jì)錄按1鍵的次數(shù)。得到不連續(xù)輸入按 1 鍵
if(st==0 || ((st&GameCanvas.GAME_A_PRESSED)!=0))
if(temp_a!=st)
{ temp_b++; temp_a=st;
if(temp_b%2==0)
{
pressA_Num++;
if(pressA_Num>3){}
temp_b=0;}
}
return pressA_Num;
}
/////////////這個(gè)函數(shù)應(yīng)寫在npc類中。//npc說的話。
public void showNpcSpeak(Graphics g,LayerManager layerManager,
Npc npcDrugstore,Npc npcSmith,Npc npcGranger_2,Npc npcGranger_3,
int view_x,int view_y){
viewx=view_x; viewy=view_y;//修正說話圖片的坐標(biāo)的。
if(playerHitNpc(npcDrugstore) && speakSure)
{ if(speak_Num==-1) {speak_Num=r.nextInt(6);}
switch(speak_Num){
case 0:npcSpeak(g,npcDrugstore,"嘿嘿,我是最好的大夫!","不過現(xiàn)在暫時(shí)缺貨……");break;
case 1:npcSpeak(g,npcDrugstore,"最近村外有妖怪,", "來買藥的人也多了……");break;
case 2:npcSpeak(g,npcDrugstore,"這幾天我的生意特別好,","你知道這是為什么嗎?");break;
case 3:npcSpeak(g,npcDrugstore,"啊,大俠你又來了,", "常來這里是會(huì)短命的。");break;
case 4:npcSpeak(g,npcDrugstore,"新到的藥材,", "快買,快買…………") ;break;
default:npcSpeak(g,npcDrugstore,"來人買點(diǎn)藥吧……", "啊,又一個(gè)大頭來了!") ;break;
}
hitDrugstore=true;
return;}
if(playerHitNpc(npcSmith) && speakSure)
{ if(speak_Num==-1) {speak_Num=r.nextInt(6);}
switch(speak_Num){
case 0:npcSpeak(g,npcSmith,"做莫邪的就是俺師傅!","現(xiàn)在裝備只修不賣。");break;
case 1:npcSpeak(g,npcSmith,"聽說最近村外有妖怪,","來買武器的人也多了……");break;
case 2:npcSpeak(g,npcSmith,"這幾天我的生意特別好,","你知道這是為什么嗎?");break;
case 3:npcSpeak(g,npcSmith,"啊,大俠你又來了,", "上回買的武器還趁手嗎?");break;
case 4:npcSpeak(g,npcSmith,"新到的武器!", "快買,快買…………") ;break;
default:npcSpeak(g,npcSmith,"我的武器,呵呵……", "天下…啊…第一……") ;break;
}
hitSmith=true;
return;}
if(playerHitNpc(npcGranger_2) && speakSure)
{ if(speak_Num==-1) {speak_Num=r.nextInt(6);}
switch(speak_Num){
case 0:npcSpeak(g,npcGranger_2,"聽說村外有妖怪,","我好怕怕哦……");;break;
case 1:npcSpeak(g,npcGranger_2,"人們都在家里打麻將,","我今天又賺了不少。");break;
case 2:npcSpeak(g,npcGranger_2,"聽說藥店生意特別好,","你知道這是為什么嗎?");break;
case 3:npcSpeak(g,npcGranger_2,"我也想做藥材生意,", "可我不敢出村子進(jìn)貨。");break;
case 4:npcSpeak(g,npcGranger_2,"你看村子?xùn)|北的那人,","在村中都快呆傻了。") ;break;
default:npcSpeak(g,npcGranger_2,"看你是外地人吧,", "來時(shí)看到妖怪了嗎?") ;break;
}return;
}
if(playerHitNpc(npcGranger_3) && speakSure)
{ if(speak_Num==-1) {speak_Num=r.nextInt(6);}
switch(speak_Num){
case 0:npcSpeak(g,npcGranger_3,"總呆在村里","真是太郁悶了!");break;
case 1:npcSpeak(g,npcGranger_3,"打麻將把底褲都輸了,","手氣實(shí)在是太差了。");break;
case 2:npcSpeak(g,npcGranger_3,"村子西南的那小子,","贏錢還說我壞話&*^%");break;
case 3:npcSpeak(g,npcGranger_3,"我要是鐵匠,就……","做把刀砍死那小子。");break;
case 4:npcSpeak(g,npcGranger_3,"啊,大俠,你帶我出","村打妖怪吧!") ;break;
default:npcSpeak(g,npcGranger_3,"看你是外地人吧,", "來時(shí)看到妖怪了嗎?") ;break;
}return;
}
}//end
/////////////////////////////////
int action=-1;
private void playerMove(int st,int mapw,int maph)//玩家移動(dòng),邊界檢測(cè)是用底圖的寬高做邊界
{int xn=16;
sx=0;sy=0;
if((st&GameCanvas.RIGHT_PRESSED)!=0){
if(player_x+1<=mapw-imgw) { sx=speed;}//邊界檢測(cè)//????????????????????????????????????????????????????????
this.setFrame(0+xn*(step++%4)); }//右 //這里要修正:視窗沒到邊界時(shí),這里可不用檢測(cè).
if((st&GameCanvas.LEFT_PRESSED)!=0){
if(player_x-1>=2) { sx=-speed;}
this.setFrame(2+xn*(step++%4)); }//左
if((st&GameCanvas.UP_PRESSED)!=0){
if(player_y-1>=0) {sy=-speed;}
this.setFrame(1+xn*(step++%4)); }//上
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -