65.9K
CodeProject 正在变化。 阅读更多。
Home

HexaLines - 原始策略益智游戏

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (8投票s)

2012年10月17日

CPOL

6分钟阅读

viewsIcon

21290

热门游戏的最新版本,支持多点触控

引言

HexaLines 是一款经典的策略益智游戏。我于三年前(2009年6月)开始开发它。一年后,它发布了适用于旧款 Windows Mobile 手机的版本。该游戏画面非常简单,但重玩性极佳。在当时的平台(2010年7月)上,它非常受欢迎(考虑到该平台的规模),在 PocketGear 上位列 畅销应用/游戏排行榜第4名

但将这款游戏移植到其他平台花费了很长时间。游戏是用 C# 和 .NET Compact Framework 编写的,所有图形渲染都通过标准的 GDI 绘图调用(如 DrawLineFillPolygon)完成。整个游戏仅由线条和其他矢量对象组成,有一些简单的动画,但不多。

游戏新版本

几个月前,我决定刷新画面并为游戏注入新的活力。我选择了 XNA Framework 作为新技术。我之前有过使用它的经验,并希望通过 MonoGame 项目可以轻松地将游戏移植到其他平台。

目前,我们正在完成这款游戏的最终版本(我的兄弟 Josef 协助我完成了图形部分)。第一个版本已 在 Windows 8 "Metro" 商店中提供。它提供了扎实的游玩体验,尽管许多期望的功能仍缺失(在线分数、其他游戏模式等)。

该游戏尚未提供桌面 PC 版本,也未提供 Windows Phone 或其他平台版本。我们想先完成一些事情,例如实现自动保存,或“回退”一步游戏的功能。

可能的改进

我们希望桌面版本能在短时间内完成。它肯定需要一些改进,但不需要太多。在该游戏中加入多点触控支持将非常棒——无论是在触摸屏上,还是在多点触控触控板上。捏合缩放手势可以缩放地图,双指拖放可以移动地图。简单的拖动手势用于旋转单元格。

另一个非常有趣的功能将是陀螺仪/加速度计支持。单元格下方的阴影会随着您倾斜设备的方向而移动(看起来会非常漂亮且具有伪 3D 效果)。我们甚至可以为这款游戏添加基于 GPS 的游戏机制,或在线多人模式。我们甚至还没有考虑 NFC!测试设备将极大地帮助我们(我们还没有平板电脑,也没有任何带触摸屏的设备——照片上的那个只是借给我们几天)。

当然,对我们来说最有趣的部分将是将这款游戏提交到 Intel AppUp 商店并有可能在那里销售!

游戏规则

那么,这款游戏到底是怎么玩的?游戏规则看起来很复杂,但实际上并非如此。每个用户都可以在游戏内找到交互式教程。

HexaLines 是一款 2D 策略游戏,支持一到三名玩家。您可以与电脑或朋友对战。玩家在地图上放置六边形单元格。从中心单元格开始,三种颜色流出。您的目标是用您的颜色尽可能多地填充内部路径。最长的路径获胜……您可以在右下角看到您的分数,以及下一个将出现的单元格(就像在俄罗斯方块游戏中一样)。

玩家轮流进行。每回合您可以添加一个新的单元格到地图上,或者旋转一些单元格。每个单元格都有彩色或灰色的背景(您只能旋转背景与您的颜色相同或中性灰色的单元格)。

 

玩家还可以互相伤害。:) 如果您将一种颜色覆盖到另一种颜色上,它将破坏相邻的单元格。如果您将颜色直接覆盖到对手的源头上,将消灭对手。当整个地图被单元格填满,或者只有一名玩家存活时,游戏结束。

这是一款非常棒的动作游戏,如果玩家不留意自己的单元格,可能会很快输掉。另一方面——即使是处于劣势的玩家也可以扭转乾坤!游戏包含建造、保护、竞争和攻击等元素。您可以观看游戏玩法视频(还不是最终版本)

游戏玩法视频: http://www.youtube.com/watch?v=7tUqdZlMOiY

实现

这款游戏的实现也非常有趣。:) 每个单元格都由多个位图层(背景、边框、反射)以及一些“矢量”层组成。内部线条由许多小三角形构成,它们是在游戏中动态生成的。

为了优化性能,所有单元格的位图部分都被烘焙到一个更大的纹理(精灵表)中。与 GPU 的通信更快,因为我们不需要在每一帧发送多个纹理,只需要发送这一个。

移植到桌面 Windows

更新于 2012年11月30日: 该游戏是从 Windows 8 Metro (WinRT) 版本移植过来的,该版本使用跨平台框架 MonoGame 编写。对于桌面版本,我使用了原始的 XNA 4.0。用户界面基本保持不变,唯一的变化是文件保存(桌面版没有远程存储),我需要微调一些 DPI 处理并添加多点触控支持(现在在 Windows 7 上也可以工作!)。我还添加了一个新的“退出”按钮(在桌面应用中无法进行关闭手势,但在 Windows 8 Metro 中可以),并更改了消息对话框(运行新游戏/继续游戏)。

对于数据保存,我使用了 IsolatedStorageSettings桌面实现。效果非常好。

多点触控支持有些困难——XNA 4.0 本身不支持多点触控,它在 RTM 版本中是可以工作的,但 最终版本中未包含。所以需要深入研究。:) 我需要使用 Windows 7 多点触控 .NET 互操作示例库。它工作得差不多,但在 ultrabook 上的触摸体验并不好。XNA 的游戏循环大约每秒运行 60 次。但事件驱动的互操作 API 可能更快,所以在一个游戏帧中,有时会同时调用 Pressed 事件和 Moved 事件(而游戏循环只看到第二个)。所以我需要做一些缓存。而且我还需要将所有触摸位置乘以选定的系统DPI

public List<TouchLocation> InteropTouches = new List<TouchLocation>();
private readonly Windows7.Multitouch.TouchHandler touchHandler;

public WindowsTouchHelper(GameWindow window)
{
    try
    {
        // Initializes handlers
        InteropTouches.Clear();
        touchHandler = Factory.CreateHandler<Windows7.Multitouch.TouchHandler>(window.Handle);
        touchHandler.TouchDown += OnTouchDownHandler;
        touchHandler.TouchMove += OnTouchMoveHandler;
        touchHandler.TouchUp += OnTouchUpHandler;

        // Load actual screen DPI
        using (Graphics graphics = Graphics.FromHwnd(window.Handle))
        {
            dpiCoef.X = graphics.DpiX / 96f;
            dpiCoef.Y = graphics.DpiY / 96f;
        }
    }
    catch { }
}

最后一个问题是如何准备 Intel AppUp 的安装程序。:) 它需要包含 XNA 以及游戏本身。并且它需要一些“静默安装”的要求,因此标准的 ClickOnce 解决方案不适用。但我使用了 这个说明列表(只为 XNA 4.0 更改了一些值),最终顺利完成。提交过程快速而顺畅。

摘要

更新于 2012年11月30日: 该游戏现已可在 Intel AppUp 上下载!快来试试吧。:)

我们希望您喜欢这款游戏,并支持我们进行后续开发。如有任何疑问,请随时发送给我们!

我们还在开发我们其他项目的 PC 版本——例如,Windows Phone 上的游戏 Glow Arkanoid,或应用 Handwrite Notes

© . All rights reserved.