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行代码