赞
踩
时隔大半年,总算抽出时间更新这个博客了。去年下半年因为大四忙着备战考研,一直没有心情将第二篇继续更新,今年上半年又忙着搞毕业设计,焦头烂额了属于是orz
由于我的android studio的模拟器实在太卡了(用过的都知道),所以这一次的所有截图录屏都是我自己的手机来操作,看客老爷别太介意。。
言归正题,看过我上一篇文章的就知道,我们已经设计好了游戏前置事件以及设置等页面,现在摆在我们面前的就是对于游戏主体的设计。
一个游戏的趣味性必不可少,我目前给游戏设计的事件暂且有几种,分别是遇到怪物,发现宝箱,赌场事件,神秘守护者,商店老板,可怜的小女孩,小恶魔,每种事件的发生是随机的,在发生事件后,可以选择面对或者离开。除在发现怪物外,离开将不会带来任何影响。
在主页ui设计后,我将对这些事件进行详细的介绍。现在我们先介绍主页设计。
一个打怪升级的游戏必然得有一个较为简洁的主页面,不然看起来便花里胡哨,并且很难操作。为此,我特意录了一小段视频给各位看官老爷看看。视频有点小长,算是实机演示吧。
看完了视频,我接着说下面的内容。
游戏实机演示
首先是游戏的主体,肯定是打怪升级。既然是打怪,必然要有一套合理完备的战斗系统。在这里,我采用了传统的血条,蓝条的系统,包括攻击力,防御力,幸运值的设置。攻击力不足防御力则无法对敌人造成伤害,同理也是如此,当防御力高于敌方时将可能无伤通过战斗。
注意上面说的是可能。因为游戏中还设置了技能系统,作为怪物也可能存在专属的技能,主角也可以通过装备技能来武装自己。当然,在战斗开始前,设置了查看属性的功能,主角可以根据遇到的怪物的属性技能来确定策略,如果选择战斗,战斗中被击败后将直接结束游戏,当然选择逃跑也有可能付出代价:有可能会失去20%到50%的当前血量。下面是查看怪物属性。老鼠王是首领战,对于首领战不能逃跑,成功击败后将会进入下一个场景。
战斗模块的函数较为繁琐,简单来说,回合制,每回合可以进行普攻或者放技能或者使用恢复药剂,和其他游戏并无太多差异。看客老爷在看完开始的视频大概应该有所了解了。当然说着容易做着难,在真正编写时还是遇到了不少困难。对于怪物而言,其为随机释放技能,因此可能出现多次连续释放技能或者一场战斗一次也不用的情况。这是fight.java的文件。
- package com.example.dungeonsimulator;
-
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.media.MediaPlayer;
- import android.os.Bundle;
- import android.util.AttributeSet;
- import android.view.Gravity;
- import android.view.KeyEvent;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import android.widget.ProgressBar;
- import android.os.Handler;
- import android.os.Message;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.TextView;
- import android.widget.Toast;
- import android.graphics.Color;
-
- import java.util.ArrayList;
- import java.util.Random;
-
- import androidx.appcompat.app.AppCompatActivity;
-
-
-
- import java.util.Timer;
- import java.util.TimerTask;
- import android.view.KeyEvent;
- public class fight extends AppCompatActivity{
- private static boolean win= true;
- LinearLayout ll1,ll2,ll3,ll4;
- private static int turn=0,num=0;
-
- TextView monster_name,skill,lead_name,monster_level,monster_words,monster_hp,lead_hp,monster_agress,monster_defend,monster_lucky,lead_agress,lead_defend,lead_lucky,textView,lead_level,lead_mp;
- Button attack;
- String text="";
- monster mon;
- Message ret;
- Handler handler;
- person a;
- ProgressBar progressbar1,progressbar2,progressbar3;
- Timer timer; @Override
- public boolean onKeyDown(int keyCode, KeyEvent event){
- if(keyCode== android.view.KeyEvent.KEYCODE_BACK)
- return true;
-
- return super.onKeyDown(keyCode, event);
- }
- protected void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
- setContentView(R.layout.fight);
- turn=0;
- monster_name = findViewById(R.id.monster_name);
- lead_name = findViewById(R.id.lead_name);
- monster_level = findViewById(R.id.monster_level);
- monster_words= findViewById(R.id.monster_words);
- skill=findViewById(R.id.skill);
- lead_name = findViewById(R.id.lead_name);
- monster_hp= findViewById(R.id.monster_hp);
- lead_hp = findViewById(R.id.lead_hp);
- ll1=findViewById(R.id.linear1);
- ll2=findViewById(R.id.ll2);
- ll3=findViewById(R.id.ll3);
- ll4=findViewById(R.id.ll4);
- MainActivity.lead.kill+=1;
-
-
- textView=findViewById(R.id.textView);
- lead_level=findViewById(R.id.lead_level);
- monster_agress = findViewById(R.id.monster_agress);
- monster_defend = findViewById(R.id.monster_defend);
- monster_lucky = findViewById(R.id.monster_lucky);
- lead_lucky = findViewById(R.id.lead_lucky);
- lead_agress = findViewById(R.id.lead_agress);
- lead_defend= findViewById(R.id.lead_defend);
- attack= findViewById(R.id.attack);
- progressbar1=findViewById(R.id.progressBar1);
- progressbar2=findViewById(R.id.progressBar2);
- progressbar3=findViewById(R.id.progressBar3);
- lead_mp=findViewById(R.id.lead_mp);
- initmonster.add();
- ArrayList<buff> temp1=new ArrayList<>();
- ArrayList<debuff> temp2=new ArrayList<>();
- a=new person(MainActivity.lead.get_aggress(),MainActivity.lead.get_defend(),MainActivity.lead.get_lucky(),MainActivity.lead.hp,MainActivity.lead.nowhp,MainActivity.lead.magic,MainActivity.lead.nowmagic,temp1,temp2);
- int level=main.monster_level;
-
- int i=main.monster_index;
- mon=new monster(level,initmonster.monster_index[i][1],initmonster.monster_index[i][2],
- initmonster.monster_index[i][3],initmonster.monster_index[i][4],initmonster.monster_index[i][5],initmonster.monster_index[i][6],initmonster.monster_index[i][7],initmonster.monster_index[i][8],initmonster.monster_index[i][9],initmonster.monster_index[i][10],initmonster.monster_index[i][11],initmonster.monster_index[i][12]);
-
- set_text();
- set_lead();
- set_monster();
- set_humanhp();
- set_monhp();
- set();
- set_humanmp();
-
-
-
-
- attack.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Random r=new Random();
- String temp1="";
- int random_num=r.nextInt(100);
- if(MainActivity.lead.name.equals("刺客")){
- temp1=fight_process(MainActivity.lead,mon,main.monster_index);}
- else{
- if(monster_skill.have_skill[main.monster_index].length>0){
- if(random_num<40){
- temp1=monster_skill();
- p_debuff(a);
- turn+=1;
- }
- else{
- temp1=fight_process(MainActivity.lead,mon,main.monster_index);
- p_debuff(a);
- }}
- else{
- temp1=fight_process(MainActivity.lead,mon,main.monster_index);
- p_debuff(a);
- }
- }
- String temp2="";
- if(MainActivity.lead.nowhp>0&&mon.nowhp>0){
-
- if(!MainActivity.lead.name.equals("刺客")){
- temp2=fight_process(MainActivity.lead,mon,main.monster_index);}
- else{
- if(monster_skill.have_skill[main.monster_index].length>0){
- if(random_num<30){
- temp2=monster_skill();
- if(a.nowhp<=0){
- a.nowhp=0;
- MainActivity.back=0;
-
- timer.cancel();
- main.second=false;
- main.first=false;
- MainActivity.player.release();
- Intent intent = new Intent(fight.this, die.class);
- startActivity(intent);
-
- }
- turn+=1;
- }
- else{
- temp2=fight_process(MainActivity.lead,mon,main.monster_index);
- p_debuff(a);
- }}
- else{
- temp2=fight_process(MainActivity.lead,mon,main.monster_index);
- p_debuff(a);
- }
-
- }}
- text+=temp1;
- text+=temp2;
-
- }
- });
- handler=new Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
-
- if (msg.what==0){
- set_text();
- set_humanhp();
- set_monhp();
- set_humanmp();
- change();
-
-
-
-
- }
-
- }
- };
-
- timer = new Timer();
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
-
- handler.sendEmptyMessage(0);
-
- }
- },0,5);
-
- }
-
- private void set_text(){
- textView.setText(text);
- }
-
- private void change(){
- monster_agress.setText(String.valueOf(mon.get_aggress()));
- monster_defend.setText(String.valueOf(mon.get_defend()));
- monster_lucky.setText(String.valueOf(mon.get_lucky()));
- }
- private void set_lead(){
- int level=MainActivity.lead.level;
- lead_name.setText(MainActivity.lead.get_name());
- String slevel="lv"+String.valueOf(level);
- int agress=a.get_aggress();
- int defend=a.get_defend();
- int lucky=a.get_lucky();
- lead_agress.setText(String.valueOf(agress));
-
- lead_defend.setText(String.valueOf(defend));
- lead_lucky.setText(String.valueOf(lucky));
- lead_level.setText(slevel);
-
-
-
-
-
- }
- private void set_monster(){
- String slevel="lv";
- int level=main.monster_level;
-
- int i=main.monster_index;
- slevel+=String.valueOf(level);
- String temp="";
- if(monster_skill.have_skill[i].length>0){
- for(int index=0;index<monster_skill.have_skill[i].length;index++){
- temp+=monster_skill.skill_names[monster_skill.have_skill[i][index]];
- temp+="\n";
-
- }
- skill.setText(temp);
- }
-
- monster_level.setText(slevel);
- monster_name.setText(event_box.monsters[main.monster_index]);
- monster_words.setText(initmonster.monster_words[main.monster_index]);
-
- monster_agress.setText(String.valueOf(mon.get_aggress()));
- monster_defend.setText(String.valueOf(mon.get_defend()));
- monster_lucky.setText(String.valueOf(mon.get_lucky()));
-
-
-
-
-
-
- }
- public String monster_skill(){
- int i=main.monster_index;
- int len=monster_skill.have_skill[i].length;
-
- Random r=new Random();
- int next_num=r.nextInt(len);
- String temp= monster_effect(monster_skill.have_skill[i][next_num],monster_skill.skill_index[monster_skill.have_skill[i][next_num]],a,mon,monster_skill.skill_value[monster_skill.have_skill[i][next_num]]);
-
- return temp;
- }
- public String monster_effect(int nu,int ind,person a,monster b,int value){
- String temp1=event_box.monsters[main.monster_index];
- temp1+="使用了";
- num+=1;
- temp1+=monster_skill.skill_names[nu];
- temp1+=",";
-
- if(ind==0){
- value-=a.get_defend();
- temp1+="对你造成了";
- temp1+=String.valueOf(value);
- temp1+="点伤害!\n";
- a.nowhp-=value;
- if(a.nowhp<0){
- a.nowhp=0;
- Intent intent = new Intent(fight.this, MainActivity.class);
- startActivity(intent);
-
- }
- }
- if(ind==1){
- a.nowhp-=value;
- temp1+="对你造成了";
- temp1+=String.valueOf(value);
- temp1+="点伤害!\n";
- if(a.nowhp<0){
- a.nowhp=0;
- Intent intent = new Intent(fight.this, die.class);
- startActivity(intent);
-
- }
-
- }
- if(ind==2) {
- temp1 += "为自身回复了";
- temp1 += String.valueOf(value);
- temp1 += "点血量!\n";
- b.nowhp += value;
- if (b.nowhp > b.hp) {
- b.nowhp = b.hp;
- }
- }
- if(ind==3){
- temp1+="提升了自身";
- temp1+=String.valueOf(value);
- temp1+="点攻击力!\n";
- int temp=b.get_aggress()+value;
- b.set_aggress(temp);
- }
- if(ind==4){
- temp1+="提升了自身";
- temp1+=String.valueOf(value);
- temp1+="点防御力!\n";
- int temp=b.get_defend()+value;
- b.set_defend(temp);
- }
- if(ind==5){
- temp1+="提升了自身";
- temp1+=String.valueOf(value);
- temp1+="点幸运值!\n";
- int temp=b.get_lucky()+value;
- b.set_lucky(temp);
- }
- if(ind==6){
- temp1+="对你造成了";
- temp1+=String.valueOf(value);
- temp1+="点伤害,回复了自身";
- temp1+=String.valueOf(value);
- temp1+="点生命值!\n";
- a.nowhp-=value;
- b.nowhp+=value;
- if(a.nowhp<0){
- a.nowhp=0;
- Intent intent = new Intent(fight.this, die.class);
- startActivity(intent);
-
- }
- if (b.nowhp > b.hp) {
- b.nowhp = b.hp;
- }
-
- }
- if(ind==7){
- temp1+="提升了自身";
- temp1+=String.valueOf(value);
- temp1+="%攻击力!\n";
- int temp=b.get_aggress()*(100+value)/100;
- b.set_aggress(temp);
- }
- if(ind==8){
- temp1+="给你施加了debuff:每回合失去";
- temp1+=String.valueOf(value);
- temp1+="%生命值!\n";
- debuff de=new debuff(monster_skill.skill_names[nu],3,value,monster_skill.lasting_time[main.monster_index],monster_skill.image_index[nu]);
-
- a.pdebuff.add(de);
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(20, 20);
- NumImageView iv1 = new NumImageView(fight.this);
-
-
-
- layoutParams1.setMargins(0, 0, 10, 0);
- iv1.setImageResource(debuff.debufflist[de.index]);
- iv1.setNum(de.turn);
-
-
- ll4.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final AlertDialog.Builder normalDialog =
- new AlertDialog.Builder(fight.this);
- normalDialog.setTitle(de.name);
- String temp1="每回合失去";
- temp1+=de.value;
- temp1+="%的生命值";
- normalDialog.setMessage(temp1);
- normalDialog.show();
- ;}});
-
-
- }
-
-
-
-
-
-
-
-
- if(ind==9){
- temp1+="降低了你";
- temp1+=String.valueOf(value);
- temp1+="%防御力!\n";
- int temp=a.get_defend()*(100-value)/100;
- a.set_defend(temp);
- }
- if(ind==10){
- temp1+="对你造成了两次伤害!\n";
- a.nowhp-=2*(b.aggress-a.defend);
-
- }
-
- if(ind==11){
- temp1+="提升了自身";
- temp1+=String.valueOf(value);
- temp1+="%的防御力!\n";
- b.defend=(100+value)/100*b.defend;
-
- }
-
- if(ind==12){
- temp1+="对你造成了";
- temp1+=String.valueOf(value);
- temp1+="%的攻击伤害!\n";
- a.nowhp-=value/100*(b.aggress-a.defend);
-
- }
- if(ind==13){
- temp1+="给你施加了debuff:三回合内不击杀本体,将失去50";
- temp1+="%生命值!\n";
- debuff de=new debuff(monster_skill.skill_names[nu],4,value,monster_skill.lasting_time[nu],monster_skill.image_index[nu]);
-
- a.pdebuff.add(de);
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(20, 20);
- NumImageView iv1 = new NumImageView(fight.this);
-
-
-
- layoutParams1.setMargins(0, 0, 10, 0);
- iv1.setImageResource(debuff.debufflist[de.index]);
- iv1.setNum(de.turn);
-
-
- ll4.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final AlertDialog.Builder normalDialog =
- new AlertDialog.Builder(fight.this);
- normalDialog.setTitle(de.name);
- String temp=String.valueOf(monster_skill.lasting_time[nu]);
- temp+="回合后失去";
- temp+="50%的生命值";
- normalDialog.setMessage(temp);
- normalDialog.show();
- ;}});
-
- }
-
-
-
- return temp1;
-
- }
-
- public String fight_process(person a,monster b,int index){
- String process="";
- int agressa=a.get_aggress();
- int defenda=a.get_defend();
- int magica=a.get_magic();
- int luckya=a.get_lucky();
- int agressb=b.get_aggress();
- int defendb=b.get_defend();
- num+=1;
- int magicb=b.get_magic();
- int luckyb=b.get_lucky();
- Random r = new Random();
- int random1=r.nextInt(100);
- if(!a.name.equals("刺客")){
- if(turn %2==0){
- if(random1<luckya){
- process+="你往旁边一躲,险之又险地闪避了";
- process+=event_box.monsters[index];
- process+="的攻击!\n";
- }
- else{
- int damage=agressb-defenda;
- if(damage<0){
- damage=0;
- }
- a.nowhp-=damage;
- if(a.nowhp<=0){
- a.nowhp=0;
- MainActivity.back=0;
-
- timer.cancel();
- main.second=false;
- main.first=false;
- MainActivity.player.release();
- Intent intent = new Intent(fight.this, die.class);
- startActivity(intent);
-
- }
- String temp =String.valueOf(damage);
- process+=event_box.monsters[index];
-
- process+="上前攻击,对你";
- process+="造成了";
- process+=temp;
- process+="点伤害!\n";}
- }
-
- else{
- if(random1<luckyb){
- process+=event_box.monsters[index];
- process+="往旁边一躲,一下子闪避了你";
- process+="的攻击!\n";
-
- }
- else{
- int damage=agressa-defendb;
- if(damage<0){
- damage=0;
- }
- mon.nowhp-=damage;
- if(mon.nowhp<=0){
-
- mon.nowhp=0;
- timer.cancel();
- String temp="你战胜了(lv";
- temp+=String.valueOf(mon.level);
- temp+=")";
- MainActivity.lead.nowexp+=b.exp;
- MainActivity.lead.gold+=b.gold;
- MainActivity.lead.nowhp=a.nowhp;
- temp+=event_box.monsters[main.monster_index];
- temp+=",你获得了";
- temp+=String.valueOf(b.exp);
- temp+="点经验值和";
- temp+=String.valueOf(b.gold);
- temp+="个金币。\n";
- main.text+=temp;
- main.refresh=true;
- main.index+=1;
- if(main.second==true){
- main.first=false;
- main.second=false;
- Intent intent = new Intent(fight.this, stage.class);
- startActivity(intent);
- }
- else{
- Intent intent = new Intent(fight.this, main.class);
- startActivity(intent);}
-
- }
- String temp =String.valueOf(damage);
- process+="你上前攻击,对";
- process+=event_box.monsters[index];
- process+="造成了";
- process+=temp;
- process+="点伤害!\n";}
-
- }}
-
- else{if(turn %2!=0){
- if(random1<luckya){
- process+="你往旁边一躲,险之又险地闪避了";
- process+=event_box.monsters[index];
- process+="的攻击!\n";
- }
- else{
- int damage=agressb-defenda;
- if(damage<0){
- damage=0;
- }
- a.nowhp-=damage;
- if(a.nowhp<=0){
- a.nowhp=0;
- MainActivity.back=0;
- main.second=false;
- main.first=false;
- MainActivity.player.release();
- timer.cancel();
- Intent intent = new Intent(fight.this,die.class);
- startActivity(intent);
-
- }
- String temp =String.valueOf(damage);
- process+=event_box.monsters[index];
-
- process+="上前攻击,对你";
- process+="造成了";
- process+=temp;
- process+="点伤害!\n";}
- }
-
- else{
- if(random1<luckyb){
- process+=event_box.monsters[index];
- process+="往旁边一躲,一下子闪避了你";
- process+="的攻击!\n";
-
- }
- else{
- int damage=agressa-defendb;
- if(damage<0){
- damage=0;
- }
- mon.nowhp-=damage;
- if(mon.nowhp<=0){
- mon.nowhp=0;
- timer.cancel();
- String temp="你战胜了(lv";
- temp+=String.valueOf(mon.level);
- temp+=")";
- MainActivity.lead.nowexp+=b.exp;
- MainActivity.lead.gold+=b.gold;
- MainActivity.lead.nowhp=a.nowhp;
- temp+=event_box.monsters[main.monster_index];
- temp+=",你获得了";
- temp+=String.valueOf(b.exp);
- temp+="点经验值和";
- temp+=String.valueOf(b.gold);
- temp+="个金币。\n";
- main.text+=temp;
- main.index+=1;
- main.refresh=true;
-
-
-
- if(main.second==true){
- main.first=false;
- main.second=false;
- Intent intent = new Intent(fight.this, stage.class);
- startActivity(intent);
- }
- else{
- Intent intent = new Intent(fight.this, main.class);
- startActivity(intent);}
-
- }
- String temp =String.valueOf(damage);
- process+="你上前攻击,对";
- process+=event_box.monsters[index];
- process+="造成了";
- process+=temp;
- process+="点伤害!\n";}
-
- }}
-
- turn +=1;
-
- return process;
-
- }
-
- private void set_humanhp(){
- String temp=String.valueOf(a.nowhp);
- temp+="/";
- temp+=String.valueOf(a.hp);
- lead_hp.setText(temp);
- int progress=a.nowhp*100/a.hp;
- progressbar2.setProgress(progress);
- }
- private void set_humanmp(){
- String temp=String.valueOf(a.nowmagic);
- temp+="/";
- temp+=String.valueOf(a.get_magic());
- lead_mp.setText(temp);
- int progress=a.nowmagic*100/a.get_magic();
- progressbar3.setProgress(progress);
- }
- private void get_pet(){
- Random r=new Random();
- int rand=r.nextInt(100);
- if(rand<15){
- int num=r.nextInt(10);
- int qu=0;
- if(num<5){
- qu=1;
-
- }
- if(num>5&&num<8){
- qu=2;
- }
- if(num>8){
- qu=3;
- }
- String temp="同时你获得了从怪物身上掉落的一枚怪物蛋,你摇了摇头,收了起来。\n";
- main.text+=temp;
- int i=main.monster_index;
- pets mypet=new pets(initpets.names[i],initpets.attribute[i][0],initpets.attribute[i][1],initpets.attribute[i][2],initpets.attribute[i][3],initpets.attribute[i][4],
- initpets.attribute[i][5],initpets.attribute[i][6],initpets.attribute[i][7],qu);
- MainActivity.lead.have_pets.add(mypet);
-
- }
-
- }
-
- private void set_monhp(){
- String temp=String.valueOf(mon.nowhp);
- temp+="/";
- temp+=String.valueOf(mon.hp);
- monster_hp.setText(temp);
- int progress=mon.nowhp*100/mon.hp;
- progressbar1.setProgress(progress);
- }
- private void set_consume(int i){
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(100, 100);
- NumImageView iv1 = new NumImageView(fight.this);
-
-
-
- layoutParams1.setMargins(0, 0, 0, 0);
- iv1.setImageResource(consumables.myconsumeList[i]);
- iv1.setNum(MainActivity.lead.have_consume[i]);
-
-
- ll2.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Random r =new Random();
- int random_num=r.nextInt(100);
- MainActivity.lead.have_consume[i]-=1;
- int type=consumables.con_types[i];
- if(type==0){
- a.nowhp+=consumables.con_value[i];
- if(a.nowhp>a.hp){
- a.nowhp=a.hp;
- }
- }
- if(type==1){
- a.nowmagic+=consumables.con_value[i];
- if(a.nowmagic>a.magic){
- a.nowmagic=a.magic;
- }
- }
- String temp="你使用了";
- temp+=consumables.con_names[i];
- temp+=",";
-
- if(MainActivity.lead.have_consume[i]==0) {
- ll2.removeView(iv1);
-
- }
- iv1.setNum(MainActivity.lead.have_consume[i]);
- temp+="你";
- temp+=consumables.introductions[i];
- temp+="\n";
- if(MainActivity.lead.name.equals("刺客")){
- turn+=1;
- }
-
- String temp2="";
- if(monster_skill.have_skill[main.monster_index].length>0){
- if(random_num<30){
- temp2=monster_skill();
- turn+=1;
- }
- else{
- temp2=fight_process(a,mon,main.monster_index);
- p_debuff(a);
- }}
- else{
- temp2=fight_process(a,mon,main.monster_index);
- p_debuff(a);
- }
- if(!MainActivity.lead.name.equals("刺客")){
- turn+=1;
- }
- text+=temp;
- text+=temp2;
-
- }});
- }
-
- private void set_skill(int index) {
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- ImageView iv1 = new ImageView(fight.this);
-
- int i=MainActivity.lead.skills[index];
-
- layoutParams1.setMargins(120, 0, 0, 0);
- iv1.setImageResource(initskills.myskillList[i]);
- iv1.setLayoutParams(layoutParams1);
- ll1.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Random r=new Random();
- int random_num=r.nextInt(40);
- if(a.nowmagic<skills.skill_mp[i]){
- String temp="你没有足够的魔法值!";
- Toast toast = Toast.makeText(fight.this, temp, Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();
- }
- else{
- String temp1=effect(i,skills.skill_index[i],a,mon,skills.skill_mp[i],skills.skill_value[i]);
- String temp2="";
- if(mon.nowhp<=0){
- mon.nowhp=0;
- timer.cancel();
- String temp="你战胜了(lv";
- temp+=String.valueOf(mon.level);
- temp+=")";
- MainActivity.lead.nowexp+=mon.exp;
- MainActivity.lead.gold+=mon.gold;
- temp+=event_box.monsters[main.monster_index];
- temp+=",你获得了";
- temp+=String.valueOf(mon.exp);
- temp+="点经验值和";
- temp+=String.valueOf(mon.gold);
- temp+="个金币。\n";
- main.text+=temp;
- main.index+=1;
- main.refresh=true;
-
- if(main.second==true){
- main.first=false;
- main.second=false;
- Intent intent = new Intent(fight.this, stage.class);
- startActivity(intent);
- }
- else{
- Intent intent = new Intent(fight.this, main.class);
- startActivity(intent);}}
- if(MainActivity.lead.name.equals("刺客")){
- turn+=1;
- }
- if(MainActivity.lead.nowhp>0&&mon.nowhp>0){
- if(monster_skill.have_skill[main.monster_index].length>0){
- if(random_num<30){
- temp2=monster_skill();
- p_debuff(a);
- turn+=1;
- }
- else{
- temp2=fight_process(a,mon,main.monster_index);
- p_debuff(a);
- }}
- else{
- temp2=fight_process(a,mon,main.monster_index);
- p_debuff(a);
- }}
- if(!MainActivity.lead.name.equals("刺客")){
- turn+=1;
- }
- text+=temp1;
- text+=temp2;
-
-
-
- }}
- });
-
-
-
-
-
-
-
-
-
- }
- public void show(person a,monster b){
-
- }
-
- private void p_debuff(person a ){
- String temp="";
- if(a.pdebuff.size()==0){
- return ;
- }
- else{
- ll4.removeAllViews();
- for(debuff i: a.pdebuff){
- if(i.type==3){
- if(i.turn>0){
- a.nowhp-=0.01*i.value*a.hp;
- temp="你受到了debuff";
- temp+=i.name;
- temp+="效果,失去了";
- temp+=i.value;
- temp+="%的生命值。\n";
- text+=temp;
-
-
-
-
-
- i.turn-=1;
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(20, 20);
- NumImageView iv1 = new NumImageView(fight.this);
-
-
-
- layoutParams1.setMargins(0, 0, 10, 0);
- iv1.setImageResource(debuff.debufflist[i.index]);
- iv1.setNum(i.turn);
-
-
- ll4.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final AlertDialog.Builder normalDialog =
- new AlertDialog.Builder(fight.this);
- normalDialog.setTitle(i.name);
- String temp1="每回合失去";
- temp1+=i.value;
- temp1+="%的生命值";
- normalDialog.setMessage(temp1);
- normalDialog.show();
- ;}});
-
- if(i.turn==0){
- ll4.removeView(iv1);
- }
-
-
-
-
- }}
- if(i.type==4){
- if(i.turn>0){
- i.turn-=1;
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(20, 20);
- NumImageView iv1 = new NumImageView(fight.this);
-
-
-
- layoutParams1.setMargins(0, 0, 10, 0);
- iv1.setImageResource(debuff.debufflist[i.index]);
- iv1.setNum(i.turn);
-
-
- ll4.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final AlertDialog.Builder normalDialog =
- new AlertDialog.Builder(fight.this);
- normalDialog.setTitle(i.name);
- String temp=String.valueOf(i.turn);
- temp+="回合后失去";
- temp+="50%的生命值";
- normalDialog.setMessage(temp);
- normalDialog.show();
- ;}});
-
- if(i.turn==0){
- a.nowhp-=0.01*i.value*a.nowhp;
- temp="你受到了debuff";
- temp+=i.name;
- temp+="效果,失去了";
- temp+=i.value;
- temp+="%的生命值。\n";
- text+=temp;
-
-
-
-
-
-
-
-
- ll4.removeView(iv1);
-
- }}
-
- }
-
- }}
-
-
- }
-
- public String effect(int nu,int ind,person a,monster b,int mp,int value){
- String temp1="你使用了";
- num+=1;
- temp1+=skills.skill_names[nu];
- temp1+=",";
-
- if(ind==0){
- value-=b.get_defend();
- temp1+="对敌人造成了";
- temp1+=String.valueOf(value);
- temp1+="点伤害!\n";
- b.nowhp-=value;
- a.nowmagic-=mp;
- }
- if(ind==1){
- b.nowhp-=value;
- temp1+="对敌人造成了";
- temp1+=String.valueOf(value);
- temp1+="点伤害!\n";
- a.nowmagic-=mp;
- }
- if(ind==2){
- temp1+="为自身回复了";
- temp1+=String.valueOf(value);
- temp1+="点血量!\n";
- a.nowhp+=value;
- if(a.nowhp>a.hp){
- a.nowhp=a.hp;
- }
- a.nowmagic-=mp;
- }
- return temp1;
-
- }
-
-
-
- private void set(){
- for(int i=0;i<2;i++){
- if(MainActivity.lead.skills[i]!=-1){
- set_skill(i);
- }
- }
- for(int i=0;i<MainActivity.lead.have_consume.length;i++){
- if(MainActivity.lead.have_consume[i]!=0){
- set_consume(i);
- }
- }
- }
-
-
-
- }
下一个功能也是重头戏。我要说的正是酒馆功能。酒馆中可以进行购买装备,技能,以及恢复药剂。对于这些物品的出现是完全随机的,另外每个酒馆只会出现三件装备,三个技能,以及三瓶恢复药剂,买完或没有合适的只能遇到下一个酒馆在做打算。另外,随着等级的升高,其中的装备也会更新换代,变得更加强大。
说到装备,就不得不提一下装备的品质机制。在游戏中的装备生成是随机的,品质也是完全随机的。当然这句话所限定的目标是酒馆中的装备。至于为什么我下面会说明。装备品质分为普通,稀有,大师,和传说。同一件装备随着品质不同属性也会不同。在酒馆中购买时,刷出的装备大概率是稀有打下的,大师装备出现的可能则较小,更别说传说装备了。当然,高品质的装备的售价更贵。下面是酒馆的功能代码。
- package com.example.dungeonsimulator;
-
-
-
-
- import android.content.Context;
- import android.content.Intent;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.graphics.Color;
- import android.media.MediaPlayer;
- import android.os.Handler;
- import android.os.Message;
- import android.util.AttributeSet;
- import android.util.Log;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Gravity;
- import android.view.KeyEvent;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.view.View;
- import android.app.AlertDialog;
- import android.widget.EditText;
- import android.media.MediaPlayer;
- import androidx.appcompat.app.AppCompatActivity;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.Cursor;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- import android.graphics.Canvas;
- import android.widget.ImageView;
- import java.util.Timer;
- import java.util.TimerTask;
- import android.content.DialogInterface;
-
- public class pub extends AppCompatActivity {
- MediaPlayer player=null;
- Timer timer;
- Button leave;
- LinearLayout ll1,ll2,ll3,ll4,ll5,ll6;
- TextView textview2,gold;
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event){
- if(keyCode== android.view.KeyEvent.KEYCODE_BACK)
- return true;
-
- return super.onKeyDown(keyCode, event);
- }
- @Override
-
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.pub);
- ll1=findViewById(R.id.linear1);
- ll2=findViewById(R.id.linear2);
- ll3=findViewById(R.id.linear3);
- ll4=findViewById(R.id.linear4);
- ll5=findViewById(R.id.linear5);
- gold=findViewById(R.id.gold);
- textview2=findViewById(R.id.textView2);
-
- set_weapon();
- set_weapon();
- set_weapon();
- set_skill();
- set_skill();
- set_skill();
- set_consume();
- set_consume();
- set_consume();
-
-
- leave=findViewById(R.id.leave);
-
- leave.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- timer.cancel();
- main.refresh=true;
- String temp="你离开了酒馆。\n";
- main.index+=1;
- main.text+=temp;
- Intent intent = new Intent(pub.this, main.class);
- startActivity(intent);
-
- }
- });
-
-
-
- Handler handler=new Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
-
- if (msg.what==0){
- set_gold();
-
-
- }
-
- }
- };
-
- timer = new Timer();
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
-
- handler.sendEmptyMessage(0);
-
- }
- },0,4);
-
-
-
- }
- private void set_gold(){
- int num=MainActivity.lead.gold;
- gold.setText(String.valueOf(num));
- }
- private void set_weapon() {
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- int i=event_box.choose_weapon();
- int qu=event_box.choose_quality();
- int gold=initweapon.weapon_values[i][4];
- ImageView iv1 = new ImageView(pub.this);
-
- iv1.setLayoutParams(layoutParams1);
- layoutParams1.setMargins(0, 0, 0, 0);
- iv1.setImageResource(initweapon.myweaponList[i]);
- ll1.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- textview2.setText("酒馆老板:我们家的装备自然是最好的!");
- final AlertDialog.Builder normalDialog =
- new AlertDialog.Builder(pub.this);
- normalDialog.setTitle(initweapon.weapon_names[i]+"("+initweapon.quality[qu]+")");
- String temp="属性:\n";
- for(int j=0;j<4;j++){
- temp+=initweapon.attributes[j];
- temp+=":+";
- double temp1=initweapon.weapon_values[i][j]*initweapon.indexes[qu];
- int a=(int)temp1;
- temp+=a;
- temp+="\n";
- }
- temp+=initweapon.attributes[4];
- temp+=":";
- double temp1=initweapon.weapon_values[i][4]*initweapon.indexes[qu];
- int a=(int)temp1;
- temp+=a;
- temp+="金币\n";
- if(MainActivity.lead.weapon[initweapon.weapon_values[i][6]]!=-1){
- int index=MainActivity.lead.weapon[initweapon.weapon_values[i][6]];
- double temp3=index/4;
- int temp4=(int)temp3;
- temp+="\n";
- temp+="目前装备:\n";
- temp+=initweapon.weapon_names[index/4];
- temp+="(";
- temp+=initweapon.quality[MainActivity.lead.weapon[initweapon.weapon_values[index/4][6]]%4];
- temp+=")";
- temp+="\n";
- for(int j=0;j<4;j++){
- temp+=initweapon.attributes[j];
- temp+=":+";
- double temp2=initweapon.weapon_values[temp4][j]*initweapon.indexes[MainActivity.lead.weapon[initweapon.weapon_values[index/4][6]]%4];
- int b=(int)temp2;
- temp+=b;
- temp+="\n";
-
- }}
- normalDialog.setMessage(temp);
- normalDialog.setPositiveButton("购买", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- if(MainActivity.lead.gold<a){
- String a="你没有足够的金币!";
- Toast toast = Toast.makeText(pub.this, a, Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();
-
- }
- else{
- MainActivity.lead.gold-=a;
- String temp="你购买了";
- temp+=initweapon.weapon_names[i];
- temp+="(";
- temp+=initweapon.quality[qu];
- temp+=")";
- MainActivity.lead.have_weapons[4*i+qu]+=1;
- temp+="*1!\n";
-
- ll1.removeView(iv1);
-
-
-
-
-
- Toast toast = Toast.makeText(pub.this, temp, Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();}
- }
- });
- normalDialog.setNegativeButton("确定", null);
- normalDialog.show();
-
-
- }
- });
-
-
-
-
-
- // 显示
-
-
-
-
-
- }
-
- private void set_skill() {
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- int i=event_box.choose_skill();
- int gold=skills.skill_buy[i];
- ImageView iv1 = new ImageView(pub.this);
-
-
-
- layoutParams1.setMargins(0, 0, 0, 0);
- iv1.setLayoutParams(layoutParams1);
- iv1.setImageResource(initskills.myskillList[i]);
- ll4.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- textview2.setText("酒馆老板:我们家的技能自然是最好的!");
- final AlertDialog.Builder normalDialog =
- new AlertDialog.Builder(pub.this);
- normalDialog.setTitle(skills.skill_names[i]);
- String temp="技能效果:\n";
- temp+= skills.introductions[i];
- temp+="\n";
- temp+="购入价格:";
- temp+=skills.skill_buy[i];
- temp+="金币\n";
- temp+="\n\n\n\n";
- temp+=skills.skill_words[i];
-
-
- normalDialog.setMessage(temp);
- normalDialog.setPositiveButton("购买", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- if(MainActivity.lead.gold<skills.skill_buy[i]){
- String a="你没有足够的金币!";
- Toast toast = Toast.makeText(pub.this, a, Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();
-
- }
- else{
- MainActivity.lead.gold-=skills.skill_buy[i];
- String temp="你购买了";
- temp+=skills.skill_names[i];
- MainActivity.lead.have_skills[i]+=1;
- temp+="*1!\n";
-
- ll4.removeView(iv1);
-
-
-
-
-
- Toast toast = Toast.makeText(pub.this, temp, Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();}
- }
- });
- normalDialog.setNegativeButton("确定", null);
- normalDialog.show();
-
-
- }
- });
-
-
-
-
-
-
-
- }
- private void set_consume() {
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- int i=event_box.choose_consume();
- int gold=consumables.con_buy[i];
- ImageView iv1 = new ImageView(pub.this);
-
-
-
- layoutParams1.setMargins(0, 0, 0, 0);
- iv1.setLayoutParams(layoutParams1);
- iv1.setImageResource(consumables.myconsumeList[i]);
- ll5.addView(iv1);
- iv1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- textview2.setText("酒馆老板:我们家的消耗品喝下后永远不死!");
- final AlertDialog.Builder normalDialog =
- new AlertDialog.Builder(pub.this);
- normalDialog.setTitle(consumables.con_names[i]);
- String temp="消耗品效果:\n";
- temp+= consumables.introductions[i];
- temp+="\n";
- temp+="购入价格:";
- temp+=consumables.con_buy[i];
- temp+="金币\n";
-
-
- normalDialog.setMessage(temp);
- normalDialog.setPositiveButton("购买", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- if(MainActivity.lead.gold<consumables.con_buy[i]){
- String a="你没有足够的金币!";
- Toast toast = Toast.makeText(pub.this, a, Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();
-
- }
- else{
- MainActivity.lead.gold-=consumables.con_buy[i];
- String temp="你购买了";
- temp+=consumables.con_names[i];
- MainActivity.lead.have_consume[i]+=1;
- temp+="*1!\n";
-
- ll5.removeView(iv1);
-
-
-
-
-
- Toast toast = Toast.makeText(pub.this, temp, Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();}
- }
- });
- normalDialog.setNegativeButton("确定", null);
- normalDialog.show();
-
-
- }
- });}
-
-
- }
接下来要介绍的是其中可能发生的其他事件。如发现宝箱事件,大概率可以发现一件装备,但是也有可能宝箱中存在一只怪物。因此,开宝箱并不完全是一件收益事件,也很大概率存在着风险。尤其在缺少血量的时候,更需要主角好好斟酌。这也正是为了游戏的趣味性所添加的。下面是开宝箱的函数代码。
- if(index==2){
- LinearLayout ll=findViewById(R.id.linear);
- LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- TextView tv1=new TextView(this);
- layoutParams1.setMargins(0,20,0,100);
- tv1.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
- tv1.setText(event[0]);
- tv1.setTextSize(30);
- tv1.setLayoutParams(layoutParams1);
- tv1.setTextColor(Color.rgb(255, 255, 255));
- ll.addView(tv1);
-
-
-
-
- LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- TextView tv2=new TextView(this);
- tv2.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
- layoutParams2.setMargins(0,10,0,150);
- tv2.setText(event[1]);
- tv2.setTextSize(20);
- tv2.setLayoutParams(layoutParams2);
- tv2.setTextColor(Color.rgb(255, 255, 255));
- ll.addView(tv2);
- LinearLayout.LayoutParams layoutParams3 = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-
- Button bt1=new Button(this);
- bt1.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
- layoutParams3.setMargins(0,10,0,80);
- bt1.setText(event[2]);
- bt1.setTextSize(20);
- bt1.setLayoutParams(layoutParams3);
- bt1.setTextColor(Color.rgb(0, 0, 0));
- ll.addView(bt1);
-
- LinearLayout.LayoutParams layoutParams4 = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-
- Button bt2=new Button(this);
- bt2.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
- layoutParams4.setMargins(0,10,0,50);
- bt2.setText(event[3]);
- bt2.setTextSize(20);
- bt2.setLayoutParams(layoutParams4);
- bt2.setTextColor(Color.rgb(0, 0, 0));
- ll.addView(bt2);
- Random r=new Random();
- int random=r.nextInt(100);
- if(random<80){
- bt1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- main.index+=1;
- int num=event_box.choose_weapon();
- int quality=event_box.choose_quality();
- String qu=initweapon.quality[quality];
- String name=initweapon.weapon_names[num];
- name+="(";
- name+=qu;
- name+=")";
- MainActivity.lead.have_weapons[4*num+quality]+=1;
- String temp="你打开了宝箱,很快宝箱发出了耀眼的光芒,同时你发现宝箱的底部存在着一件宝物,\n";
- temp+="(你获得了";
- temp+=name;
- temp+="*1)。\n";
- text+=temp;
- ll.removeView(bt1);
- ll.removeView(bt2);
- ll.removeView(tv1);
- ll.removeView(tv2);
- refresh=true;
- }
-
-
-
-
- });
-
- }
- else{
- bt1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- main.index+=1;
- String temp="你打开了宝箱,很快宝箱发出了诡异的光芒,你发现宝箱里竟是一只";
- monster_level=com.example.dungeonsimulator.event_box.choose_level();
- monster_index=com.example.dungeonsimulator.event_box.choose_monster();
- String a=event_box.monsters[monster_index];
- temp+=a;
- temp+=",你不得已与其开始了战斗。\n";
-
- timer.cancel();
- Intent intent = new Intent(main.this, fight.class);
- startActivity(intent);
-
-
-
-
- text+=temp;
-
-
- }
- });
-
- }
- bt2.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- escape_box();
- ll.removeView(bt1);
- ll.removeView(bt2);
- ll.removeView(tv1);
- ll.removeView(tv2);
- refresh=true;
-
-
-
- }
- });
- }
这次就先介绍到这里吧,要是有人催更我会接着往下更新的,谢谢大家啦,点点赞哈哈,有需要可以加q交流~q:1076051806
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。