2018-2019学年第一学期Java课设--魔塔

Posted lmb171004

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-2019学年第一学期Java课设--魔塔相关的知识,希望对你有一定的参考价值。

目录

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层,让勇士成功地营救出公主。

以上是关于2018-2019学年第一学期Java课设--魔塔的主要内容,如果未能解决你的问题,请参考以下文章

2018-2019学年第一学期Java课程设计

复旦大学2018--2019学年第一学期高等代数I期末考试情况分析

复旦大学2018--2019学年第一学期高等代数在线课程学习情况分析及文字评教信息

Java课设-数字华容道

2018-2019学年研一上学期总结

安卓课设报告