2017-03-01-RPG文字游戏(控制台)
Xplorist Lv6

2017-03-01-RPG文字游戏(控制台)

实例1:前面RPG游戏的继承和向上转型实现

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
public class Start {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("欢迎来到【光明建设鬼】");
        Scanner sc = new Scanner(System.in);
        Hero hero = null;
        String inputRole = "";

        while (true) {
            System.out.println("请选择您要使创建的角色:【1】法师【2】刺客【3】战士");
            inputRole = sc.next();

            if (inputRole.equals("1") || inputRole.equals("2") || inputRole.equals("3")) {
                break;
            } else {
                System.out.println("对不起,选择角色失败,请确认你的输入为1,2,3里面 中的任意一个。");
            }

        }

        System.out.println("请输入您所创建的角色的名字:");
        String inputName = sc.next();

        switch (inputRole) {
        case "1":
            hero = new Mage(inputName);
            break;
        case "2":
            hero = new Assassin(inputName);
            break;
        case "3":
            hero = new Warrior(inputName);
            break;

        default:
            break;
        }

        System.out.println("创建角色成功");

        String inOrder = "";
        boolean flag = true;
        while (flag) {

            while (true) {
                System.out.println("请选择您要进行的操作,【h】help帮助【l】look查看属性【f】fight战斗【r】rest休息【q】quit退出");
                inOrder = sc.next();
                if (inOrder.equals("h") || inOrder.equals("l") || inOrder.equals("f") || inOrder.equals("r")
                        || inOrder.equals("q")) {
                    break;
                }else{
                    System.out.println("您输入的指令有误,请确认您的输入为h,l,f,r,q中的任意一个");
                }
            }

            switch (inOrder) {
            case "h":
                System.out.println("本游戏为回合制文字类RPG");
                break;
            case "l":
                System.out.println("角色当前的属性如下:");
                hero.show();
                break;
            case "f":
                
                Monster monster=null;
                int random=(int)(Math.random()*10);
                System.out.println(random);
                String monsKind="";
                if(random>=0&&random<8){
                    monsKind="骷髅";
                    monster=new Skull(monsKind);
                }else if(random>=8&&random<9){
                    monsKind="野兽";
                    monster=new Beast(monsKind);
                }else{
                    monsKind="吸血鬼";
                    monster=new Vampire(monsKind);
                }
                
                
                boolean live=true;
                while(live){
                    
                    if(hero.getSp()>=monster.getSp()){
                        hero.ordAttack(monster);
                        if(monster.getHp()<=0){
                            System.out.println(monster.getName()+"已经被打死");
                            live=false;
                            continue;
                        }
                        monster.ordAttack(hero);
                        if(hero.getHp()<=0){
                            System.out.println(hero.getName()+"【已经被打败】");
                            live=false;
                            continue;
                        }
                    }else{
                        monster.ordAttack(hero);
                        if(hero.getHp()<=0){
                            System.out.println(hero.getName()+"【已经被打败】");
                            live=false;
                            continue;
                        }
                        hero.ordAttack(monster);
                        if(monster.getHp()<=0){
                            System.out.println(monster.getName()+"已经被打死");
                            live=false;
                            continue;
                        }
                    }
                }
                
                if(hero.getHp()<=0){
                    hero.setHp(0);
                    System.out.println(hero.getCareer()+"【已经被打败了】");
                    hero.rest();
                }else{
                    hero.setXp((hero.getXp()+monster.getXp()));
                    hero.upLevel();
                }
                hero.show();
                
                break;
            case "r":
                hero.rest();
                hero.show();
                break;
            case "q":
                System.out.println("已经退出");
                flag = false;
                break;

            default:
                break;
            }
        }

    }
    /***/
}

/**玩家创建的游戏角色*/
public class Hero {
    /**英雄的名字*/
    private String name;
    /**英雄的职业*/
    private String career;
    /**英雄的最大血量*/
    private double maxHp;
    /**英雄的血量*/
    private double hp;
    /**英雄的攻击*/
    private double at;
    /**英雄的速度*/
    private double sp;
    /**英雄的当前的经验值*/
    private int xp;
    /**英雄的升级所需的经验值*/
    private int needXp;
    /**英雄当前的等级*/
    private int le;
    
    /*英雄类的构造方法*/
    public Hero(){
        
    }
    
    public Hero(String name){
        this.name=name;
        this.xp=0;
        this.needXp=10;
        this.le=0;
    }
    
    /*英雄类各属性的geter和seter方法*/
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCareer() {
        return career;
    }

    public void setCareer(String career) {
        this.career = career;
    }

    public double getMaxHp() {
        return maxHp;
    }

    public void setMaxHp(double maxHp) {
        this.maxHp = maxHp;
    }

    public double getHp() {
        return hp;
    }

    public void setHp(double hp) {
        this.hp = hp;
    }

    public double getAt() {
        return at;
    }

    public void setAt(double at) {
        this.at = at;
    }
    
    public double getSp() {
        return sp;
    }

    public void setSp(double sp) {
        this.sp = sp;
    }

    public int getXp() {
        return xp;
    }

    public void setXp(int xp) {
        this.xp = xp;
    }

    public int getNeedXp() {
        return needXp;
    }

    public void setNeedXp(int needXp) {
        this.needXp = needXp;
    }

    public int getLe() {
        return le;
    }

    public void setLe(int le) {
        this.le = le;
    }
    
    /*英雄类的其它方法*/

    /**英雄的普通攻击ordinaryAttack*/
    public void ordAttack(Monster monster){
        
        System.out.println(name+"对"+monster.getName()+"造成了"+at+"点伤害");
        if((monster.getHp()-at)<0){
            monster.setHp(0);
        }
        monster.setHp((monster.getHp()-at));
    }
    
    /**英雄的普通技能ordinarySkill*/
    public void ordSkill(Monster monster){
        
    }
    
    /**英雄的特殊技能specialSkill*/
    public void speSkill(Monster monster){
        
    }
    
    /**英雄的升级upLevel*/
    public void upLevel(){
        if(needXp==xp){
            System.out.println("【恭喜你升级了】");
            le++;
            needXp+=10*le;//1-10,2-20,
            maxHp+=2*le;
            hp=maxHp;
            at+=le;
            sp+=1;
        }
    }
    
    /**英雄的属性展示*/
    public void show(){
        System.out.println("名字:--"+name);
        System.out.println("职业:--"+career);
        System.out.println("血量:--"+hp);
        System.out.println("攻击:--"+at);
        System.out.println("经验:--"+xp);
        System.out.println("升级所需的经验:--"+needXp);
        System.out.println("等级:--"+le);
    }
    
    /**英雄的休息方法
     * @throws InterruptedException */
    public void rest() throws InterruptedException{
        System.out.println("【开始休息】");
        for (int i = 0; i < 5; i++) {
            Thread.sleep(1000);
            System.out.print(".");
        }
        System.out.println();
        hp=maxHp;
        System.out.println("休息完毕,状态恢复了");
    }
    

/**玩家在游戏中遇到的怪物*/
public class Monster {
    /**怪物的名字*/
    private String name;
    /**怪物的种类*/
    private String kind;
    /**怪物的血量*/
    private double hp;
    /**怪物的攻击*/
    private double at;
    /**怪物的速度*/
    private double sp;
    /**怪物被打死后得到的经验*/
    private int xp;
    /**怪物被打死后得到的金币*/
    private int mo;
    
    /*怪物的构造方法*/
    public Monster(){
        
    }
    public Monster(String kind){
        this.kind=kind;
        
    }
    
    /*怪物的geter和seter方法*/
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getKind() {
        return kind;
    }
    public void setKind(String kind) {
        this.kind = kind;
    }
    public double getHp() {
        return hp;
    }

    public void setHp(double hp) {
        this.hp = hp;
    }

    public double getAt() {
        return at;
    }

    public void setAt(double at) {
        this.at = at;
    }
    
    public double getSp() {
        return sp;
    }
    public void setSp(double sp) {
        this.sp = sp;
    }
    public int getXp() {
        return xp;
    }

    public void setXp(int xp) {
        this.xp = xp;
    }

    public int getMo() {
        return mo;
    }

    public void setMo(int mo) {
        this.mo = mo;
    }
    
    /*怪物类的其它方法*/
    

    /**怪物的普通攻击ordinaryAttack*/
    public void ordAttack(Hero hero){

        System.out.println(name+"对"+hero.getName()+"造成了"+at+"点伤害");
        if((hero.getHp()-at)<0){
            hero.setHp(0);
        }
        hero.setHp((hero.getHp()-at));
    }
    
    /**怪物的普通技能ordinarySkill*/
    public void ordSkill(Hero hero){
        
    }
    
    /**怪物的普通技能specialSkill*/
    public void speSkill(Hero hero){
        
    }

/**法师*/
public class Mage extends Hero{
    
    /**法师类的构造方法*/
    public Mage(String name){
        super(name);
        setCareer("法师");
        setMaxHp(4);
        setHp(getMaxHp());
        setAt(8);
        setSp(2);
    }
    
    /**法师的特殊技能specialSkill*/
    public void speSkill(Monster monster){
        
    }
}

/**刺客*/
public class Assassin extends Hero {
    /**刺客类的构造方法*/
    public Assassin(String name){
        super(name);
        setCareer("刺客");
        setMaxHp(3);
        setHp(getMaxHp());
        setAt(9);
        setSp(3);
    }
    
    /**刺客的特殊技能specialSkill*/
    public void speSkill(Monster monster){
        
    }
}

/**战士*/
public class Warrior extends Hero {
    /**战士类的构造方法*/
    public Warrior(String name){
        super(name);
        setCareer("战士");
        setMaxHp(7);
        setHp(getMaxHp());
        setAt(3);
        setSp(1);
    }
    
    /**战士的特殊技能specialSkill*/
    public void speSkill(Monster monster){
        
    }
}

/**骷髅*/
public class Skull extends Monster {
        
    /**骷髅的构造方法*/
    public Skull(String kind){
        super(kind);
        setName("小怪骷髅");
        setHp(1);
        setAt(1);
        setSp(1);
        setXp(1);
        setMo(1);
    }
}


/**野兽*/
public class Beast extends Monster {
    /**野兽的构造方法*/
    public Beast(String kind){
        super(kind);
        setName("精英怪野兽");
        setHp(5);
        setAt(5);
        setSp(5);
        setXp(5);
        setMo(5);
    }
}

/**吸血鬼*/
public class Vampire extends Monster {
    
    /**吸血鬼的构造方法*/
    public Vampire(String kind){
        super(kind);
        setName("boss怪吸血鬼");
        setHp(10);
        setAt(10);
        setSp(10);
        setXp(10);
        setMo(10);
    }
}

 评论