Java基于面向对象实现一个战士小游戏

Java基于面向对象实现一个战士小游戏

思路

  1. 定义一个 Warrior 类,该类具有以下属性:

  2. 姓名

  3. 体力值
  4. 攻击值
  5. 防御值

该类还应该具有以下方法:

  • attack(Warrior) 表示攻击另一个战士,需要传入被攻击的战士对象作为参数
  • defense() 表示进行防御
  • rest() 表示进行休息,恢复一定的体力值

  • 编写 Game 类,该类作为游戏的主类,应该具有以下属性:

  • player1 表示玩家1所选的战士

  • player2 表示玩家2所选的战士
  • round 表示当前回合数

该类还应该具有以下方法:

  • getPlayer1()getPlayer2() 分别返回玩家1和玩家2所选的战士对象
  • start() 表示游戏开始
  • roundStart() 表示每个回合开始
  • roundEnd() 表示每个回合结束
  • attack() 表示当前玩家进行攻击
  • defense() 表示当前玩家进行防御

代码实现

Warrior

public class Warrior {
    private String name;
    private int health;
    private int attack;
    private int defense;

    public Warrior(String name, int health, int attack, int defense) {
        this.name = name;
        this.health = health;
        this.attack = attack;
        this.defense = defense;
    }

    public void attack(Warrior enemy) {
        int damage = this.attack - enemy.defense;
        if (damage > 0) {
            enemy.health -= damage;
            System.out.println(this.name + "攻击了" + enemy.name + ",造成了" + damage + "点伤害。");
        } else {
            System.out.println(this.name + "攻击了" + enemy.name + ",但是" + enemy.name + "的防御值太高了,没有造成任何伤害。");
        }
    }

    public void defense() {
        System.out.println(this.name + "进行了防御。");
    }

    public void rest() {
        this.health += 10;
        System.out.println(this.name + "进行了休息,恢复了10点体力值,当前体力值为" + this.health + "。");
    }

    public boolean isAlive() {
        return this.health > 0;
    }

    public String getName() {
        return this.name;
    }

    public int getHealth() {
        return this.health;
    }

    public int getAttack() {
        return this.attack;
    }

    public int getDefense() {
        return this.defense;
    }
}

Game

import java.util.Random;
import java.util.Scanner;

public class Game {
    private Warrior player1;
    private Warrior player2;
    private int round;

    public Game(Warrior player1, Warrior player2) {
        this.player1 = player1;
        this.player2 = player2;
        this.round = 1;
    }

    public Warrior getPlayer1() {
        return this.player1;
    }

    public Warrior getPlayer2() {
        return this.player2;
    }

    public void start() {
        System.out.println("游戏开始!");
        Scanner scanner = new Scanner(System.in);

        while (player1.isAlive() && player2.isAlive()) {
            System.out.println("第" + round + "回合开始," + player1.getName() + " vs " + player2.getName() + ":");
            roundStart();
            System.out.println("第" + round + "回合结束。");
            round++;
            System.out.println("按任意键继续...");
            scanner.nextLine();
        }

        if (player1.isAlive()) {
            System.out.println(player1.getName() + "获胜!");
        } else {
            System.out.println(player2.getName() + "获胜!");
        }
    }

    private void roundStart() {
        Warrior current = getCurrentPlayer();
        System.out.println(current.getName() + "的回合:");
        System.out.println(current.getName() + ",请选择你的行动:");
        System.out.println("1. 攻击");
        System.out.println("2. 防御");
        System.out.println("3. 休息");

        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();

        switch (choice) {
            case 1:
                attack();
                break;
            case 2:
                defense();
                break;
            case 3:
                current.rest();
                break;
            default:
                System.out.println("无效的选择!");
        }
    }

    private void roundEnd() {
        System.out.println("回合结束,双方体力值:");
        System.out.println(player1.getName() + ": " + player1.getHealth());
        System.out.println(player2.getName() + ": " + player2.getHealth());
    }

    private void attack() {
        Warrior current = getCurrentPlayer();
        Warrior enemy = getEnemy();

        current.attack(enemy);
    }

    private void defense() {
        Warrior current = getCurrentPlayer();

        current.defense();
    }

    private Warrior getCurrentPlayer() {
        int random = new Random().nextInt(2);
        return random == 0 ? player1 : player2;
    }

    private Warrior getEnemy() {
        Warrior current = getCurrentPlayer();
        return current == player1 ? player2 : player1;
    }
}

示例说明

以下是两个示例。

示例1:玩家1攻击玩家2

public class Main {
    public static void main(String[] args) {
        Warrior player1 = new Warrior("张三", 100, 20, 10);
        Warrior player2 = new Warrior("李四", 100, 15, 15);

        Game game = new Game(player1, player2);
        game.start();
    }
}

这个例子中,玩家1的攻击值(20)比玩家2的防御值(15)高,所以玩家1能够对玩家2造成伤害。假设玩家1选择攻击操作,会输出以下信息:

张三的回合:
张三,请选择你的行动:
1. 攻击
2. 防御
3. 休息
1
张三攻击了李四,造成了5点伤害。
回合结束,双方体力值:
张三: 100
李四: 95
按任意键继续...

可以看到,玩家1攻击了玩家2,对其造成了5点伤害。

示例2:玩家2防御

public class Main {
    public static void main(String[] args) {
        Warrior player1 = new Warrior("张三", 100, 20, 10);
        Warrior player2 = new Warrior("李四", 100, 15, 15);

        Game game = new Game(player1, player2);
        game.start();
    }
}

这个例子中,假设玩家1选择攻击操作,玩家2选择防御操作,会输出以下信息:

张三的回合:
张三,请选择你的行动:
1. 攻击
2. 防御
3. 休息
1
张三攻击了李四,但是李四的防御值太高了,没有造成任何伤害。
回合结束,双方体力值:
张三: 100
李四: 100
按任意键继续...

可以看到,玩家2选择了防御操作,成功抵挡住了玩家1的攻击。

阅读剩余 82%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基于面向对象实现一个战士小游戏 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java实现实时通信聊天程序

    Java 实现实时通信聊天程序的完整攻略,大致分为以下几个步骤: 确定使用的通信协议:可以使用 TCP 或者 UDP 协议,如果需要考虑网络稳定性和通信质量,建议选择 TCP 协议;如果需要考虑实时性和消息传输速度,建议选择 UDP 协议。 设计程序的架构:根据不同的需求和功能,可以选择不同的架构。最常用的是客户端-服务器架构,可以使用 Java 提供的 S…

    Java 2023年5月19日
    00
  • Java调试器的作用是什么?

    Java调试器是帮助Java程序员识别和纠正程序错误或问题的工具。使用调试器可以单步执行程序,查看代码执行状态和变量的值,并在运行时发现程序错误和异常。 以下是使用Java调试器的步骤: 1. 配置调试器 在使用Java调试器之前,需要将调试器连接到正在运行的Java进程。一般来说,可以使用IDE(集成开发环境)来连接调试器。 以Eclipse为例,可以通过…

    Java 2023年5月11日
    00
  • 一文带你认识java中的String类

    String类在Java中是一个非常重要的类,它用来表示字符串,下面就一文带你认识Java中的String类。 1. String类的概述 在Java中,字符串是一个非常常见的数据类型。而String类则是Java提供的处理字符串的主要类。String类是不可变的,也就是说一旦创建了一个String对象,便不能再进行修改。每进行一次字符串的操作,都会创建一个…

    Java 2023年5月26日
    00
  • SpringBoot整合SpringSecurity实现认证拦截的教程

    首先,我们需要确保具备以下的环境: JDK 1.8+ Maven IntelliJ IDEA(或其他IDE) 接下来,我们可以按照以下步骤进行SpringBoot整合SpringSecurity实现认证拦截: 步骤一:创建SpringBoot工程 我们可以使用SpringBoot官方提供的Spring Initializr来创建工程,也可以使用IDEA的Ne…

    Java 2023年5月20日
    00
  • Jackson中json格式的字符串与对象的互相转换方式

    为了方便转换,Jackson提供了一些类,可以将JSON字符串自动转换为Java对象和将Java对象自动转换为JSON格式字符串。以下是一些常用的Jackson转换类: ObjectMapper类:是Jackson提供的最常用的转换类。它可以将Java对象实例序列化为JSON格式字符串,并将JSON格式字符串反序列化为Java对象。该类包含序列化和反序列化的…

    Java 2023年5月26日
    00
  • 图解Java经典算法希尔排序的原理与实现

    图解Java经典算法希尔排序的原理与实现 一、希尔排序介绍 希尔排序是一种排序算法,最初由 Donald Shell 在1959年提出。它是插入排序的一种高效改进版本。希尔排序通过比较相距一定间隔的元素进行部分排序,然后缩小间隔,再进行部分排序,不断缩小间隔直至间隔缩小为1时完成高效排序。 二、希尔排序原理 希尔排序是在插入排序的基础上进行优化,插入排序是将…

    Java 2023年5月19日
    00
  • 内存管理包括哪些方面?

    以下是关于内存管理包括哪些方面的完整使用攻略: 内存管理包括哪些方面? 内存管理是指操作系统或程序运行时如何管理计算机的内存资源。内存管理包括以下几方面: 内存分配 内存分配是指在程序运行时,为程序分配内存空间。内存分配的方式有多种,例如静态内存分配、动态内存分配等。 内存回收 内存回收是指在程序运行时,当不再需要使用某个内存空间时,将该内存空间释放出来,以…

    Java 2023年5月12日
    00
  • jsp response.sendRedirect不跳转的原因分析及解决

    针对“jsp response.sendRedirect不跳转的原因分析及解决”,以下是完整攻略: 1. 确认response.sendRedirect是否执行 首先要确认response.sendRedirect是否真正执行了。可以通过在response.sendRedirect前后,分别加入System.out.println语句,输出一些信息,在控制台…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部