目录
Magic-Towers
一、团队课程设计博客链接
团队博客地址
二、个人负责模块或任务说明
我负责Controller类
- 玩家数据I/O流
- 游戏内部监听器:存档、选角色、退出
- 游戏地图数据
- 编写团队博客
三、自己的代码提交记录截图
四、自己负责模块或任务详细说明
数据I/O流功能
/*
游戏过程中,玩家由于各种原因需要退出终止游戏,但是还想下次继续游戏。所以设计了游戏进度的保存/读取的功能。使用了FileOutputStream、BufferedOutputStream、 ObjectOutputStream结合使用。
*/
public class PlayerFile {
public static final void savePlayer(Player player) {//保存玩家数据
//try-with-resource
try ( FileOutputStream out = new FileOutputStream("player.dat");
BufferedOutputStream bout = new BufferedOutputStream(out);
ObjectOutputStream obout = new ObjectOutputStream(bout);) {
obout.writeObject(player);
} catch (IOException e) {
}
}
public static final Player readPlayer() {//读取玩家数据
Player player = null;
try (FileInputStream in = new FileInputStream("player.dat");
BufferedInputStream bin = new BufferedInputStream(in);
ObjectInputStream obin = new ObjectInputStream(bin);) {
player = (Player) obin.readObject();
} catch (IOException e) {
} catch (ClassNotFoundException e) {
}
return player;
}
}
游戏动作监听器功能(部分)
/**
* 人物碰触格子
*/
private void contact(int x, int y) {
// 坐标对应第y行第x列
if (mapData[y][x].contact(player)) {
// 可以通过时
Component component = mapView.getComponent(x + y * 11);
// 获取该位置组件并判断是否为门
if (mapData[y][x] instanceof Door) {
mapData[y][x] = Floor.FLOOR;
inofView.update();
mainView.setVisible(true);
((DoorView) component).show();
return;
}
mapView.remove(playerView);
mapView.add(new FloorView(), player.getX() + player.getY() * 11);
mapView.remove(x + y * 11);
mapView.add(playerView, x + y * 11);
player.setCoord(x, y);
// 通过后显示提示
showInof(x, y);
if (mapData[y][x].getType() != Stairs.STAIRS_TYPE_DOWN_BIRTH
&& mapData[y][x].getType() != Stairs.STAIRS_TYPE_UP_BIRTH) {
mapData[y][x] = Floor.FLOOR;
player.getMapDataList().get(player.getNowFloor() - 1)[y][x] = 0;
}
} else {//不能通过
noEntryInof(x, y);
}
}
五、课程设计感想
本次课设对我来说还是比较有挑战性的,但因为对本游戏充满了兴趣,还是动力满满的完成的我所负责的部分。比较遗憾的是我们组并未完成网络或者数据库上的技术难点,不过我们组的界面以及人物动画是值得我们骄傲的,目前的游戏地图只到了10层还属于比较简易的难度,我们计划以后将地图扩展到50层,让勇士成功地营救出公主。