📄 myplayer.java
字号:
if((st&GameCanvas.DOWN_PRESSED)!=0){
if(player_y+1<=maph-imgh) { sy=speed;}
this.setFrame(3+xn*(step++%4)); }//下
if(st== 6){ this.setFrame(6+xn*(step++%4)); }//左上
if(st==68){ this.setFrame(7+xn*(step++%4)); }//左下
if(st==34){ this.setFrame(5+xn*(step++%4)); }//右上
if(st==96){ this.setFrame(4+xn*(step++%4)); }//右下
if((st&GameCanvas.DOWN_PRESSED)!=0||(st&GameCanvas.UP_PRESSED)!=0||(st&GameCanvas.RIGHT_PRESSED)!=0||(st&GameCanvas.LEFT_PRESSED)!=0)
{}
else{step=0;this.setFrame(2*xn+3);
switch (action){
case 2: this.setFrame(2*xn+1);break;
case 64:this.setFrame(2*xn+3);break;
case 4: this.setFrame(2*xn+2);break;
case 32:this.setFrame(2*xn+0);break;
case 6: this.setFrame(2*xn+6);break;
case 68:this.setFrame(2*xn+7);break;
case 34:this.setFrame(2*xn+5);break;
case 96:this.setFrame(2*xn+4);break;
}
}//什么都没按图片的步长记录设为0
}
//////////////////
private void goHome(){//回城
MyControl.load.backMapId=0;
MyControl.gameBoard.boardInit();
}
/////////
private void playerAddHp(int addhp){//加红
playerHp+=addhp;
playerHp=playerHp<this.playerMaxHp?playerHp:this.playerMaxHp;
}
///////
private void playerAddMp(int addmp){//加蓝
playerMp+=addmp;
playerMp=playerMp<this.playerMaxMp?playerMp:this.playerMaxMp;
}
/////////
/////////////////////
public int getPlayer_x() {
return player_x;
}
public int getplayer_y() {
return player_y;
}
////////////////
public void showPlayerHpMp(Graphics g){//显示玩家的生命和体力.
int d=16;
g.setColor(0xffff00);
g.drawRect(10,h-d-1,50,5);
g.drawRect(10,h-d/2-1,50,5);
g.drawRect(w>>1,h-d/2-1,50,5);
g.setColor(0xff0000);
g.fillRect(11,h-d,this.playerHp*50/this.playerMaxHp,4);//生命
g.setColor(0x0000ff);
g.fillRect(11,h-d/2,this.playerMp*50/this.playerMaxMp,4);//Mp
g.drawString("L-"+playerLevel,w-30,h-d,0);
g.setColor(0x00ffff);
g.fillRect(w>>1,h-d/2,this.playerEx*50/playerNextEx,4);//经验
cur.findGoodShow(g);//发现物品。
if(playerHp>0){
if(playerBooty){//获得战利品????//一次打一个怪时可得好几个。以后要修正。
cur.findGoods();
cur.findGood = true;
cur.findGoodShow(g);
playerBooty = false;
if(playerEx>playerNextEx){playerNewMen();}//长级
}
}else{
this.goHome();//玩家死后回村
playerHp=1;
// isWarfare=false;
}
}
//////////////////
private void pressA_NpcSpeak(int st){//按1和npc说话。
switch(pressA(st)){
case 2:speakSure=true;break;
case 3:
{
if(hitSmith){showBuyGrid=true;isShowGrid=true;speakSure=false;break;}//如果碰的的铁匠的就显示
if(hitDrugstore) {showBuyGrid=true;isShowGrid=true;speakSure=false;break;}//如果碰撞的是药店的人显示药店的。
pressA_Num=1;
speak_Num=-1;
speakSure=false;
}
default:break;
}
}
/////////////////////////////
public void showDrugstoreGrid(Graphics g){//显示药店的物品栏
if(hitDrugstore && showBuyGrid)
{ cur.DrugstoreGrid(g,curSwap);//写字//画物品//画光标
}
}
////////////////////////
public void showSmithGrid(Graphics g){//显示铁匠的物品栏
if(hitSmith && showBuyGrid){
cur.SmithGrid(g,curSwap);//写字//画物品//画光标
}
}
///////////////
public void showPlayerGrid(Graphics g){//显示玩家的物品栏,在gameboard.draw 下被调用。
if(isShowGrid){this.showPlayerArmsGrid(g);////显示玩家的属性栏
cur.PlayerGrid(g,curSwap);//在玩家物品栏,和上面的光标
}
}
///////////////////
public void changPlayerAttribute(Vector gvs,int Pnum){//改变玩家的属性。
// "绿石","铜戒","小红","小蓝","辩认",
// "红石","银戒","中红","中蓝","回城",
// "蓝石","金戒","大红","大蓝","骷髅",
// "粉石","钻戒","战甲","头盔","钢靴",
// "战手","长剑","战盾","战盔","战靴",
// "护手","青锋","莫邪","腰带","古书",
int number=((Goods)gvs.elementAt(Pnum)).number;
switch(number){
case 2: ((Goods)gvs.elementAt(Pnum)).n--; playerAddHp(50); break;//加红
case 7: ((Goods)gvs.elementAt(Pnum)).n--; playerAddHp(100); break;
case 12: ((Goods)gvs.elementAt(Pnum)).n--; playerAddHp(200); break;
case 3: ((Goods)gvs.elementAt(Pnum)).n--; playerAddMp(30); break;//加蓝
case 8: ((Goods)gvs.elementAt(Pnum)).n--; playerAddMp(60); break;
case 13: ((Goods)gvs.elementAt(Pnum)).n--; playerAddMp(120); break;
case 9:
if(MyControl.load.backMapId!=0){
((Goods)gvs.elementAt(Pnum)).n--;
pressB();
goHome(); }
break;//回城
default: break;
}
}
public int hitBox(Box box[]){//与箱子的碰撞.
int b=-1;
for(int i=0;i<box.length;i++)
{if(collidesWith(box[i],true))
{b=i;
return b; }
}
return b;
}
///////////////////////////
private void showPlayerArmsGrid(Graphics g){//显示玩家的属性栏
Image grid0=MyControl.load.gridImg[0];//属性栏
int d=15;//行距
int grid0x=w-grid0.getWidth();
int grid0y=h-grid0.getHeight();
int BuyGridxPos=grid0x+5,BuyGridyPos=grid0y+6;
g.drawImage(grid0,grid0x,grid0y,Graphics.LEFT|Graphics.TOP);
g.setColor(0xffffff);
g.drawString(playerName,BuyGridxPos,BuyGridyPos+5*d,0);
g.drawString(playerLevel+"级",BuyGridxPos+4*d,BuyGridyPos+5*d,0);
g.drawString("HP "+playerHp+"/"+playerMaxHp,BuyGridxPos,BuyGridyPos+6*d,0);
g.drawString("MP "+playerMp+"/"+playerMaxMp,BuyGridxPos+3*d,BuyGridyPos+6*d,0);
g.drawString("攻"+playerHit,BuyGridxPos,BuyGridyPos+7*d,0);
g.drawString("防"+playerRecovery,BuyGridxPos+3*d,BuyGridyPos+7*d,0);
g.drawString("经验: "+playerEx+"/"+playerNextEx,BuyGridxPos,BuyGridyPos+8*d,0);
g.drawString("金币: "+cur.getPlearMoney(),BuyGridxPos,BuyGridyPos+9*d,0);
}
//////////////
////按 3 时,关闭所有打开的窗口。
private void pressB(){
showBuyGrid=false;//关闭买卖物品窗口。
isShowGrid=false;//关闭玩家属性窗口.
speakSure=false;//关闭对话窗口。
speak_Num=-1;//为说话的选取给初值。
pressA_Num=1;//为按1键的次数给初值。
cur.setCurx();cur.setCury();cur.setNum(0);//给买卖物品栏给初值。
curSwap=false;//给交换窗口的开关给初值。
}
int orientation=-1;
/////////////
private void playerWar(int st){//战斗状态。
int xn=16;
sx=0;sy=0;
if((st&GameCanvas.RIGHT_PRESSED)!=0){
if(player_x+1<=mapw-imgw) { sx=speed;}//边界检测//????????????????????????????????????????????????????????
this.setFrame(8+xn*(step++%4)); }//右 //这里要修正:视窗没到边界时,这里可不用检测.
if((st&GameCanvas.LEFT_PRESSED)!=0){
if(player_x-1>=2) { sx=-speed;}
this.setFrame(10+xn*(step++%4)); }//左
if((st&GameCanvas.UP_PRESSED)!=0){
if(player_y-1>=0) {sy=-speed;}
this.setFrame(9+xn*(step++%4)); }//上
if((st&GameCanvas.DOWN_PRESSED)!=0){
if(player_y+1<=maph-imgh) { sy=speed;}
this.setFrame(11+xn*(step++%4)); }//下
if(st== 6){ this.setFrame(14+xn*(step++%4)); }//左上
if(st==68){ this.setFrame(15+xn*(step++%4)); }//左下
if(st==34){ this.setFrame(13+xn*(step++%4)); }//右上
if(st==96){ this.setFrame(12+xn*(step++%4)); }//右下
if((st&GameCanvas.DOWN_PRESSED)!=0||(st&GameCanvas.UP_PRESSED)!=0||(st&GameCanvas.RIGHT_PRESSED)!=0||(st&GameCanvas.LEFT_PRESSED)!=0){}
else{ step++;
switch(action){
case 2: this.setFrame(xn*(step%4)+9);break;
case 64:this.setFrame(xn*(step%4)+11);break;
case 4: this.setFrame(xn*(step%4)+10);break;
case 32:this.setFrame(xn*(step%4)+8);break;
case 6: this.setFrame(xn*(step%4)+14);break;
case 68:this.setFrame(xn*(step%4)+15);break;
case 34:this.setFrame(xn*(step%4)+13);break;
case 96:this.setFrame(xn*(step%4)+12);break;
}
}
}
////////////
public void playerAction(int st,int mapw,int maph,Box box[],Monsters monsterCaves,Monsters monsters){
if((!isShowGrid)&&(!isWarfare)){playerMove(st,mapw,maph);}//如果显示属性栏,人物不能移动。
else {sx=0;sy=0;}//防止走动时,按开物品栏后,人会走个不停。
if((st!=0)&&((st&GameCanvas.GAME_A_PRESSED)==0)){action=st;}//记录当前的按键方向
if(isWarfare){
playerWar(st);
if(playerMp>0) {//如果 Mp 没有就不能攻击。
int mapId=MyControl.load.backMapId;
switch(mapId){
case 1: monsters.hitPlayer(this); break;//村外
case 2: monsterCaves.hitPlayer(this); break;//山洞
default: isWarfare=false; break;//防止在村中触发战斗状态。
}
}else{
isWarfare=false;
}
}
//在不与npc相碰撞时,按 7 键,打开玩家自已的物品栏。
if(((st&GameCanvas.GAME_C_PRESSED)!=0)&&(!hitNpcOk)){//打开玩家属性栏。
this.isShowGrid=true; //将物品栏的开关分开设
curSwap=true;//给交换窗口的开关给初值。
}
//在交易状态下,按 9 键,在交易栏和玩家物品栏间交换光标。
if((st&GameCanvas.GAME_D_PRESSED)!=0){
if((showBuyGrid)){curSwap=!curSwap;} }
//所有的取消都有 3 键
if((st&GameCanvas.GAME_B_PRESSED)!=0){ pressB(); }//窗口的取消。
//所有的确认键,都用 1 键;
//(1) 与npc 说话
if(hitNpcOk){pressA_NpcSpeak(st);}//与npc 说话的确认。在与NPC相碰撞时才可以确认说话,否则无效。
//(2) 在打开玩家物品栏时。(包括交易状态)
if((isShowGrid))
{ if(curSwap){//在交易状态下,光标在玩家物品栏时,按1就是卖。交易栏没开,光标在玩家物品栏,按1就是使用。
cur.curPlayerGridAction(st,showBuyGrid);}
else{//在交易状态下的按键的移动按1就是买。//光标在交易栏中
cur.curNpcGridAction(st,hitDrugstore, hitSmith ); }
}
if((st&GameCanvas.GAME_A_PRESSED)!=0){
//箱子的碰撞
int mapId=MyControl.load.backMapId;
int b=hitBox(box);
if(b>=0){ cur.playerHitBox(box[b]); }
//与怪物相遇,按1键就攻击。
if(mapId!=0) isWarfare=true;
}//end press A
}//end playerAction
///////////
/////////
}//end player
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -