MarbleMaze
传统的游戏变得更加有趣。
引言
这个应用程序的想法属于 All-in-One: Games(多合一:游戏) 类别。
MarbleMaze(弹珠迷宫) 是一款游戏,目标是通过避开障碍物到达目的地。它基于设备的运动传感器(加速计),您必须管理您的运动传感器,以防止您的弹珠掉入洞中。随着级别的增加,复杂性也会增加,到达目的地的时间会减少。这将使游戏更加有趣。任何人都可以挑战其他玩家在固定的时间内到达目的地,如果失败,他/她就输掉游戏。
将有一个选项可以与您所在地区的玩家或国际玩家竞争。借助 GPS,它将搜索特定公里范围内所有想玩的玩家,这样用户就可以自由地与地区或国际玩家一起玩。这只是解释游戏想法的示例图片。更好的游戏设计正在建设中,并将很快上传。
主要特点
- 超过 50 个级别可以玩。
- 区域和国际高分榜,以便用户能够更好地了解他/她的排名
- 一些有用的技巧来提高排名。
- 更好的 UI 设计
- 使用 Windows 运行时处理来自加速计、触摸、鼠标和游戏控制器的输入。
- 三种模式:训练、初级、专家
附加功能
- 背景音乐
- 播放和混合音效
- 不同的颜色弹珠。
使用代码
我将使用 C# 开发这个游戏。
处理加速计输入
它展示了 Update 方法如何轮询加速计并更新组合的输入值。
// for sensors. const float acceleromterScalingFactor = 3.5f;
if (m_accelerometer != nullptr)
{
Windows::Devices::Sensors::AccelerometerReading^ reading =
m_accelerometer->GetCurrentReading();
if (reading != nullptr)
{
combinedTiltX += static_cast<float>(reading->AccelerationX) * acceleromterScalingFactor;
combinedTiltY += static_cast<float>(reading->AccelerationY) * acceleromterScalingFactor;
}
}
检测触摸和鼠标输入
当用户触摸或单击时,会选择一个菜单项。m_pointQueue
跟踪用户触摸或单击屏幕的位置。如果按下任何按钮,则会更新游戏状态。
// Check whether the user choose a button from the UI.
bool anyPoints = !m_pointQueue.empty();
while (!m_pointQueue.empty())
{
UserInterface::GetInstance().HitTest(m_pointQueue.front());
m_pointQueue.pop();
}
// Update the game state if any button was pressed
if (m_startGameButton.IsPressed())
{
SetGameState(GameState::PreGameCountdown);
m_startGameButton.SetPressed(false);
}
if (m_highScoreButton.IsPressed())
{
SetGameState(GameState::HighScoreDisplay);
m_highScoreButton.SetPressed(false);
}
暂停、恢复和重新启动功能
当用户切换离开游戏时,游戏会暂停,并且游戏会保存当前游戏状态并暂停音频播放。 当应用程序恢复时,游戏会恢复音频播放。 当应用程序关闭并在稍后重新启动时,游戏会从其先前的状态恢复。 为了支持暂停和恢复,Marble Maze 定义了 PersistentState
类。
ref class PersistentState
{
public:
void Initialize(
_In_ Windows::Foundation::Collections::IPropertySet^ m_settingsValues,
_In_ Platform::String^ key
);
void SaveBool(Platform::String^ key, bool value);
void SaveInt32(Platform::String^ key, int value);
void SaveSingle(Platform::String^ key, float value);
void SaveXMFLOAT3(Platform::String^ key, DirectX::XMFLOAT3 value);
void SaveString(Platform::String^ key, Platform::String^ string);
bool LoadBool(Platform::String^ key, bool defaultValue);
int LoadInt32(Platform::String^ key, int defaultValue);
float LoadSingle(Platform::String^ key, float defaultValue);
DirectX::XMFLOAT3 LoadXMFLOAT3(Platform::String^ key, DirectX::XMFLOAT3 defaultValue);
Platform::String^ LoadString(Platform::String^ key, Platform::String^ defaultValue);
private:
Platform::String^ m_keyName;
Windows::Foundation::Collections::IPropertySet^ m_settingsValues;
};
MarbleMaze
类包含一个 PersistentState
对象。 MarbleMaze
构造函数初始化此对象,并将本地应用程序数据存储提供为后备数据存储。
m_persistentState = ref new PersistentState();
m_persistentState->Initialize(ApplicationData::Current->
播放背景音乐
if (!m_audio.m_isAudioStarted)
{
m_audio.Start();
}
OnSuspending
方法保存游戏状态并暂停音频。
void MarbleMaze::OnSuspending()
{
SaveState();
m_audio.SuspendAudio();
}
由于此应用程序将从头开始构建,并且处于开发阶段,因此概念、设计 (UI) 和代码的所有方面将尽快上传。
背景
我开发 MarbleMaze 的想法来自于我之前为其他手机开发的游戏。 我已经为 Qt 手机开发了这个游戏,并将相同的逻辑应用于为 Windows 8 桌面开发游戏,并具有高级和一些新功能。
由于我过去两年一直是微软学生合作伙伴。 所以,我从一些 MSP 和 MVP 那里学到了很多。 他们正在帮助我设计和编码。 我也在从 MSDN 网站学习和编写这个应用程序。
请求
您的评论非常有价值,可以帮助我纠正问题并改进我的应用程序,所以请评论这篇文章并帮助我为社会提供一个有价值的游戏。 非常感谢。