登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 毕业论文 > 电子信息类 > 电子信息工程 > 正文

基于Windows的游戏机手柄应用程序的设计与实现毕业论文

 2020-03-28 12:18:26  

摘 要

本系统按照硬件开发程序设计的基本流程,遵循系统开发生命周期法和结构化方法,基于C#语言设计并实现了基于Windows的游戏手柄应用程序。本程序采用Windows API捕获手柄信息,在Visual Studio 2010中完成了程序的编写和编译。程序主要实现了在Windows系统中游戏手柄按键返回。

本文首先分析了课题的研究背景,然后通过研究游戏手柄的诞生及其发展历史来了解游戏手柄的发展方向和特点,并对手柄替代工业操纵杆的可行性进行了分析。在程序编写阶段,对两种API下不同的消息捕获方式进行了相应的了解,并选择了被动方式来编写程序,并在程序编写完成后对其进行了相应的测试。测试结果表明,本程序能够实现所需的功能,并且运行状况良好。

关键词:游戏手柄;Windows API;C#

Abstract

窗体顶端

The system follows the basic process of hardware development program designing and follows the system life cycle approach and structured approach. Design and implement Windows-based applications joystick based on the C # programming language. The program uses Windows API to capture the information of joystick. The program was writed and compiled by Visual Studio 2010. The program mainly implements the return of joystick keys in Windows system

This paper, at the beginning, analyzes the research background of the topic, and then learns the development direction and characteristics of the joystick by studying the birth of the joystick and its development history, and analyzes the feasibility of replacing the industrial joystick with a handle. In the program writing phase, corresponding understanding of different message capture methods under the two API was made, and a passive method was chosen to write the program. After the program was written, it was tested accordingly. The test results show that this program can achieve the required functions and is in good condition.

Keyword : Joystick; Windows API;C#

窗体底端

目录

第1章 绪论 1

1.1 课题背景 1

1.2 研究现状 1

1.3 论文主要研究内容 2

1.4 论文结构 2

第2章 技术原理 3

2.1 系统运行平台 3

2.2 系统运行硬件 3

2.3 系统编程语言 4

2.4 系统主要采用的技术 4

2.4.1 被动方式 6

2.4.2 主动方式 7

第3章 系统设计 9

3.1 游戏手柄发展进化史 9

3.1.1 游戏手柄的诞生 9

3.1.2 游戏手柄的发展 9

3.1.3 几款代表性的手柄介绍 12

3.2 手柄发展方向总结 15

3.2.1 握感舒适度 15

3.2.2 功能集成度 15

3.2.3 人机交互程度 15

3.3 替代的可行性分析 16

3.3.1 需求可行性 16

3.3.2 功能可行性 16

3.3.3 可能出现的问题 16

3.4 系统开发 17

3.5 系统涉及的问题及解决方案 19

第4章 系统测试 21

4.1 程序运行结果(截图)及分析 21

第5章 总结与展望 23

5.1 总结 23

5.1.1设计过程中遇到的问题 23

5.1.2 系统优点 23

5.1.3 系统问题 23

5.2 展望 24

参考文献 25

第1章 绪论

1.1 课题背景

当今世界,计算机技术飞速发展,信息技术所带来的方便、安全、快捷已经随处可见,PC机在世界发展进程中扮演着愈加重要的角色。在Windows系列操作系统中,系统出于安全与稳定性的考虑不提倡对硬件的直接访问,一般需要用户程序以一种规范的方式访问硬件资源,这样既可以保护系统的健壮性,又可以提供充分的设备无关性。而驱动程序作为直接工作在各种硬件设备上的软件,维系了各种硬件设备的正常运行,从而达到既定的工作效果,它提供的应用程序和实际物理设备之间交互的软件接口。目前,很多游戏软件就是借助设备驱动程序实现用户体验,特别是在电子竞技和主机游戏迅速发展的当今社会,对游戏机手柄的应用程序设计就显得尤为重要。如何设计一个应用程序,实现手柄在Windows系统中的输出与返回,成为论文研究的重点之一。

现如今,工业、制造业等行业机械化和智能化水平越来越高,工业制造系统的集成度也越来越高,而这也对工业控制杆的功能和物理外形要求变高。目前已有的大型机械的操纵杆,相对来说,还是具有体型较大,操作人性化不高,且功能较为简单等问题。由于主机类游戏为了更多地吸引到他人,在设计上不断地更新换代,外形上愈加的轻便小巧,且更加契合人们双手的握感,人性化程度高;在功能上为满足不断复杂的游戏内容,按键及内置功能也更加丰富。通过研究游戏手柄的演化发展历史,总结手柄换代过程中的规律和特点,并与工业操纵杆进行横向比较,探讨工业操纵杆更新换代的可能性。

1.2 研究现状

2017年以来,中国游戏市场规模稳步上升,目前已经达到1768亿,同比增长23.2%左右。伴随着计算机和家用主机市场的快速发展,主机游戏及其相关配套硬件设备(以手柄等为主)也得到了稳步的发展。电子游戏,作为供人们娱乐消遣的重要方式,从最初限于街机、简单掌上游戏机等有限载体的阶段已经发展到家用PC平台,走进了人们的日常生活中。

目前来说,只有一些简单的摇杆加少量按键的简易操纵杆使用了类似游戏手柄进行了优化替代,更复杂的操纵杆还没有使用手柄的一些特点加以优化替代。本文将继续探讨游戏手柄在其他领域替代工业操纵杆的可能性。

1.3 论文主要研究内容

论文主要研究内容为以下三项:

(1)游戏手柄的发展进化历史。

(2)从上一部分中总结出游戏手柄的发展特点,并从几个方面分析游戏手柄的这些特点是否能够被工业或其他领域的操纵杆借鉴使用。

(3)程序涉及编写部分。介绍了程序运用的技术和流程。

1.4 论文结构

本文主要分为五个章节。

第一章节为论文的绪论,主要介绍了课题的背景,以及拟采用的技术和实施方案,本文的主要研究内容等。

第二章节是本次毕业设计的技术原理部分,主要从本次毕业设计用到的编程软件、硬件、编程语言和所用到的技术4个方面展开。

第三章节是本次毕业设计的系统设计部分,从游戏手柄的发展史展开,探讨了游戏手柄替代工业操纵杆的可能性,之后介绍了程序的开发、出现的问题及解决方案。

第四章节是系统的测试部分,主要有程序最终运行结果并带有相应的分析。

第五章节为论文的总结与展望部分,总结了本次毕业设计的全部内容,介绍了系统的优缺点,并展望了系统改进的方向。此外,还对自己在开发过程中遇到的问题进行了一个小结。

第2章 技术原理

2.1 系统运行平台

本次毕业设计,我选择的运行平台是Visual Studio 2010平台。以下是对这一平台的一个简要介绍。

作为微软公司推出的产品,Visual Studio是时下最主流的Windows平台应用程序开发环境。作为其重要组成部分,Visual Studio 2010版本的上市时间为2010年4月12日。除了将IDE的界面进行了重新设计和组织,使它的开发环境变得更简洁直观之外,Visual Studio 2010也带来了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP,并且支持开发面向Windows 7的应用程序。VS2010还支持除了Microsoft SQL Server以外的IBM DB2和Oracle数据库。Visual Studio 2010可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。

相对于之前版本的VC 6.0而言,VS2010具有9项新功能:

(1)C# 4.0中的动态类型和动态编程;

(2)多显示器支持;

(3) VS2010的特性支持TDD;

(4)支持Office ;

(5)Quick Search特性;

(6)C 0x新特性;

(7)IDE增强;

(8)创建Ribbon界面;

(9)新增基于.NET平台的语言 F#;

2.2 系统运行硬件

在本次毕业设计中,我采用的游戏手柄是SONY公司PlayStation系列的DualShock 2手柄。接下来我会对这一手柄进行一个简要介绍。

PlayStation 2(简称PS2)是日本索尼公司推出的家用型128位游戏主机,于2000年推出,截止2012年2月14日累计销量已经突破1亿5千万台。而作为这一款畅销主机的手柄,DualShock 2手柄也受到了很多用户玩家的喜爱。该手柄采用了双摇杆握把式设计,包含了14个功能按键,其中主要包括:十字方向键(↑、↓、←、→共四个)、基本功能键(○、□、△、×共四个)、LR键(L1、L2、R1、R2共四个)、SELECT键和START键。同时,手柄内置了力回馈和震动效果,从而给玩家更好的游戏体验。

2.3 系统编程语言

在本次毕业设计中,我采用的编程语言是C#(CSharp)语言。现对这一编程语言进行一个简单介绍。

C#是微软公司在2000年6月发布的一种新的编程语言,是一种安全的、优雅的、简单的、稳定的,由C语言和C 发展、衍生出来的编程语言,主要在.NET Framework之上运行,是一种面向对象的高级程序设计语言。C#看上去和Java存在着惊人的相似;它包含了诸如单一继承、接口、与Java基本相同的语法和编译成中间代码再运行的过程。但是,C#与Java还是存在着本质的区别的:C#借鉴了Delphi的一个特征,与COM(组件对象模型)是直接集成的,而且C#是微软公司 .NET windows网络框架的主角。

虽然C#在执行效率和安全性上都要低于C和C ,但是作为一种完全面向对象的编程语言,C#的开发效率比前两者要高得多。而且,C#由于必须执行在 .Net Framework上,这也成为了它可以进行跨平台开发的基础,其复用性也非常高。同时,C#比前两者要更加的简单易学。

2.4 系统主要采用的技术

本次毕业设计主要应用Windows API访问游戏手柄,先对这一技术进行介绍。

就目前人们所熟知的对游戏手柄的操作方式主要有四种:用DDK通过USB接口直接访问游戏杆;通过汇编访问游戏杆(使用率比较低,且在一些平台中不能使用);使用Direct Input操作游戏手柄设备;使用Windows API访问游戏手柄。而这四种方法中,选取第四种 Windows API是一种最简单的方式,因为这种方法已帮我们封装好了几乎所有的方法,只要在程序中按时捕获游戏手柄的状态就可以了。

表4-1 操作游戏手柄的API及功能说明

函数名称

函数说明

joyGetNumDevs

获得当前系统支持的游戏设备的数目

joyGetDevCaps

查询取得指定的游戏手柄设备用来确定其性能

joySetCapture

向系统申请获取其中一个游戏手柄并定时将该游戏杆的状态值以消息的方式发送到某个窗口

joyReleaseCapture

释放对某个游戏设备的捕获

joyGetPos

取得游戏杆的坐标位置和按键的状态

joyGetPosEx

取得游戏杆的坐标位置和按键的状态

joyGetThreshold

查找系统要求使用的游戏手柄的当下的移动阈值

joySetThreshold

设定系统要求使用的游戏手柄设备的移动阈值

而在使用Windows API访问游戏手柄时,根据调用的方法的区别,又可以划分为以下两种方式。

(1)被动方式:

通过调用API中的joySetCapture方法,向系统申请获取其中一个游戏手柄的按键信息,如果这一申请能够获得成功,系统就可以定时将该设备的按键信息以消息的方式发送到我们系统的某一个窗口上。

图2-1 被动方式示意图

(2)主动方式:

主动方式是按照我们自己系统的需求,按照要求来调取使用joyGetPos方法或者joyGetPosEx方法查找捕获其中一个游戏杆设备的当下的按键状态。

图2-2 主动方式示意图

接下来,我将对这两种方式及其分别用到的Windows API函数进行一个简要的介绍。

2.4.1 被动方式

在这种方式下,程序只是作为一个消息接收者的角色而存在。每隔一段固定的时间,系统就会返回这一个游戏手柄目前的按键状态,程序在接收到这一状态之后,再按照系统的实际要求开展相应的处理就可以了。在使用被动方式时,我们主要用到了Windows API中的JoySetCapture,现对该函数进行一个简单的讲解。

JoySetCapture方法的C#定义原型如下:

图 2-3 JoySetCapture方法的C#定义原型

在调用这一方法,向系统申请获取该游戏手柄的按键状态之后,如果返回的JOYERR_NOERROR的值为0,则表示申请成功;否则,如果返回的是其它数值,就意味着申请失败。当不再需要获取游戏杆的按键状态信息时,需要调用joyReleaseCapture方法将这一捕捉动作释放。

如果这一申请获得成功,系统就会按照着依据uPeriod值确定的时间长短来定时将手柄设备的按键信息通过消息包传送到到与hWnd相对应的窗口。因此,我们必须采用重写WndProc方法等方式,对这些消息进行处理。

如果uJoy的ID值不同,系统发送的消息号就会产生相应的变化。比如说,对于JOYSTICKID1,系统就会发送如下表中的消息包:

表4-2 JOYSTICKID1系统所发送消息包

消息号

说明

MM_JOY1MOVE

如果游戏杆位置产生变化,或者一些按键被按下时,就会发送该消息包。

MM_JOY1BUTTONDOWN

如果游戏杆的功能键○、□、△、×四个按键中的一个或几个正在被按下时,就会发送该消息包。

MM_JOY1BUTTONUP

如果游戏杆的功能键○、□、△、×四个按键中的一个或几个正在被抬起时,就会发送该消息包。

而对于JOYSTICKID2, 系统发出的消息包分别为MM_JOY2MOVE、MM_JOY2BUTTONDOWN、MM_JOY2BUTTONUP。而且,使用的过程中需要注意的是,无论手柄上的按键是否被按动,系统都会按一定时限发送MM_JOYXMOVE的消息。

在被动方式中,怎样判断玩家用户按了哪些键呢?答案就是,在系统发出的消息包中,游戏杆设备的按键信息状态储存在消息包的WParam和LParam这两个参数中。

(1)WParam参数:

对于手柄而言,WParam参数中储存的是除了十字方向键以外的其他所有按键中当下被按下的按键值,这个值其实是一个复合值。举例来说,如果这个值变成JOY_BUTTON1 | JOY_BUTTON2时,说明是1号和2号按键同时被按下。需要注意的是,对于MM_JOYXBUTTONDOWN和MM_JOYXBUTTONUP这2个消息,只有区别于MM_JOYXMOVE的按键值才能作为用于判断的按键值。

(2)LParam参数:

您需要先支付 80元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图