学习Java时的笔记心得——城堡小游戏
2020-03-06 11:02
393 查看
在B站上看了浙江大学翁凯老师的Java进阶课,其中有一个城堡小游戏,感觉很有意思,我就跟着老师一起写。
翁凯老师的Java进阶课
package Game; import java.util.HashMap; public class Room { private String description;//房间信息 HashMap<String,Room> exits = new HashMap<String,Room>();//创建哈希表,一个方向一个房间 public Room(String description){ this.description = description; } public void setExit(String dir,Room room){//存放位置信息:一个房子周围有什么 exits.put(dir, room); } public String getExitdesc(){ //哪个方向可以走 StringBuffer sb = new StringBuffer(); for(String dir :exits.keySet()) { sb.append(dir); sb.append(" "); } return sb.toString(); } public Room getExit(String dir) { //进入另一个方向的房间 return exits.get(dir); } public String toString() { return " "+description; } }
这是一个Room的类。其中用了HashMap来表示一个方向有一个Room,首先用构造函数构造出一个房间的信息,然后用HashMap来存放这个房子的四周都有什么,HashMap中有一个KeySet()方法,可以获取哪个方向可以走。
package Game; import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; public class Game { private Room currentRoom;//现在所在的房间 HashMap<String,Header> headers = new HashMap<String,Header>(); HashSet<String> list = new HashSet<String>(); public Game(){ creat(); headers.put("go", new HeaderGo(this)); headers.put("help", new HeaderHelp(this)); headers.put("bye", new HeaderBye(this)); } public void creat(){ //制造各个房间 Room outside, lobby, pub, study, bedroom; // 制造房间 outside = new Room("城堡外"); lobby = new Room("大堂"); pub = new Room("小酒吧"); study = new Room("书房"); bedroom = new Room("卧室"); // 初始化房间的出口 outside.setExit("east",lobby); outside.setExit("south",study); outside.setExit("west",pub); lobby.setExit("east", outside); study.setExit("north",outside); study.setExit("south",bedroom); bedroom.setExit("west",study); currentRoom = outside; // 从城堡门外开始 } public void Welcome(){ System.out.println(); System.out.println("欢迎来到旅行社!"); System.out.println("这是一个超级无聊的游戏。"); System.out.println("如果需要帮助,请输入 'help' 。"); System.out.println(); System.out.println("现在你在" + currentRoom); System.out.print("可以走的方向有:"); System.out.print(currentRoom.getExitdesc()); } public void play(){ Scanner in = new Scanner(System.in); while ( true ){ String line = in.nextLine(); String[] words = line.split(" "); //将输入的内容用空格分割成数组,创建相应的Header,将自己(Game类)传过去 Header header = headers.get(words[0]); String value = ""; if(words.length > 1){ value = words[1]; list.add(currentRoom.toString()); } if(header != null){ //将方向传入相应的类里 header.doCmd(value); //isBye为true则跳出循环 if(header.isBye()) break; } } } public void printBye(){ System.out.println("旅行到此结束,再见!"); System.out.println("此次旅行经过的地点有:"+list.toString()); } public void printGo(String direction){ Room nextRoom = null; if(direction.equals("north")){ nextRoom = currentRoom.getExit(direction); } if(direction.equals("east")){ nextRoom = currentRoom.getExit(direction); } if(direction.equals("south")){ nextRoom = currentRoom.getExit(direction); } if(direction.equals("west")){ nextRoom = currentRoom.getExit(direction); } if(nextRoom == null){ System.out.println("那个方向没有东西"); }else{ currentRoom = nextRoom; System.out.println("你现在在" + currentRoom); System.out.print("可以走的方向有: "); System.out.print(currentRoom.getExitdesc()); System.out.println(); } } public static void main(String[] args) { Game game = new Game(); game.Welcome(); game.play(); game.printBye(); } }
游戏实现类Game。这里将操作都封装到Header类里面,Header里是一个父类,规定着所做的操作,每个操作具体做的事情(HeaderGo,HeaderHelp,HeaderBye)为子类继承这个Header类。游戏在初始化时,用户输入相应的操作将自己传到相应的类里。代码如下:
package Game; public class Header { protected Game game; public Header(Game game){ this.game = game; } public void doCmd(String name){} public boolean isBye(){return false;} }
package Game; public class HeaderGo extends Header { public HeaderGo(Game game) { super(game); } @Override public void doCmd(String name) { game.printGo(name); }
以上代码HeaderGo类重写了父类的doCmd方法,这里的game是游戏在初始化时,用户输入相应的操作将自己传到HeaderGo的类里。
package Game; public class HeaderHelp extends Header { public HeaderHelp(Game game) { super(game); } @Override public void doCmd(String name) { System.out.println("迷路了吗?你可以做的命令有:go bye help"); System.out.println("如:\tgo east"); } }
以上代码HeaderHelp类重写了父类的doCmd方法,同样的,这里的game是游戏在初始化时,用户输入相应的操作将自己传到HeaderHelp的类里。
package Game; public class HeaderBye extends Header { public HeaderBye(Game game) { super(game); } @Override public boolean isBye() { return true; } }
这里有一个isBye()方法,它确定了用户的输入是否为Bye,另外两个具体类(HeaderGo、HeaderHelp)并没有实现这个方法,他们会调用父类的isBye()。
除此之外,我自己加了一个HashSet,用来存放经过的地点。因为HashSet的集合没有重复的元素,所以我感觉用HashSet也比较合理。
第一次写,可能里面很多东西没有说明白,请多多见谅,本人也是小白一个,希望我们共同进步、共同成长。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- java的学习笔记——一个城堡小游戏
- 黑马程序员—13—java基础:有关集合类的学习笔记和心得体会
- 黑马程序员—7—Java基础:有关异常学习笔记和学习心得体会
- 黑马程序员—12—java基础:有关字符串的学习笔记和学习心得体会
- 黑马程序员—17—java基础:有关API的使用学习笔记和心得体会
- Java --Annotation学习心得体会及笔记
- 黑马程序员—15—java基础:有关泛型的学习笔记和学习心得体会
- 黑马程序员—21—java基础:有关网络编程的学习笔记和学习心得体会
- Java --Annotation学习心得体会及笔记
- CoreJava学习笔记深入浅出个人心得———Day1
- 黑马程序员—4—Java基础: 面向对象继承学习笔记和学习心得体会
- JAVA基础学习精简心得笔记整理
- 黑马程序员—23—java面试:有关交通灯学习笔记和学习心得
- 黑马程序员—20—java基础:有关GUI图形用户界面学习笔记和学习心得体会
- 【JAVA学习笔记】-零基础学习JAVA人分享自己的心得(转)
- 黑马程序员—19—java基础:有关File类的学习笔记和学习心得体会
- java小游戏的初步学习笔记
- 黑马程序员—5—Java基础:多态学习笔记和学习心得体会
- JAVA学习笔记:猜数字小游戏
- 个人学习心得笔记之java中"=="