JAVA学习之路-简单的城堡游戏(⼀)
简单的⽂字城堡游戏(⼀)
最近在学习后台的⼀些功能,发现⾃⼰的基础不是很牢固,所以想写点⼩程序,巩固⼀下以前学的知识,融合⼀下。
之前在慕课上学的课程中就有⼀个这样的⼩程序,写⼀个简单的⽂字城堡游戏。当时由于学得很匆忙,所以⼀直都没做,这次想起这个,于是就想⽤这个练⼿了。
⾸先先说下需求:
1、每个房间都⼏个出⼝,然后玩家可以通过go命令去到与这个房间相连的其他房间。
2、房间⾥有⼀些物品,玩家可以使⽤之类的。(此项功能后⾯再添加,现在先写好接⼝)
3、每个房间都有⾃⼰描述。
再说下思路吧:
设计房间:
因为需要创建很多房间,所以我们可以写⼀个抽象类,然后让这些所有的房间去继承这个抽象类,然后我们只需要在每个特定的房间中添加⾃⼰不同的属性就⾏了。
然后⼜考虑到在主程序中不能直接访问实体类,所以我便想写⼀个接⼝。
所以各种房间的结构如下:
既然结构出来了,我们就先从顶层开始编写:
⾸先是接⼝,我们知道⼀个房间肯定有出⼝,还要对当前场景进⾏叙述。另外我们前⾯还有个需求是
房间⾥要有物体,虽然不是现在实现,但是我们可以先把功能加上。
所以接⼝的代码便是:
public interface scene {
//设置出⼝
public void setExit(String name,scene room);
//获得出⼝
public String getExit();
//房间中的物体
public void res();
//对当前场景的叙述
public void narration();
}
接下来是抽象类:
抽象类中肯定要把所有房间的所有共性全部写完,所以我们需要在这实现所有房间的基本特性:
对于接⼝中的四个⽅法,物体和对场景的叙述是每个房间特有的,所以我们并不会对这两个⽅法进⾏细写。
那除此之外的四个⽅法,还有什么需要补充的么?
1. 我们需要初始化房间的名字。
先设定⼀个变量⽤来存放对本房间的名字,然后通过toString的⽅法进⾏对房间名字的输出。
2. 需要对当前房间的转换
我们对房间设定了出⼝,那么到底要怎么移动呢?
可以设定⼀个hashMap⽤来存放当前房间紧挨着的其他房间,房间名作为key,⽽变量就作为value,⾄于初始化房间的出⼝我们可以交给实体类⾃⼰来进⾏设计,即⽅法setExit。
⽽在对房间进⾏转换的时候,我们只需要通过传过来的key去寻那个对应的value,然后将现在的房间替换成value就⾏了。即:
//取的房间的⽅向,并转移当前房间
public Room getDirect(String direction){
Room ret=((direction);
return ret;
}
其他的功能基本上实现完了,现在来实现接⼝的⽅法:
setExit():
这个⽅法我们主要交给⼦类去实现,我们只是在这⾥写上将数据传⼊hashMap的⽅法就⾏了。
即HashMap.put(name,room)
getExit():
这个⽅法基本上每个⼦类都⼀样,所以我们只需要在⽗类中编写即可。
这个类的主要功能是将当前房间的的各个出⼝输出到屏幕上,所以我们只需要遍历⼀遍HashMap就⾏了。
res();
narration();
这两个类我们就只是⼦类中进⾏实现,在抽象类中不实现此⽅法。
下⾯是具体的抽象类代码:
public abstract class Room implements scene{
private String description;
private HashMap<String, scene> roomList=new HashMap<>();
//房间初始化,输⼊描述
public Room(String description){
this.description=description;入门的java游戏小程序
}
//单个初始化房间的出⼝
public void setExit(String name,scene room){
roomList.put(name, room);
}
//获得出⼝
public String getExit(){
StringBuffer s=new StringBuffer();
for(String str:roomList.keySet()){
s.append(str);
s.(str));
s.append(" ");
}
if(roomList.isEmpty()){
System.out.println("哈哈哈,这⾥没有出⼝,等死吧你");
}
String();
}
//取的房间的⽅向,并转移当前房间
public Room getDirect(String direction){
Room ret=((direction);
return ret;
}
//输⼊房间描述
@Override
public String toString(){
return this.description;
}
}
⽽在⼦类进⾏实现的时候,我们便只需要实现所有的接⼝和将参数在构造的时候传递给⽗类就⾏了。 下⾯就是构造卧室的⼀个实现类:BedRoom
public class BedRoom extends Room{
public BedRoom() {
super("主卧");
}
@Override
public void res() {
// TODO Auto-generated method stub
}
@Override
public void narration() {
System.out.println("这是最⼤的卧室,有⼀张很⼤的床");
}
}
在正式开始之前,我们需要⼀个类去初始化所有的房间,所以我们可以创建⼀个类Initialization,去初始化所有房间和显⽰欢迎信息以及获取当前所在的房间。代码如下:
public class Initialization {
//初始化当前房间
scene currentRoom;
//显⽰欢迎信息
public void welcome(){
System.out.println();
System.out.println("欢迎来到城堡!");
System.out.println("这是⼀个超级⽆聊的游戏。");
System.out.println("你可以输⼊'go+⽅向'去你想去的⽅向,如go main_bedroom");
System.out.println("你还可以输⼊'bye'结束游戏");
System.out.println("如果需要帮助,请记住输⼊ 'help'");
}
//设定所有房间
public void setRoom(){
//初始化所有的房间
scene bedroom=new BedRoom();
scene lobby=new Lobby();
scene secBed=new secBedroom();
scene secBal=new secBalcony();
scene thBed=new thBedroom();
scene balcony=new Balcony();
scene bacground=new Background();
//⼤堂初始化
lobby.setExit("bacground", bacground);
lobby.setExit("thr_bed", thBed);
lobby.setExit("sec_bed", secBed);
lobby.setExit("main_bed", bedroom);
//主卧室初始化
bedroom.setExit("lobby", lobby);
bedroom.setExit("balcony", balcony);
//次卧1初始化
secBed.setExit("lobby", lobby);
secBed.setExit("sec_Bal", secBal);
//次卧2的初始化
thBed.setExit("lobby", lobby);
thBed.setExit("balcony", balcony);
//⼤阳台的初始化
balcony.setExit("main_bed", bedroom);
balcony.setExit("thr_room", thBed);
//次卧1的阳台初始化
secBal.setExit("bacground", bacground);
//设定起始房间
currentRoom=bedroom;
}
//获得当前房间
public scene getCurrentRoom(){
return currentRoom;
}
}
下⾯就可以写主类了,我们主要需要编写
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论