java 魔塔游戏代码_经典RPG小游戏魔塔源码

package com.bdqn.hr.activity;

import com.bdqn.hr.entity.Actor;

import com.bdqn.hr.entity.Door;

import com.bdqn.hr.entity.GuaiWu;

import com.bdqn.hr.entity.WuPin;

import com.bdqn.hr.manager.GuaiWuManager;

import com.bdqn.hr.manager.ImgArrManager;

import com.bdqn.hr.manager.RenWuManager;

import com.bdqn.hr.manager.WuPinManager;

import com.bdqn.hr.view.DMessageView;

import com.bdqn.hr.view.DrawableGameScreenBg;

import com.bdqn.hr.view.ShopAndNpcSayView;

import com.bdqn.hr.view.TiaoCengAndGWInfoView;

import com.bdqn.hr.view.ZhanDouView;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.ColorFilter;

import android.graphics.Paint;

import android.graphics.Bitmap.Config;

import android.graphics.drawable.Drawable;

import android.opengl.Visibility;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.view.WindowManager;

import android.view.View.OnTouchListener;

import android.widget.Button;

/**游戏界面*/

public class NewGame01 extends Activity {

Button btnTop=null;

Button btnDown=null;

Button btnLeft=null;

Button btnRight=null;

Button btnMove=null;

Button btntiaoceng=null;

Button btnGuaiWuInfo=null;

View absLayout=null;

ZhanDouView zhandouView=null;//战斗视图

DMessageView dMessageView=null;

ShopAndNpcSayView shopandnpc=null;

TiaoCengAndGWInfoView tcandgwinfo=null;

Actor actor=null;//玩家

GuaiWu guaiWu=null;//遇到的怪物

WuPin wuPin=null;//遇到的物品

Door door=null; //遇到的 门

int amx=0,amy=0;//根据按键人物(用于)移动范围

Thread runMove=null;//移动线程

int ydIndex=0,indexRow=0,indexColumn=0;//遇到NPC或GuaiWu (结果,二维数组下标)

public static boolean keyFlag=false; //按键是否有效 (是否战斗中)初始化时无效,背景绘制完后有效。

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

actor=Actor.getActor(this);

//得到 本层信息

ImgArrManager.getZAWInfo(actor.getMtceng());

//获得玩家位置

actor.setX(ImgArrManager.acX);

actor.setY(ImgArrManager.acY);

setContentView(R.layout.bnewgameone);

{//此处为适应屏幕

ViewGroup vg=(ViewGroup)findViewById(R.id.parentAbszdView);

int cw=LoginActivity.width-480;

int ch=LoginActivity.height-800;

vg.setPadding(cw/2, ch/2,cw/2, 0);

Log.d("NewGame001", "自适应屏幕。");

vg.setBackgroundColor(Color.LTGRAY);

vg.setBackgroundDrawable(new DrawableGameScreenBg().getDrawable());

}

btnTop=(Button)findViewById(R.id.btntop);

btnDown=(Button)findViewById(R.id.btndown);

btnLeft=(Button)findViewById(R.id.btnleft);

btnRight=(Button)findViewById(R.id.btnright);

absLayout=(View)findViewById(R.id.btnlayout);

btnMove=(Button)findViewById(R.id.kongzhimove);

btntiaoceng=(Button)findViewById(R.id.btntiaoceng);

btnGuaiWuInfo=(Button)findViewById(R.id.btnguaiwuinfo);

zhandouView=(ZhanDouView)findViewById(R.id.zhandouview);

shopandnpc=(ShopAndNpcSayView)findViewById(R.id.shopandnpc);

tcandgwinfo=(TiaoCengAndGWInfoView)findViewById(R.id.tcandgwinfo);

Ontouch ontouch=new Ontouch();

btnTop.setOnTouchListener(ontouch);

btnDown.setOnTouchListener(ontouch);

btnLeft.setOnTouchListener(ontouch);

btnRight.setOnTouchListener(ontouch);

btnMove.setOnTouchListener(ontouch);

btntiaoceng.setOnTouchListener(ontouch);

btnGuaiWuInfo.setOnTouchListener(ontouch);

//重新绘制按钮

//btnTop.draw(canvas);

}

@Override

protected void onDestroy() {

super.onDestroy();

System.out.println("newGame001 destroy...........");

}

//控件Move

public void moveView(View v,int left,int top,int px,int py){

v.layout(left-px,top-py, left-px+v.getWidth(), top-py+v.getHeight());

}

//判断是否触碰障碍物

public boolean checkZAW(int [][] zaw,int ax,int ay){

int x=actor.getX();

int y=actor.getY();

for (int row = 0; row < zaw.length; row++) {

for (int column = 0; column < zaw[row].length; column++) {

int value = zaw[row][column];

if(value!=0){

int zx= column*32;

int zy= row*32;

if(x+ax==zx&&y+ay==zy){

this.indexRow=row;

this.indexColumn=column;

this.ydIndex=value;

return false;

}

}

}

}

return true;

}

public int chechBCZAW(int ax,int ay){

//System.out.println("判断 是否 CurrentTime "+System.currentTimeMillis());

//如果障碍物 为null的时候则直接通过验证

if(ImgArrManager.zawImageArr==null || checkZAW(ImgArrManager.zawImageArr,ax,ay) ){

if(ImgArrManager.npcImageArr==null || checkZAW(ImgArrManager.npcImageArr,ax,ay)){

if(ImgArrManager.gwImageArr==null || checkZAW(ImgArrManager.gwImageArr,ax,ay) ){

if(ImgArrManager.wpImageArr==null || checkZAW(ImgArrManager.wpImageArr, ax, ay)){

if(ImgArrManager.menImageArr==null || checkZAW(ImgArrManager.menImageArr, ax, ay)){

if(ImgArrManager.loutiImageArr==null || checkZAW(ImgArrManager.loutiImageArr, ax, ay)){

//System.out.println("判断 通过 "+System.currentTimeMillis());

return 0;//通过

}else{

return 6;//遇到楼梯

}

}else{

return 5;//遇到门

}

}else{

return 4;//遇到物品

}

}else{

return 3;//遇到怪物

}

}else{

return 2;//遇到NPC

}

}else{

return 1;//遇到障碍物

}

}

public void checkResult(int result,int ax,int ay){

switch(result){

case 0:

//通过

if(this.amx!=0||this.amy!=0){

break;

}

this.amx=ax;

this.amy=ay;

getRunMove().start();

break;

case 1:

//Log.i("人物移动", "遇到障碍物。。。");

//SoundManager.getMediaPlayerYinXiao(3).start();

break;

case 2:

//遇到NPC

shopandnpc.npcIndex=ydIndex;

shopandnpc.shopIndex=ydIndex/3+1;

if(ydIndex/3==0){

shopandnpc.npcrow=indexRow;

shopandnpc.npccol=indexColumn;

RenWuManager.getRWContent(1);

}

shopandnpc.setVisibility(View.VISIBLE);

shopandnpc.handler=handler;

keyFlag=false;//使按键无效

break;

case 3:

this.guaiWu=GuaiWuManager.getGuaiWu(ydIndex);

this.guaiWu.setGuaiWuArrInfo(ydIndex, indexRow, indexColumn);

zhandouView.guaiWu=guaiWu;

zhandouView=(ZhanDouView)findViewById(R.id.zhandouview);

zhandouView.handler=this.handler;//共用一个handler主要用于消息收发

zhandouView.setVisibility(View.VISIBLE);

keyFlag=false;//使按键无效

break;

case 4:

//遇到物品

//SoundManager.getMediaPlayerYinXiao(5).start();

this.wuPin=WuPinManager.getWuPin(ydIndex);

this.wuPin.setWPArrInfo(ydIndex, indexRow, indexColumn);

String title=this.wuPin.getWpNameStr(this.actor);

String content=this.wuPin.getWpInfo();

dMessageView=(DMessageView)findViewById(R.id.dmessageview);

dMessageView.setTitle(title);

dMessageView.setContent(content);

dMessageView.handler=this.handler;

dMessageView.setVisibility(View.VISIBLE);

if(!this.wuPin.removeWuPin(ImgArrManager.wpImageArr)){

System.out.println("物品移除异常!");

}

keyFlag=false;

break;

case 5:

//遇到门

door=Door.getDoor(this);

door.setKey(ydIndex);

door.setDoorArrInfo(ydIndex, indexRow, indexColumn);

String titlea= door.getDoorDkStr(this.actor);

dMessageView=(DMessageView)findViewById(R.id.dmessageview);

dMessageView.setTitle(titlea);

dMessageView.setContent("");

dMessageView.handler=this.handler;

dMessageView.setVisibility(View.VISIBLE);

if(!door.isCheckActorTG())

return ;

if(!this.door.removeDoor(ImgArrManager.menImageArr)){

System.out.println("门移除异常!");

}

door.setHandler(this.handler);

keyFlag=false;

break;

case 6:

//遇到楼梯

if(this.ydIndex>=16&&this.ydIndex<=19){

Actor.loutiFlag=false;

actor.setMtceng(actor.getMtceng()+1);

Intent intent=new Intent();

intent.setClass(this, LoadingActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

keyFlag=false;

}else if (this.ydIndex>=40&&this.ydIndex<=43) {

Actor.loutiFlag=true;

actor.setMtceng(actor.getMtceng()-1);

Intent intent=new Intent();

intent.setClass(this, LoadingActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

keyFlag=false;

}

break;

}

}

class Ontouch implements OnTouchListener{

@Override

public boolean onTouch(View v, MotionEvent event) {

if(event.getAction()==0){

v.setBackgroundResource(R.drawable.yfxbtnbg);

}else if(event.getAction()==1){

v.setBackgroundResource(R.drawable.fxbtnbg);

}

if(!keyFlag){

handler.removeCallbacks(onclickBtn);//移除Runnable

System.out.println("按键无效。。");

return false;

}

//点击换层按钮

if(v==btntiaoceng&&event.getAction()==1){

//if(actor.tsWpMap.get(WuPinManager.LJXZ)!=null){

tcandgwinfo.checkTcOrGw=1;

tcandgwinfo.context=NewGame01.this;

tcandgwinfo.setVisibility(View.VISIBLE);

keyFlag=false;

//}else{

//dMessageView=(DMessageView)findViewById(R.id.dmessageview);

//dMessageView.setTitle("还没有获得:【"+WuPinManager.LJXZ+"】");

//dMessageView.setContent("");

//dMessageView.handler=NewGame01.this.handler;

//dMessageView.setVisibility(View.VISIBLE);

//keyFlag=false;

//}

return false;

}

//点击怪物按钮

if(v==btnGuaiWuInfo&&event.getAction()==1){

//if(actor.tsWpMap.get(WuPinManager.LJXZ)!=null){

tcandgwinfo.checkTcOrGw=2;

tcandgwinfo.context=NewGame01.this;

tcandgwinfo.setVisibility(View.VISIBLE);

keyFlag=false;

//}else{

//dMessageView=(DMessageView)findViewById(R.id.dmessageview);

//dMessageView.setTitle("还没有获得:【"+WuPinManager.LJXZ+"】");

//dMessageView.setContent("");

//dMessageView.handler=NewGame01.this.handler;

//dMessageView.setVisibility(View.VISIBLE);

//keyFlag=false;

//}

return false;

}

//按下0,按下移动2,松开1

if(v!=btnMove&&v!=btntiaoceng&&v!=btnGuaiWuInfo){

if(event.getAction()==0){

onclickBtn.v=v;

handler.post(onclickBtn);

}else if(event.getAction()==1){

handler.removeCallbacks(onclickBtn);

}

}

//按下不放

if(event.getAction()==2&&v==btnMove) {

moveView(absLayout,(int)event.getRawX(),(int)event.getRawY(),v.getLeft()+(v.getWidth()/2),v.getTop()+(v.getHeight()/2));

}

return false;

}

}

Handler handler=new Handler(){

@Override

public void handleMessage(Message msg) {

if(msg.arg1==1){

System.out.println("胜利!NewGame01 已收到!");

//胜利后移除怪物

if(!guaiWu.removeGuaiWu(ImgArrManager.gwImageArr)){

System.out.println("战斗胜利后移除怪物...异常!");

}

keyFlag=true;

}else if(msg.arg1==2) {

System.out.println("失败!NewGame01 已收到!");

keyFlag=true;

}else if(msg.arg1==5){

System.out.println("短消息视图关闭、NewGame01 已收到!");

keyFlag=true;

}else if(msg.arg1==6){

System.out.println("门已打开、NewGame01 已收到!");

keyFlag=true;

}else if(msg.arg1==8){

System.out.println("商店窗口关闭、NewGame01 已收到!");

keyFlag=true;

}

super.handleMessage(msg);

}

};

OnclickBtn onclickBtn=new OnclickBtn();

class OnclickBtn implements Runnable {

int result=0;

int ax=0;

int ay=0;

View v=null;

@Override

public void run() {

if(!keyFlag){

handler.removeCallbacks(onclickBtn);//移除Runnable

return;

}

actorCheckZAWMove();

handler.postDelayed(onclickBtn, 80);

}

public void actorCheckZAWMove(){

if(v==btnTop){

ax=0;ay=-32;

result= chechBCZAW(ax,ay);

actor.setFx(3);

}else if(v==btnDown) {

ax=0;ay=+32;

result= chechBCZAW(ax,ay);

actor.setFx(0);

}else if(v==btnLeft) {

ax=-32;ay=0;

result= chechBCZAW(ax,ay);

actor.setFx(1);

}else if(v==btnRight) {

ax=+32;ay=0;

result= chechBCZAW(ax,ay);

actor.setFx(2);

}

checkResult(result,ax,ay);

}

}

class RunMove implements Runnable{

@Override

public void run() {

while (!Thread.currentThread().isInterrupted()) {

try {

Thread.sleep(80);

int speedx=0,speedy=0;

speedx=amx>0?8:-8;

speedy=amy>0?8:-8;

if(amx!=0){

amx-=speedx;

actor.setX(actor.getX()+speedx);

}

if(amy!=0){

amy-=speedy;

actor.setY(actor.getY()+speedy);

}

if(amy==0&&amx==0){

runMove.interrupt();

runMove=null;

}

} catch (InterruptedException e) {

Thread.currentThread().interrupt();

}

}

}

}

public Thread getRunMove() {

if(runMove==null){

//人物移动线程

runMove=new Thread(new RunMove());

}

return runMove;

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode==KeyEvent.KEYCODE_BACK){

Intent intent=new Intent();

intent.setClass(this, LoginActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

}

return false;

}

}



更多源码 | 好库简介 | 网站地图 | 帮助中心 | 版权说明

Copyright© 2009-2012 OKBASE.NET All Rights Reserved 好库网 版权所有

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
类似“爱情类”RPG游戏,类似主题医院及暗黑破坏神的场景,还算曲折的故事情节,动听的音乐(MP3格式),动人的结尾动画(AVI格式因为太大,不便上传),现奉献全部代码,及编译所需组件,有兴趣着可以用此来 ";编撰";自己未实现的梦. NewStar 1998 操作系统: win98-win2000 编译语言环境: Delphi 3.0 (4.0) 美工:推荐 Abode Photoshop 4.0 动画制作环境: 推荐Asymetrix DVP 4.0 DELPHI3.0 游戏VCL组件安装: 1、Anigrp10.dcu :动画工程师引擎,负责场景动画 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中Anigrp10.dcu,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将Anigrp10.dcu复制到Delphi3 安装目录 Lib目录下。 2、AMixer.pas :声音控制引擎,负责声音效果 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中AMixer.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将AMixer.pas复制到Delphi3 安装目录 Lib目录下。 2、MPEGPLAYER.pas: MP3音乐声音控制引擎,负责MP3音乐播放 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中MPEGPLAYER.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将MPEGPLAYER.pas复制到Delphi3 安装目录 Lib目录下。 编译注意:在编译提供的样例程序时,请将Dbclient.dll及Mpegdll.dll复制到样例程序目录中。 场景对话文件编辑: 游戏中所有场景对话都保存在Dat.cdx文件中,要修改对话,可以用Delphi的ClientDataSet 组件的LoadFromFile及SaveToFile方法打开本文件读写,文件内容可以在DBGrid中显示,采用 DataSource来连接ClientDataSet和DBGrid. EMAIL: newstarchj@163.net

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值