前言

5月份的时候参加市里的 Python 创意编程比赛,限定使用的库里包含 pygame,于是就做了个简单的小游戏

开发 Nautical 的时候基本在写前端,所以游戏里很多东西都像 Vue 一样把各种功能写成组件。

游戏画面与设计稿

使用 Adobe XD 进行界面设计

开始页

开始页中的背景是会运动的,抄的去年比赛的主要代码(背景运动)

背景运动的原理是导入两次背景图片,把其中的一个图片进行水平翻转,然后把两张图片放在一起,通过不断改变图片的位置,实现背景的运动。

造船厂(选择船只)

交易界面

游戏界面(航行)

背景就是从 Minecraft 的小地图截出来的(笑

地图编辑器

游戏地图划分原理是把地图划分成若干个小格子,然后把每个格子的信息存储在一个二维数组里,这样就可以通过数组的下标来获取格子的信息。

游戏玩法

购买船只,选择地图,航海,进行贸易

全程仅需鼠标左键操作

下载游玩

  • with python

    1
    2
    3
    4
    git clone https://github.com/jz0ojiang/Nautical.git
    cd Nautical
    pip install pygame
    python main.py
  • without python

    下载 Release 中的 exe 版本

自定义游戏

地图编辑器

1
python mapeditor.py [map]

[map] 为 地图编号,默认为 0

(release 版本)

1
Nautical_MapEditor.exe [map]

(应该能用)

新增/修改地图

修改 _data/maps 下的 json 文件即可

background : 背景图片路径

block: 固定值 请勿修改

spawn: 船只出生点(地图编辑器可以直接进行修改)

A/B/C.sell : 岛屿所出售的商品(为 items.json 中物品的 id)

A/B/C.saleable : 在岛屿中收购价高的商品(会对售价本身溢价)

A/B/C.unsaleable : 在岛屿中收购价低的商品(会低于售价本身)

map.prop : 地图比例

新增/修改物品

_data/items.json 为所有物品的配置

name : 物品名称

price : 物品默认售价

icon : 物品图标路径

id : 物品id,不能重复

新增/修改船只

_data/ships.json 为所有船只配置

name : 船只名称

capacity : 船只容量(可以装载物品的数量)

speed : 船只速度(回合内可以航行的次数)

danger : 船只危险程度(越大越危险)

durable : 船只耐久度(有多抗揍)

max_durable : 船只最大耐久度(通常等于 durable)

icon : 船只图标路径

price : 船只售价

建议

建议只对配置进行修改,新增可能会导致渲染出现问题(懒得写兼容)