[java编程日记]捕鱼达人(二)

简介: [java编程日记]捕鱼达人
public interface MenuInterface {
    /**
     * 输出选项菜单。
     * 格式可以参考下面的:
     * ================
     *   1.选择普通子弹
     *   2.选择十字子弹
     *   3.选择叉号子弹
     *   4.发出子弹
     *   5.增加最大鱼条数
     *   ===============
     *   请选择操作选项:
     */
    void printSelection();
    /**
     * 输出当前池塘中的鱼分布情况
     * 格式可以参考如下:
     * ========捕鱼达人=======
     *   |—1——2——3——4—|
     * 1|将鱼  |        |士鱼   |          |
     * 2|         |         |          |          |
     * 3|相鱼  |         |          |         |
     * 4|         |         |          |          |
     * ====================
     *
     * 表示第1行第1列有一条将鱼,
     * 第1行第3列有一条士鱼,
     * 第3行1列有一条相鱼,其他地方为空
     */
    void printPool();
    /**
     * 输出炮台剩余金钱、当前使用的子弹
     * 参考如下:
     *
     * 剩余金钱数:100
     * 当前子弹种类:十字弹
     *
     */
    void printBatteryMessage();
    /**
     * 输出所有菜单
     */
    void printMenu();
}

------------------------------------------------------------------------------------------------------------------------

另外的一个类存储位置,flex用来判断是否有鱼,有的话为1,没有的话是0。

public class MyPoint {
    private int row;
    private int col;
    private int flex;
    public MyPoint() {
    }
    public MyPoint(int row, int col, int flex) {
        this.row = row;
        this.col = col;
        this.flex = flex;
    }
    public int getRow() {
        return row;
    }//返回行数
    public void setRow(int row) {
        this.row = row;
    }//设置行数
    public int getCol() {
        return col;
    }//返回列数
    public void setCol(int col) {
        this.col = col;
    }//设置列数
    public int getFlex() {
        return flex;
    }
    public void setFlex(int flex) {
        this.flex = flex;
    }
}

3.方法的实现

用switch语句来进行选择,之后写了增加鱼和移动鱼的方法。

import org.w3c.dom.ls.LSOutput;
import java.awt.*;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
//point 是坐标的位置
public class Main {
    public static void main(String[] args) {
        System.out.println("---------------欢迎来到捕鱼达人------------------");
        System.out.println("---------------作者:    ***------------------");
        System.out.println();
        System.out.println();//第一步,打印欢迎游戏的界面
        /*加载*/
        ArrayList<MyPoint> points = new ArrayList<MyPoint>();//池子的初始化
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                MyPoint a = new MyPoint(i, j, 0);
                points.add(a);
            }
        }//flex 是判定是否有鱼儿,有的话是1,没有的话是0
        //i和j分别是第几行和第几列
        Pool pool = new Pool(9, 9, points);
        ArrayList<Fish> list = new ArrayList<Fish>();//鱼的存储
        Bullet bullet = new Bullet(1, 1, "普通子弹");
        Menu menu = new Menu(600, bullet, points, list);//points是池子表,list是鱼的表
        for (int i = 0; i < 5; i++) {
            AddFish(list, menu);//增加初始的鱼
        }
        menu.printMenu();//第二步,打印总菜单
        System.out.println("请输入您的选择:");
        while (true) {
            int choose;
            Scanner sc = new Scanner(System.in);
            choose = sc.nextInt();//玩家进行选择
            switch (choose) {
                case 1:
                    while (true) {
                        if (menu.money <= 0) {
                            System.out.println("你失败了,请重新来过");
                            break;
                        } else if (menu.money >= 1000) {
                            System.out.println("你赢了,请继续加油");
                            break;
                        }//判断游戏是否结束
                        int ch;
                        menu.printPool();//游戏界面
                        menu.printBatteryMessage();//背包界面,每一次都要显示界面
                        menu.printSelection();//操作界面
                        ch = sc.nextInt();
                        switch (ch) {
                            case 1:
                                Bullet bullet1 = new Bullet(1, 1, "普通子弹");
                                menu.bullet = bullet1;
                                MoveFish(list, menu);
                                break;
                            case 2:
                                Bullet bullet2 = new Bullet(1, 1, "十字子弹");
                                menu.bullet = bullet2;
                                MoveFish(list, menu);
                                break;
                            case 3:
                                Bullet bullet3 = new Bullet(1, 1, "叉号子弹");
                                menu.bullet = bullet3;
                                MoveFish(list, menu);
                                break;
                            case 4:
                                System.out.println("请输入你要攻击的坐标:");
                                int x = sc.nextInt();
                                int y = sc.nextInt();
                                HurtFish(list, menu, x, y);
                                MoveFish(list, menu);
                                break;
                            case 5:
                                AddFish(list, menu);
                                System.out.println("鱼池已经升级");
                                MoveFish(list, menu);
                                break;
                            case 6:
                                menu.money = menu.money + 100;
                                System.out.println("作弊码");
                                MoveFish(list, menu);
                                break;
                            default:
                                System.out.println("选择失败,请重新选择");
                                break;
                        }
                    }
                    choose = 0;
                    break;
                case 0:
                    System.out.println("退出游玩");
                    break;
                default:
                    System.out.println("选择失败,请重新选择");
                    break;
            }
            if (choose == 0) break;
        }
    }

之后来写方法。

增加鱼的方法

 public static void AddFish(ArrayList<Fish> list, Menu menu) {
        int count = list.size();
        if (count > 10) {
            System.out.println("鱼的数目已经达到最大值,增加失败");
            return;
        }//鱼的数量过多
        Fish jiangyu = new Fish();
        Fish shiyu = new Fish();
        Fish xiangyu = new Fish();
        jiangyu.setHP(1);
        jiangyu.setValue(1);
        shiyu.setHP(2);
        shiyu.setValue(2);
        xiangyu.setHP(3);
        xiangyu.setValue(3);//鱼的种类的初始化,创造出三条鱼
        int row = 0, col = 0;
        Random r = new Random();
        while (true) {
            int flag = 1;
            int number = r.nextInt(4) + 1;//生成随机数1~4
            if (number == 1) {
                row = 1;
                col = r.nextInt(9) + 1;
            }
            if (number == 2) {
                row = 8;
                col = r.nextInt(9) + 1;
            }
            if (number == 3) {
                col = 1;
                row = r.nextInt(9) + 1;
            }
            if (number == 4) {
                col = 8;
                row = r.nextInt(9) + 1;
            }
            for (int i = 0; i < list.size(); i++) {
                if ((list.get(i).getRow() == row) && (list.get(i).getCol() == col)) {
                    flag = 0;
                }
                break;
            }//判断生成的位置是否有鱼
            if (flag == 1) {
                break;
            }
        }
        int number = r.nextInt(10) + 1;//生成随机数1~10
        if (number == 1) {
            xiangyu.setRow(row);
            xiangyu.setCol(col);
            list.add(xiangyu);
        } else if (number > 1 && number < 5) {
            shiyu.setRow(row);
            shiyu.setCol(col);
            list.add(shiyu);
        } else if (number >= 5) {
            jiangyu.setRow(row);
            jiangyu.setCol(col);
            list.add(jiangyu);
        }//鱼的添加
        menu.money = menu.money - 20;
        int dex = 0;
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (menu.points.get(dex).getRow() == row && menu.points.get(dex).getCol() == col) ;
                menu.points.get(dex).setFlex(1);
                dex = dex + 1;
            }
        }//遍历池子表,在坐标对应的地方赋值1;
        return;
    }//增加鱼的函数

移动鱼的方法如下

public static void MoveFish(ArrayList<Fish> list, Menu menu) {
        for (int i = 0; i < list.size(); i++) {
            int rol = list.get(i).getRow();
            int col = list.get(i).getCol();
            while (true) {
                list.get(i).move();
                if (list.get(i).getRow() <= 0 || list.get(i).getRow() >= 10) {
                    list.get(i).setRow(rol);
                    list.get(i).setCol(col);
                    continue;
                }//不能移动到池子的外面
                if (list.get(i).getCol() <= 0 || list.get(i).getCol() >= 10) {
                    list.get(i).setRow(rol);
                    list.get(i).setCol(col);
                    continue;
                }//不能移动到池子的外面
                int a = 0;
                int j = 0;
                for (j = 0; j < list.size(); j++) {
                    if (j == i) continue;
                    if ((list.get(j).getRow() == list.get(i).getRow()) && ((list.get(j).getCol() == list.get(i).getCol()))) {
                        list.get(i).setRow(rol);
                        list.get(i).setCol(col);
                        a = 1;//判断器
                        break;
                    }//移动的位置有鱼
                }
                if (a == 1) continue;//不能移动到有鱼的地方
                break;
            }
            //rol 1~9 col 1~9
            //menu.points.get((rol-1) * 9 + col-1).setFlex(0);
            //menu.points.get((list.get(i).getRow()-1) * 9 + list.get(i).getCol()-1).setFlex(1);
        }
    }//移动鱼的函数

攻击鱼的方法如下

 public static void HurtFish(ArrayList<Fish> list, Menu menu, int x, int y) {
        if (menu.bullet.Type == "普通子弹") {
            int hurt = menu.bullet.Power;
            menu.money = menu.money - 1;
            for (int i = 0; i < list.size(); i++) {
                HurtFish1(list, menu, x, y, i, hurt);
            }
            }
            if (menu.bullet.Type == "十字子弹") {
                int hurt = menu.bullet.Power;
                menu.money = menu.money - 5;
                for (int i = 0; i < list.size(); i++) {
                    HurtFish1(list, menu, x, y, i, hurt);
                    HurtFish1(list, menu, x - 1, y, i, hurt);
                    HurtFish1(list, menu, x + 1, y, i, hurt);
                    HurtFish1(list, menu, x, y - 1, i, hurt);
                    HurtFish1(list, menu, x, y + 1, i, hurt);
                }
            }
            if (menu.bullet.Type == "叉号子弹") {
                int hurt = menu.bullet.Power;
                menu.money = menu.money - 5;
                for (int i = 0; i < list.size(); i++) {
                    HurtFish1(list, menu, x, y, i, hurt);
                    HurtFish1(list, menu, x - 1, y - 1, i, hurt);
                    HurtFish1(list, menu, x + 1, y + 1, i, hurt);
                    HurtFish1(list, menu, x - 1, y + 1, i, hurt);
                    HurtFish1(list, menu, x + 1, y - 1, i, hurt);
                }
            }
        }//攻击鱼的函数
    public static void HurtFish1(ArrayList<Fish> list, Menu menu, int x, int y, int i, int hurt) {
        if (list.get(i).getRow() == x && list.get(i).getCol() == y) {
            list.get(i).getDamage(hurt);
            if (!list.get(i).isAlive()) {
                System.out.println("攻击成功,击杀鱼" + "(" + x + "," + y + ")");
                list.remove(i);
                AddFish(list, menu);
                menu.money = menu.money + 20;
                menu.money = menu.money + list.get(i).getValue();
            } else {
                System.out.println("攻击成功,这条鱼" + "(" + x + "," + y + ")" + "还有HP:" + list.get(i).getHP());
            }
            return;
        }
        return;
    }

一个综合案例就这样写完了,其中的思路都很重要,要理清楚对象之间的关机。运行结果:

输入4

输入8 1

谢谢观看,总共1000行代码

目录
打赏
0
0
0
0
6
分享
相关文章
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
12天前
|
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
36 3
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
35 2
Java编程中的异常处理:从基础到高级
在Java的世界里,异常是程序运行中不可忽视的“惊喜”。它们可能突如其来,也可能悄无声息地潜伏。掌握异常处理的艺术,意味着你能够优雅地面对程序的不完美,并确保它即使在风雨飘摇中也能继续航行。本文将引导你理解Java异常的本质,探索捕获和处理这些异常的方法,并最终学会如何利用自定义异常为你的代码增添力量。
|
18天前
|
Java中的多线程编程:从基础到实践
本文深入探讨了Java多线程编程的核心概念和实践技巧,旨在帮助读者理解多线程的工作原理,掌握线程的创建、管理和同步机制。通过具体示例和最佳实践,本文展示了如何在Java应用中有效地利用多线程技术,提高程序性能和响应速度。
52 1
Java 反射机制:动态编程的 “魔法钥匙”
Java反射机制是允许程序在运行时访问类、方法和字段信息的强大工具,被誉为动态编程的“魔法钥匙”。通过反射,开发者可以创建更加灵活、可扩展的应用程序。
36 0
Java中的多线程编程:从基础到进阶
在Java的世界中,多线程编程是一块不可或缺的拼图。它不仅提升了程序的效率和响应性,还让复杂任务变得井然有序。本文将带你领略多线程编程的魅力,从创建线程的基础操作到高级同步机制的应用,再到线程池的高效管理,我们将一步步揭开多线程编程的神秘面纱。无论你是初学者还是有一定经验的开发者,这篇文章都会为你提供新的视角和深入的理解。让我们一起探索Java多线程编程的世界,开启一段精彩的旅程吧!
37 0
AI助理

阿里云 AI 助理已上线!

快来体验一下吧。