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

yizhihongxing

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的攻击。

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

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

相关文章

  • 在Java中按值调用和按引用调用

    在Java中,传递参数时有两种方式:按值传递和按引用传递。这两种方式有着不同的使用场景和特点,需要进行深入的探讨。 按值传递 在Java中,按值传递是指将数据(即变量的值)复制一份传递给被调用的方法。修改被传递进方法中的值不会影响调用方法前变量的值。 下面是一个按值传递的例子: public class PassByValueExample { public…

    Java 2023年5月20日
    00
  • 如何利用JAVA实现走迷宫程序

    让我们来详细讲解如何利用JAVA实现走迷宫程序的完整攻略: 1. 确定程序的基本思路 走迷宫问题可以采用递归实现。通过回溯法来找到可以走的路径,并标记这条线路是否可用。实现的基本思路是: 从起点开始,逐步判断是否可以朝上、下、左、右四个方向走。 如果可以,就进入下一个格子,并把当前位置标记为可用。 如果不可以,就回溯到之前的格子,继续判断是否还有其他方向可以…

    Java 2023年5月26日
    00
  • 浅析12306售票算法(java版)

    浅析12306售票算法(Java版) 前言 12306售票算法是12306官方网站采用的一种购票算法,它采用的是先进先出的算法思想,即先处理最先提交的订单。在高并发情况下,这种算法能够确保订单售出的公平性,防止订单重复抢占,提高12306网站的稳定性。 算法流程 用户提交订单,服务器接收到请求后,将订单信息放入到队列中。 售票服务不断地从队列中取出订单。 售…

    Java 2023年5月20日
    00
  • 通过大白话理解微信小程序的授权登录

    下面详细讲解一下“通过大白话理解微信小程序的授权登录”的完整攻略。 什么是微信小程序的授权登录? 微信小程序的授权登录是指通过用户点击同意按钮,将微信用户的个人信息授权给小程序,从而实现小程序与微信用户的关联。通常在小程序的中会出现授权登录的弹窗,询问用户是否授权登录,如果用户同意,小程序就能够获取到用户的微信个人信息。 微信小程序的授权登录步骤 微信小程序…

    Java 2023年5月23日
    00
  • spring boot如何添加拦截器

    首先,为了添加拦截器,我们需要创建一个实现了 HandlerInterceptor 接口的拦截器类,并在 Spring Boot 中添加拦截器配置。以下是具体的步骤: 创建拦截器类 创建一个拦截器类,例如 CustomInterceptor,实现HandlerInterceptor 接口。我们可以在拦截器的生命周期中重写不同的方法以执行相关操作,比如在请求处…

    Java 2023年5月31日
    00
  • Spring Boot thymeleaf模板引擎的使用详解

    感谢你对Spring Boot和Thymeleaf模板引擎的关注。下面是Spring Boot Thymeleaf模板引擎的使用详解攻略: 1. Thymeleaf简介 Thymeleaf是一个现代化的服务器端Java模板引擎,可以将模板渲染成HTML、XML、JavaScript等格式,并提供模板缓存机制,允许HTML页面的热部署。 2. Spring B…

    Java 2023年6月15日
    00
  • 从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate

    下面我将详细讲解“从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate”的完整攻略。 前置要求 在正式进行搭建之前,需要确保你已经安装配置好以下软件: JDK Maven Tomcat IDE(推荐使用IntelliJ IDEA) 步骤一:创建Maven项目 首先,我们需要创建一个Maven项目。在IDE中,找到创建M…

    Java 2023年5月20日
    00
  • Spring Security实现添加图片验证功能

    标题: Spring Security实现添加图片验证功能 正文:Spring Security是一个基于Spring框架的强大的安全框架,提供了身份验证和授权功能。其中,图片验证功能可以帮助我们增强安全性,防止恶意攻击和非法登录。以下是实现添加图片验证功能的完整攻略。 第一步:添加依赖 在项目的pom.xml文件中添加以下依赖: <dependenc…

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