问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一个简单RPG游戏的代码,JAva编写的

发布网友 发布时间:2022-05-04 12:27

我来回答

2个回答

热心网友 时间:2022-06-21 22:15

package com.lxi;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Rpg {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws Exception {
        System.out.println("在这里输入两个人物进行PK,以英文逗号分隔: [BM,DH,MK]");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Class<Person> c1;
        Class<Person> c2;
        try {
            String temp = br.readLine();
            String[] str = temp.split(",");
            if (str.length != 2) {
                throw new Exception("输入格式有误,按默认PK");
            }
            c1 = (Class<Person>) Class.forName("com.lxi."
                    + str[0].toUpperCase());
            c2 = (Class<Person>) Class.forName("com.lxi."
                    + str[1].toUpperCase());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            c1 = (Class<Person>) Class.forName("com.lxi.BM");
            c2 = (Class<Person>) Class.forName("com.lxi.DH");
        }
        try {
            Person p1 = c1.newInstance();
            Person p2 = c2.newInstance();
            long time = System.currentTimeMillis();
            long nextTime1 = (long) (time + p1.coldTime*1000); //
            long nextTime2 = (long) (time + p2.coldTime*1000); //发动攻击的时间
            System.out.println("---游戏开始---");
            while (true) {
                long currenTime = System.currentTimeMillis();
 
                if (nextTime1 < currenTime) {  //时间到则发动攻击
                    p1.hit(p2);
                    nextTime1 += p1.coldTime*1000 + p1.waitTime*1000; //下次攻击时间=冷却时间+被晕眩时间
                    p1.waitTime = 0;  //回合结束,重置被晕眩时间为0
                }
                if (nextTime2 < currenTime) {
                    p2.hit(p1);
                    nextTime2 += p2.coldTime*1000 + p2.waitTime*1000;
                    p2.waitTime = 0;
                }
            }
        } catch (ClassCastException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}




package com.lxi;

import java.util.Random;

class BM extends Person {
    public BM() {
        val = 650;
        coldTime = 1.5;
        fight = 40;
        chanceHit = 3;
        chanceDefense = 3;
        waitTime = 0;
    }
 
    int count = 0;   //防御技能发动的次数
    int temp = 40;   //攻击力,值同fight
    boolean hitFlag = false;
    boolean defenseFlag = false;
    Random rand = new Random();
 
    public void hit(Person p) {
        if (rand.nextInt(10) < chanceHit) {
            fight = fight * 2;   //发动双倍攻击
            hitFlag = true;
        }
        int hurt = p.defense(this);
        p.val = p.val - hurt;
        fight = temp;     //还原为单倍攻击
        if (p.val <= 0) {
            System.out.println(this.getClass().getSimpleName() + "胜出!");
            System.exit(0);
        }
        System.out.println(this.getClass().getSimpleName() + "攻击"
                + p.getClass().getSimpleName() + ","
                + this.getClass().getSimpleName()
                + (this.hitFlag ? "发动攻击技能   " : "未发动攻击技能   ")
                + p.getClass().getSimpleName()
                + (this.defenseFlag ? "发动防御技能   " : "未发动防御技能   ")
                + this.getClass().getSimpleName() + ":" + this.val + ","
                + p.getClass().getSimpleName() + ":" + p.val);
        hitFlag = false;
        defenseFlag = false;
    }
 
    public int defense(Person p) {
        if (rand.nextInt(10) < chanceDefense) {
            if (count != 0) {
                p.val = p.val - p.fight;
                count++;
                defenseFlag = true;
                if (p.val <= 0) {
                    System.out.println(this.getClass().getSimpleName() + "胜出!");
                    System.exit(0);
                }
            }
        }
        return p.fight;
    }
}
 
class MK extends Person {
    public MK() {
        val = 700;
        coldTime = 2.5;
        fight = 50;
        chanceDefense = 6;
        chanceHit = 3;
        waitTime = 0;
    }
 
    boolean hitFlag = false;
    boolean defenseFlag = false;
    Random rand = new Random();
 
    public void hit(Person p) {
        if (rand.nextInt(10) < chanceHit) {
            p.waitTime = 3;   //使对方晕眩3s
            hitFlag = true;
        }
        int hurt = p.defense(this);
        p.val = p.val - hurt;
        if (p.val <= 0) {
            System.out.println(this.getClass().getSimpleName() + "胜出!");
            System.exit(0);
        }
        System.out.println(this.getClass().getSimpleName() + "攻击"
                + p.getClass().getSimpleName() + ","
                + this.getClass().getSimpleName()
                + (this.hitFlag ? "发动攻击技能   " : "未发动攻击技能   ")
                + p.getClass().getSimpleName()
                + (this.defenseFlag ? "发动防御技能   " : "未发动防御技能   ")
                + this.getClass().getSimpleName() + ":" + this.val + ","
                + p.getClass().getSimpleName() + ":" + p.val);
        hitFlag = false;
        defenseFlag = false;
    }
 
    public int defense(Person p) {
        if (rand.nextInt(10) < chanceDefense) {
            defenseFlag = true;
            return p.fight / 2;   //防御技能发动,伤害减半
        }
        return p.fight;
    }
}


package com.lxi;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
 
//三个人物的基类
abstract class Person {
    int val;             //生命值
    double coldTime;     //冷却时间
    int waitTime;        //晕眩时间
    int fight;          //攻击力
    int chanceHit;      //发起主动技能的概率
    int chanceDefense;  //发起防御技能的概率
 
    abstract void hit(Person p);   //攻击技能
 
    abstract int defense(Person p); //防御技能,返回被伤害点数
}
 
class DH extends Person {
    public DH() {
        val = 600;
        coldTime = 1.0;
        fight = 30;
        chanceHit = 3;      //表示30%的概率
        chanceDefense = 3;
        waitTime = 0;
    }
 
    Random rand = new Random();
    boolean hitFlag = false;      //主动技能发动的标识
    boolean defenseFlag = false;  //防御技能发动的标识
 
    public void hit(Person p) {
        if (rand.nextInt(10) < chanceHit) {  //发动主动技能
            int hurt = p.defense(this);
            p.val = p.val - hurt;
            if (p.val <= 0) {
                System.out.println(this.getClass().getSimpleName() + "胜出!");
                System.exit(0);
            }
            val = val + hurt;
            if (val > 600)
                val = 600;
            hitFlag = true;     //标记主动技能已经发动
        } else {  //进行普通攻击
            int hurt = p.defense(this);
            p.val = p.val - hurt;
            if (p.val <= 0) {
                System.out.println(this.getClass().getSimpleName() + "胜出!");
                System.exit(0);
            }
        }
        System.out.println(this.getClass().getSimpleName() + "攻击"
                + p.getClass().getSimpleName() + ","
                + this.getClass().getSimpleName()
                + (this.hitFlag ? "发动攻击技能   " : "未发动攻击技能   ")
                + p.getClass().getSimpleName()
                + (this.defenseFlag ? "发动防御技能   " : "未发动防御技能   ")
                + this.getClass().getSimpleName() + ":" + this.val + ","
                + p.getClass().getSimpleName() + ":" + p.val);
        hitFlag = false;     //
        defenseFlag = false; //重置标记,下次重用
    }
 
    public int defense(Person p) {
        if (rand.nextInt(10) < chanceDefense) {
            defenseFlag = true;   //标记防御技能已经发动
            return 0;
        } else {
            return p.fight;
        }
    }
}

追问都没有人物移动

热心网友 时间:2022-06-21 22:16

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年欧洲杯赛程表 德国欧洲杯足球赛2024赛程时间表 勇者斗魔王勇者斗恶龙12Gameboy游戏1中最后魔王变身后怎么打2中什么武... 电脑开机十秒技巧怎样让电脑开机速度变快 完美世界手游熊猫哪里抓完美国际熊猫是怎么得的 ...每一关跳旗杆的时候怎么才能跳到满分我每次都只能跳到 ip11和ip11pro区别 请问;谁知道SJ-M里面有一个叫基_什么? 智齿疼一定要拔吗 大师们帮我算算我的命数!不胜感激~ 怎样选择评估公司 青岛中山公园的花开了吗 急切的想知道2010年青岛中山公园的樱花开了吗。 青岛中山公园好玩吗,青岛中山公园景点怎么样 求JAVA编写打字游戏源代码! 参观游记青岛中山公园 今年青岛中山公园观赏樱花最适合的时间是什么时候? 青岛中山公园的菊花展在什么时候举行? 青岛市 中山公园的樱花开了吗? 我想下午去看樱花 青岛中山公园好玩吗 来看夏季灯会 秋季菊展 中山公园樱花几月开? 青岛看樱花去哪里 青岛哪里樱花最多 智慧养老平台就找小椅相伴,老人安心住家子女“贴身”陪伴 十二生肖谁是千王之王? 十二生肖中哪几个是王 十二属相中能称王的动物是哪个! 5地入选河南智慧养老服务平台建设第二批试点,分别是哪五地? 十二生肖哪哪个生肖可以称王 智慧养老能全面提升养老服务管理水平促进国家及社区养老事业的发展哪三大平台 12生肖里 什么动物是君王? 四王是什么生肖? 隹字旁的隹读什么 想问隹叫什么偏旁呀? 海里最大的动物是什么动物 梦见拆掉的老房子,被大风大雨吹斜要倒了? 海里最大的动物是什么 目字旁加个隹这个字读什么 海洋中最大的动物是什么动物 海中最大的动物 海洋中最大的动物是什么? 安全事故证明怎么开 入职年数老员工发生安全事故说明什么· 安全事故都是人因失误造成的,请问人为什么会失误,具体内容是什么? 民法典口头协议有法律效力吗 口头协议能打官司吗 口头协议有没有法律效力 包商银行起诉借款人,因借款人身故,九十岁的母亲能否成为被告人? 华硕笔记本开机按ESC不能进入U盘,怎么办 谁能介绍关于马云创业事迹? 口头协议有法律效力吗有证明人 华硕笔记本k43s开机按esc没有用u盘启动的选项