欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

    俄罗斯方块分组对抗游戏的实现 毕业论文.docx

    • 资源ID:3911747       资源大小:913.71KB        全文页数:31页
    • 资源格式: DOCX        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    俄罗斯方块分组对抗游戏的实现 毕业论文.docx

    XXXX 大 学本科生毕业设计姓 名: 学 号: 学 院: 计算机科学与技术学院 专 业: 计算机科学与技术 设计题目: 俄罗斯方块分组对抗游戏的实现 专 题: 指导教师: 职 称: 2013 年 5 月 XXXX大学毕业设计任务书学院 计算机科学与技术学院 专业年级 学生姓名 任务下达日期:2013年 1 月 4 日毕业设计日期: 2013年 1月 4日至 2013年6月2日毕业设计题目:俄罗斯方块分组对抗游戏的实现毕业设计专题题目:毕业设计主要内容和要求:1. 用户可参与的俄罗斯方块游戏;具体包括随机给出不同的形状下落填充给定的区域,若填满一条便消掉,计分。若在游戏中各形状填满了给定区域,则游戏结束。2. 在此基础上实现多人网络对战,并且可以进行分组对战,3. 可以分3个组。要求根据消层情况获得道具,并能够使用道具进行攻击。院长签字: 指导教师签字:摘 要俄罗斯方块(Tetris, 俄文:)是一款从1988年起至今都风靡全球的电视游戏机和掌上游戏机游戏,是落下型益智游戏的始祖。它是由俄罗斯人阿列克谢·帕基特诺夫发明的一款能锻炼人的反应能力、动手能力等能力的教育软件,故得此名。俄罗斯方块的基本游戏规则是移动、旋转和摆放游戏自动随机输出的各种方块,当某一行或几行(最多四行)完全充满时,即消失。由于具有数学性、动态性,知名度,而且上手简单、老少皆宜,从而家喻户晓,风靡全世界。目前,人们在基于俄罗斯方块在基于原有的设计原理上,发展出了许多新的不同类型的游戏,大大增加了这种游戏的趣味性,界面观赏性,可玩性。游戏分为单机版、对战版、分组对战等多种游戏方式。本软件在了解俄罗斯方块设计原理的基础之上,借助C/S软件模型,用CSocket套接字技术实现了一个网络版的能进行分组对抗的俄罗斯方块游戏。该游戏软件不仅实现了基本的俄罗斯方块功能,并能支持俄罗斯方块服务器的建立、客户端接入等功能,在此基础之上,添加了个性音效、分组对抗功能和道具使用等机制,从而改进了传统的简单俄罗斯方块游戏,大大提高了游戏的趣味性、可玩性,使游戏画面也更加具有观赏性,人机交互性更强。本次开发所使用的开发工具为VC+ 6.0,使用的编程语言是C+。本文主要阐述了本俄罗斯方块软件的开发方法以及实现的功能。关键词:俄罗斯方块;CSocket技术;局域网;VC+ ABSTRACTThe Tetris (Tetris, the Russian: ) is a swept the world from 1988 to the present TV game consoles and handheld game consoles game,is the ancestor of falling puzzle game. It is exercise by the Russians Alexei Pajitnov invention a reaction ability, practical ability and ability of educational software, it was this name. The basic rules of the game of Tetris is moved, rotated and placed the game automatically output random box disappears when a line or lines (up to four lines) completely filled. Mathematics, dynamic, well-known, and easy to get started, all ages, so well-known, popular around the world. People based Tetris based on the original design principle, the development of many new and different types of games, greatly increasing the game interesting, interface spectator playability. We can play this game alone or against each other, and also we can devide the players into groups.The software based on the understanding of the design principles of Tetris, with the C / S software model, a network version can be grouped against the Tetris game Socket technique. The game software not only to achieve the basic Tetris, and can support the establishment of the Tetris server, client access, on this basis, add a personalized sound, scrimmaging features and the use of props and other mechanisms in order to improve simple Tetris game, greatly increasing the game interesting, easy to play, the game screen more ornamental, human-computer interaction more. The development use development tools for the VC + + 6.0, the programming language used is C + +. This article focuses on the Tetris software development and function.Keywords:Tetris ; CSocket; LAN; VC+1绪论1.1俄罗斯方块的背景 随着电子信息技术的高速发展,电子类的游戏逐渐成为人们日常娱乐生活中不可缺失的一部分。俄罗斯方块游戏是其中一种风靡全球的电脑类游戏机和掌上型游戏机的游戏,它老少皆宜,而且是可以锻炼人的反应能力、动手能力、全局统筹能力,并具有数学性、灵活性和良好的可玩性的一款教育软件。随着科技水平的发展,游戏开发技术的提升,由俄罗斯方块衍生出来的各种经典游戏比比皆是。1.2课题研究和发展状况俄罗斯方块最早是在1985年6月由工作于莫斯科科学计算机中心的阿列克谢·帕基特诺夫在玩过一个拼图游戏之后受到启发而制作的一个以Electronica 60为平台的游戏,后来,随着此游戏的热销,其版权问题也一直纠缠不清,官司不断。也导致几家公司倒闭,一些公司获益,并以此赚了很多钱,其中,最受关注的是1989年的Tengen和任天堂的官司,最终Tengen的权利被否决,而任天堂的请求或许。因此,Tengen版的俄罗斯方块不得不停止销售,撤下货架。而任天堂NES版Tetris同年在美国发售。全美销量大约300万。与此同时,和GB版Tetris捆绑销售的Game Boy席卷美国,美利坚大地上刮起一阵方块旋风。 俄罗斯方块游戏通过在container的顶端产生随机的一个形状的方块,玩家通过选择左移、右移、旋转、下落等集中操作来使其尽可能整齐的叠在一起,当某一行全部充满时,即消失。由这个游戏过程可以看到,这款游戏不仅能锻炼人的反应能力、动手能力,更能锻炼我们统筹安排、随机应变的能力,而决不是像很多孩子的家长所有的,能使孩子沉迷其中,降低智力、耽误身心发展。1.3本软件与传统的俄罗斯方块的异同俄罗斯方块本身具有一个区别于其他很多游戏的特点,就是只能在电子平台上运行,而不能用实物来进行游戏,传统的俄罗斯方块游戏也有很多版本,他支持在手机等工具上的单机模式,也支持在小游戏机上和电脑上的单机双人对战模式,本游戏相比传统的俄罗斯方块有很多相同之处,但也做了很多改进:相同点:本游戏包含了单机俄罗斯方块的主题框架,采用2维数组来表示每个方块,均由七种方块组成,分别是L型,反L型,Z型,反Z型,田字型,1型,T型。基本算法是相同的,即随机产生一个方块,根据玩家按键来响应键盘事件和鼠标事件,分别进行右移、左移、旋转和下落等操作。对每一行是否充满的判断和消去也跟单机版是相似的思路。游戏逻辑相同,游戏从第一个方块下落开始到游戏结束,整个流程是相同的。不同点:本游戏在原来的简单模式的基础上做了很多改进:1.在双人对战的基础上进行了扩充,采用C/S模式,最多可容纳六个人一起游戏,并且可随意选择自己的分组,共有A B C和自由人四组供选择,进入房间后可以选择准备游戏,当有超过两个队伍且所有人都准备好时,游戏开始。2.游戏在原来单纯拼方块的基础上,增加了很多道具,玩家在消去多行的时候可随机获得道具,主要有消去几行、增加几行、全部消去、加速下落、减速下落等功能,玩家可根据需求对自己、队友或者对手使用该道具。3.游戏在交互方式上比之前有很大改进,之前的单机游戏或者双人对战模式没有办法进行交流,现在的游戏中添加了聊天界面,可以进行沟通,并且在使用相应道具或者准备开始游戏的时候都有音乐,能让参与游戏的玩家更放松心情,体会游戏的乐趣。2 俄罗斯方块游戏的分析与设计2.1 俄罗斯方块的设计原理和技术需求 本软件是基于单机版俄罗斯方块的程序设计原理上的扩展,在原来的基础上加入了网络互连,在原来的单机模式和双人对战模式上增加了网络对战模式。即与原始的俄罗斯方块的程序设计原理基本上是相同的,而方块的模型建立,游戏的操作流程和游戏的过程中软件进行各种判断的原理是相同的,但是与原始的俄罗斯方块相比,本软件在原有的基础上又加入了一些新的理念和新的设计技术。比如说:新增加了网络多人分组对战、网络聊天功能、新的道具模块等设计。本软件与传统的单机版或双人版俄罗斯方块游戏具有一定的区别,传统的俄罗斯方块的设计模型如下图2-1所示,本软件的设计模型如图2-2所示。图2-1 单机版俄罗斯方块游戏模型图玩家2玩家1玩家3玩家n图2-2 本系统游戏模型从上两图中可以得出传统的俄罗斯方块模型与本软件的游戏模型具有很大的不同,本软件支持多人在线同时操作,更加丰富。传统的俄罗斯方块注重的是人机交换,而本软件更注意的是人与人之间通过这个网络平台进行的交互。本软件为C/S模型。参与游戏的人的机器都作为客户端客户端,而服务器既可以是上述参与游戏的人的机器,也可以是单独的一台机器。首先由服务器端建立服务器,接下来准备参与游戏的人可以打开客户端通过连接服务器的IP地址进去服务器,再服务器将所接受的用户信息在返回给用户。游戏运行的原理如图2-3所示。图2-3 本游戏系统原理图本软件主要有以下几个功能:1.建立服务器。在安装了服务器端的电脑上打开服务器端输入IP地址并建立服务器。2.玩家打开安装的客户端,并输入自己的用户名,通过特有的IP地址连接到服务器端所创建的服务器的房间。 3.连接到本服务器的所有玩家进行分组并都准备游戏,当该房间有至少两个组的玩家准备好了就可以进行对战了。4.游戏结束后,本软件会对本局游戏各组玩家的积分和道具的使用状况进行统计。2.2可行性研究2.2.1设计目的 2.2.2可行性分析 管理可行性:本游戏的开发职位检测自己大学四年所学到的知识,是在基于传统的俄罗斯方块设计原理上新添加了网络对战模块。便于管理。 经济可行性:做这个游戏的背景是毕业设计,并不注重开发出来后的经济效益和以后的发展方向,重在检测自身的知识水平,软件开发过程中的经济需求也不高,只需要本人和一台电脑,不需要考虑经济问题。技术可行性:本游戏为C/S模型,用C+语言编写,开发工具是VC6.0。社会可行性:本游戏只为检测和巩固自己所学知识,开发出来的成品只供自己娱乐和使用,不用考虑对社会的影响,也不用考虑版权和法律的问题。2.3软件的开发技术和开发工具的简介游戏主要基于的技术原理是socket编程。套接字(socket)是一种网络编程接口,它是对通信端点的一种抽象,提供了一个发送和接收数据的机制。套接字技术最先应用于unix系统,后来移植到windows系统,有了Winsock API。经过对Winsock API的低层封装产生了CAsyncSocket类,经过高层次的封装产生了CSocket类。 CSocket进行通信的过程很简单。服务器首先启动,通过调用socket函数建立一个套接口,然后调用bind函数将该套接口和本地网络地址联系在一起,再调用listen函数使套接口做好侦听的准备,并规定它的请求队列的长度,之后就调用accept函数来接收连接。客户端在建立套接口之后就可调用connect函数来发送和接收数据。最后,待数据传送结束后,双方调用close函数关闭套接口。其原理如图2-4所示。图2-4 Winsock通信原理图本游戏采用的编程工具是VC+6.0,C+6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C+语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。使用VC+提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。此外,本程序的开发人员一直使用VC+6.0进行程序设计,对此比较熟悉,对其可视化面向对象的编程特点相对了解,在开发起来会轻松许多。表2-1 硬件需求操作系统Windows98/me/2000/XP/2003内存容量64MB显卡要求8M声卡要求支持DirectX 8.0 音效卡交互工具键盘/鼠标CPU奔腾133以上光驱8倍速以上硬盘空间400MB显示器VGA以上显示器开发软件VC+6.02.4 需求分析 游戏流程需求:7种方块共有28中状态(包含形象重复的),在屏幕顶端依次随机下落填充给定的区域,下落过程中由玩家根据自己需求的情况下控制方块的旋转得到自己所需要的图形,并选择下落的位置,判断是否填满某一行或几行,若满消去该行或几行并获得积分,在游戏过程中如果某个玩家的区域在无法放置随机落下的方块,则对方获胜;反之,则对方失败。游戏的主要功能需求如下:用户界面需求:7种方块分别用不同的颜色来显示,随机落下的方块在一定的区域里根据玩家的操控进行变形并放在所需的位置上。需要有良好的人机交互和观赏性的界面,玩家登录到服务器房间后可以看到以下模块:登录到服务器的各个玩家的信息、各个玩家在游戏界面中所在的位置、各个玩家是否准备的画面、玩家之间进行交流的聊天对话框以及在自己所登录的界面上在游戏过程中了解到其他玩家的游戏状况。游戏形状(方块)需求:绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形(即旋转),可设为顺时针或逆时针变形,一般为逆时针方向旋转。键盘处理事件:方块随机下落时,可以通过键盘上的方向键对方快进行控制。上键控制方块的变形,下键控制方块的加速,左键控制方块向左移动,右键控制方块的向右移动。显示需求:当方块填满某一行或几行时消去该行或几行,在所消去的行上面的方块向下移动,并统计所得积分。2.3 概要设计2.3.1 功能定义 本系统主要以网络通信为基础实现人与人的交互。它主要包含以下几大功能模块: (1) 系统初始化模块 该模块主要提供玩家进入游戏时初始化游戏界面的功能。登录时,玩家需要有一个昵称,在游戏过程中,玩家能看到其他所有对手的资料。 (2) 俄罗斯方块算法模块该模块主要实现俄罗斯方块游戏的控制。其中它主要包括判断胜负算法模块和方块产生算法模块。下图显示的就是方块如何产生的算法。图2-5 方块产生流程(3) 网络通信模块 网络通信模块主要包括服务器的建立、客户端与服务器的链接、服务器将其他客户端玩家资料传送给玩家。即,在界面内保证能让每个玩家看到对手资料。 各个模块主要实现的功能如下:图2-6 网络通信模块功能图 (4) 游戏界面绘制模块 该模块是游戏实现的核心模块,它本身并不实现一些游戏控制的功能。但是,它是其他模块功能的体现。其他模块都要受它的调用,从而形成一个游戏系统。该模块主要由初始化界面绘制和游戏开始界面绘制两个子模块组成。它们主要完成界面在不同事件响应下游戏界面的绘制和音频的播放功能。 图2-7 界面绘制模块图 以上是游戏功能实现的主要模块,它们经过相互调用控制,协作分工最终完成了本游戏系统的设计。2.3.2 游戏框架设计本系统采用C/S软件模型、单线程、阻塞式网络通信的设计方式。系统刚运行的时候都要调用系统初始化模块读取用户配置信息对游戏主系统进行初始化,之后系统进入游戏主界面。系统通过调用网络通信模块中的服务器端模块完成服务器的建立,并等待连接。客户端主界面首先调用网络通信模块完成与服务器的连接。连接成功后,系统调用网络通信模块实现服务器端玩家和客户端玩家间操作信息的交互,并通过游戏界面绘制模块绘制游戏开始后的主界面。游戏结束后,系统将玩家战绩信息更新到配置文件中。俄罗斯方块游戏初始化网络通信界面绘制算法实现读取配置文件保存配置文件产 生 方 块判 断 输 赢服 务 器 客 户 端初始化界面游戏开始界面图2-8 系统层次图3 详细设计3.1 系统组成及功能描述本游戏软件是在传统的单机版俄罗斯方块游戏的基础上增加了网络多人分组对抗对战模式。增加了人与人间的交流和各种道具的使用,增强了俄罗斯方块的趣味性和可玩性。本游戏的主要功能是:通过客户端登录到服务器的各个玩家可以自己选择同伴和对手,因为本游戏设计的目的就是进行网络多人分组对抗,需要至少有两支队伍才可以进行游戏。在游戏过程的中,各个玩家通过消去方块可以随机获得某个道具,这些道具有的可以增加游戏的难度,如在底部添加几行。也有降低游戏难度的,如减少当前玩家底部的行数,玩家们可以通过自己的需求给己对或对方使用道具来降低己方游戏的难度或增加对方的游戏难度。另外,为了增强俄罗斯方块的竞争、可玩性和趣味性,同时使用网络的优势,玩家和玩家之间可以通过对话框进行聊天,沟通。本软件的组成:本软件为C/S软件模型,主要由软件初始化模块、游戏算法模块、网络通信模块、界面绘制模块四部分组成。3.2 系统初始化模块设计软件初始化模块是从配置文件中读取玩家的信息完成游戏初始化的过程。在游戏结束后该模块会自动保存玩家战绩信息到配置文件中。用户初始化登录信息如图3-1所示。图3-1 用户登录信息登录以后玩家的状态显示为未准备状态,如图3-2(a)所示:头像为黑白状态,该状态下,游戏不能开始。图3-2(a) 图3-2(b)当玩家点击准备时,头像就变为彩色,如图3-2(b)。这时,如果至少有两组玩家准备号,就可以开始游戏。3.3 游戏算法实现模块本俄罗斯方块游戏中,有相当大的篇幅是算法的实现模块部分。无论是传统版单机俄罗斯方块,还是本网络多人分组对战模式的俄罗斯方块都离不开算法的支持。接下来详细介绍本软件的算法。图3-3为游戏主要函数调用流程图。首先从一个方块random()的随机产生开始,判断是否能产生方块。如果不能,则直接在massagebox中显示游戏结束;如果能,则刷新容器内的的图,接下来判断方块能否下落和键盘事件,根据相应的键盘事件进行相关判断,如,按上旋转键,则判断方块能否进行旋转,左右移动也是类似。方块落下后,进行一次判断,看游戏是否失败,失败则提示游戏结束,否则,继续产生新的方块。调用流程如图3-3。图3-3 方块产生后函数调用流程图主要的游戏过程如下:游戏开始随机产生一个方块,接下来判断方块是否已经到达底部,如果不是,则执行自动下降或根据键盘事件快速下降,直到下降到底部,并进行判断是否满足消行条件进行消行操作。否则,继续随机生成下一个下落方块,在下一个方块的提示框中用新生成的方块代替先前在该方框显示的方块,并用先前在该方框里方块作为当前下落的方块,当方块产生时就已经在底部(即在游戏区域的顶端),则游戏结束。否则,继续循环该流程。流程图如图3-4所示。到达底部部到达底部,游戏结束到达底部部结束销行操作生成下一个下坠物将新生的下坠物代替旧的“下一个下坠物“将旧的“下一个下坠物”用作当前 下坠物销行操作游戏结束处理下降一个单位开始图3-4 游戏流程图3.3.1方块实现所有的部件及已停止的部件均用小方格来表示。整个游戏区域对应一个二维数组,数组元素为0时,表示空白;为1时,表示已有方格。该数组存储所有已经不能移动的部件。部件采用一维数组表示,这些一维数组实际表是一个n×n的矩阵。如表示一个方块使用一个2×2的矩阵,实际存储1,1,1,1;如表示一个长条使用一个4×4的矩阵,实际存储0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0。实际显示的时候,先画出已停止的方块,然后计算出正在下落的部件的正确坐标位置并其将画出,同时在固定位置画出预览方块。旋转部件时,只需变换存储部件的矩阵即矩阵的转置,使其对应为转换后的形态,并将其显示出即可。判断部件是否可以下落、旋转、左移、右移时,将表示部件的数组对应到游戏区域的二维数组中,再判断是否允许操作。当部件无法再操作时,将部件数组中对应填入游戏区域中对应的二维数组。使一层消失可以通过判断游戏区域中的二维数组是否某一行全为1;如果该数组的第一行全为1或已没有足够的空白使新的部件可以加入到游戏区域中,则游戏结束。3.3.2数据结构的实现游戏方块Componet结构体typedef struct tagComponetint intComID; /部件的ID号int ntDimension; /存储该部件所需的数组维数int* pintArray; /指向存储该部件的数组 Componet;Componet结构体表示某个游戏方块具体的属性,每个游戏方块对应有一个编号,且有对应存储该部件的数组,用指针指向该数组,并设定存储该部件所需数组(n×n)的维数。Componet结构体数组初始化游戏方块,即定义MAXCOM个Componet类型的结构体,并初始化(MAXCOM为7)。例如m_Componets6.intComID=6;m_Componets6.intDimension=4;m_Componets6.pintArray=new int16;m_Componets6.pintArray0=0;m_Componets6.pintArray1=1;m_Componets6.pintArray2=0;m_Componets6.pintArray3=0; /0 1 0 0m_Componets6.pintArray4=0; /0 1 0 0m_Componets6.pintArray5=1; /0 1 0 0m_Componets6.pintArray6=0; /0 1 0 0m_Componets6.pintArray7=0;m_Componets6.pintArray8=0;m_Componets6.pintArray9=1;m_Componets6.pintArray10=0;m_Componets6.pintArray11=0;m_Componets6.pintArray12=0; m_Componets6.pintArray13=1; m_Componets6.pintArray14=0; m_Componets6.pintArray15=0;以上代码是对长条这个方块的定义和初始化。其余形状的6种方块的定义不在此赘述。3.3.3游戏功能实现1、游戏方块预览游戏中的方块将在4*4的正方形小方块中预览,如图4所示。使用随机函数rand( )来产生06之间的游戏方块编号,其中的正方形小方块的大小为SIZE*SIZE。SIZE为所设定的方块像素大小。2、游戏方块控制(1)左移的实现过程:a.首先判断方块在矩形“容器”中能否能左移。要想左移必须满足以下两个条件:(1)如果正在下落的方块整体左移一位后,该方块不超越“矩形”容器的左边线,否则出界,不能执行该操作;(2)在该4*4方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行左移操作,否则不执行左移操作。b.清除执行左移操作前的方块。c.该方块左移后,在左移一位后的位置,重新显示此游戏方块。(b、c操作步骤中涉及到的如何清除和显示方块的函数在第四章中的功能函数设计中将会详细进行阐述)。(2)右移的实现过程:a. .首先判断方块在矩形“容器”中能否能右移。要想右移必须满足以下两个条件:(1)如果正在下落的方块整体右移一位后,该方块不超越“矩形”容器的右边线,否则出界,不能执行该操作;(2)在该4*4方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行右移操作,否则不执行右移操作。b.清除执行左移操作前的方块。c.该方块右移后,在右移一位后的位置,重新显示此游戏方块。(b、c操作步骤中涉及到的如何清除和显示方块的函数在第四章中的功能函数设计中将会详细进行阐述)。 (3)向下加速下落(下移)的实现过程:a. 首先判断方块在矩形“容器”中能否能右移。要想右移必须满足以下两个条件:(1)如果正在下落的方块整体右移一位后,该方块不超越“矩形”容器的底边线,否则出界,不能执行该操作;(2)在该4*4方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行下移操作,否则不执行下移操作。b.清除执行右移操作前的方块。c.该方块右移后,在右移一位后的位置,重新显示此游戏方块。(4)旋转的实现过程:a. 首先判断方块在矩形“容器”中能否旋转。要想旋转必须满足以下两个条件:(1)如果游戏方块整体旋转后,游戏方块不能超过“矩形”容器的左边线、右边线、底边线,否则越界,不能执行该操作;(2)在该4*4方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行下移操作,否则不执行下移操作。b.清除执行旋转操作前的游戏方块。c.在“矩形”容器中显示区域不变的位置,显示旋转后的游戏方块。3、游戏显示更新a.当游戏方块执行左右移动、下落、旋转操作时,首先要清除先前位置的游戏方块,再根据操作向左一位、向右一位、向下一位或在显示区域不变的位置重新绘制游戏方块。b.当某一行或几行填满方块消去时,上方不能移动的方块下移后,进行重新绘制。清除游戏方块的过程为:首先用刷新函数刷新相应的游戏区域,清除执行操作前显示的方块,执行相应的操作后,再次调用刷新函数刷新此区域,显示将要显示的游戏方块。4、游戏帮助功能在帮助的功能选项中直接添加静态文本即可。3.4 网络通信模块网络通信模块是各个玩家实体之间连接。它的主要作用是将两个以上的玩家进行交流和沟通,通过聊天对话框实现人与人之间的交互。进而提高俄罗斯方块的趣味性、交互性、可玩性。具体来说本游戏的网络通信模块主要包括服务器端和客户端两个模块。服务器端模块创建服务器为客户端提供服务,接受客户端的连接。客户端模块主要用于将客户端连接到服务器端,建立连接之后,服务器和客户端分别将玩家的操作情况以消息的形式进行交互,并根据消息更新容器内玩家进度以及响应各种请求。套接字建立:系统继承CAsyncSocket类生成派生类CFiveSocket,并在CFiveSocket类中重载了OnAccept、OnConnect、OnReceive、OnClose消息。服务器的建立遵循CSocket编程的一般步骤,首先创建监听套接字,调用Listen()监听客户端的连接。有客户端请求连接时,调用Accept()接受客户端的连接。连接成功后,就可以调用ReceiveData()接收已连接客户端发送来的消息。客户端封装CSocket类生成了CMysocket类,并重载了OnReceive消息。此后新的游戏实例作为客户端程序创建客户端套接字,然后调用Connect()连接到指定的服务器,连接成功后,调用Send()将该玩家的游戏基础信息发送到服务器。服务器端和客户端消息的收发:服务器建立成功,客户端连接到服务器后,客户端就可以向服务器发送消息。服务器重载ReceiveData()来接收客户端发送的消息,利用Send()来发送消息。客户端也重载了ReceiveData()来接收服务器发送来的消息。由于本系统中发送和接收的数据样式各不相同,因此本系统自定义消息格式,统一数据的发送方式。3.5 游戏界面绘制模块设计游戏的良好的游戏界面目的是能给游戏玩家提供良好的视觉感受。所以,游戏界面的回执非常重要。前面各模块的功能主要集中在游戏逻辑的实现,那么游戏界面绘制模块就是将看不见的游戏逻辑让游戏玩家能够看见,从而帮助玩家正确的完成操作。该模块贯穿整个游戏系统,从进入游戏到最后退出游戏都将用到该模块来绘制游戏界面,显示游戏进行情况。游戏界面绘制模块实现较复杂,提供的函数接口比较烦琐。从游戏进行的阶段可以将该模块分为游戏初始界面绘制和游戏开始界面绘制。3.5.1 游戏初始界面该界面是登录成功后,玩家第一次看见的游戏界面,此时,游戏玩家没有作出任何操作。但图中昵称为456的玩家已经准备游戏,123尚未准备,界面效果图如图3-5所示。图3-5 游戏初始界面初始界面绘制原理是:由重绘消息WM_PAINT消息触发CBoard类中的OnPaint()函数对界面进行重绘制。系统先创建内存DC,在内存中先绘制好主界面和根据保存当前界面情况数据的二维数组m_data绘制方块,最后再将内存中的界面数据直接拷贝到设备当中,这样就很好地解决了在游戏过程中由于不断刷新界面数据而导致屏幕闪烁的问题。3.5.2 游戏开始界面游戏开始界面是指两个玩家已经建立连接,游戏开始后的游戏界面。此时的游戏界面是最复杂的,游戏界面时刻都在变化,它动态的显示了玩家游戏进行的情况。游戏效果图如图3-6所示。图3-6 游戏开始界面 从上面图形可以看到本阶段的界面显示变化较快,变化的方式较多,但是它的绘制原理并没有太大的变化,只是系统操作变得更多,收发的消息更多而已。总之,游戏界面的绘制都是以系统消息为主导的,收到什么消息就会绘制相应的游戏界面。4 俄罗斯方块游戏的实现4.1 实现原理和主要机制 (1)定时制机制从分析俄罗斯方块游戏的特点而得,在游戏开始时定时器就应该产生并生效,而在游戏暂停时使已经制定的定时器失效,当游戏从暂停状态回到游戏状态时,系统再重新创建一个定时器并激活使其正常工作;当游戏结束时,则将制定的定时器销毁。经上所述所以在游戏的开始、暂停、结束分别对应的游戏开始函数、暂停函数、结束函数中进行定时器的控制,对定时器进行创建激活、失效与销毁处理。所以,先在VC6.0资源编辑器菜单资源选项里面新添加三个菜单选项,然后通过时类图实现即分别是游戏的“开始”、“暂停”、和“结束”,然后利用ClassWizard直接在视图类对象Cskyblue_RectView中分别为它们添加空白的处理函数,具体函数添加如表4-1所示。 表4-1 菜单选项功能对应表菜单选项名称快捷键资源ID响应处理函数开始游戏&SID_GAME_STARTOnGameStart()暂停游戏&PID_GAME_PAISHOnGamePaush()结束游戏&EID_GAME_ENDOnGameEnd()(2)定时处理 经过定时器的设置后,这里通过利用类向导(ClassWizard)跳到定时器到时候所处的处理函数OnTimer()去实现,当系统所设置的固定时间片间隔到时后,首先先检测当前所下落的方块是否已经到达了底部,如果否则继续进行RectDown(),即方块继续向下一个单位移动的操作;如果是则方块下落到底后,并随机产生一个新的“下一个方块”,并代替旧的,将先前所产生的旧的

    注意事项

    本文(俄罗斯方块分组对抗游戏的实现 毕业论文.docx)为本站会员(小小飞)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开