基于VC的俄罗斯方块.doc

上传人:可****阿 文档编号:42300789 上传时间:2022-09-15 格式:DOC 页数:31 大小:150KB
返回 下载 相关 举报
基于VC的俄罗斯方块.doc_第1页
第1页 / 共31页
基于VC的俄罗斯方块.doc_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《基于VC的俄罗斯方块.doc》由会员分享,可在线阅读,更多相关《基于VC的俄罗斯方块.doc(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、编 号: 090619 审定成绩:先锋软件学院2012届毕业设计(论文)题目: 基于VC的俄罗斯方块 分 院: 软 件 分 院 学生: 吕志亚 专 业: 电 脑 游 戏 班 级: 0906 学 号: 0 指导教师: 易 刚 填表时间:2012年 03月学生毕业设计(论文)工作自查表(2011年11月- 2012年4月检查)学生吕志亚专业电脑游戏学号0导师易 刚职称讲师导师每周指导次数5次每次: 1小时题目名称基于VC的俄罗斯方块作息时间上午8:3012:00下午2:004:30晚间7:008:30个人精力实际投入日均工作小时7小时周均工作小时35小时缺席天数无出勤率%100%毕业设计(论文)工

2、作进度已完成主要容100%待完成主要容0%完成 封面摘要引言第一章 绪论第二章 可行性研究第三章 需求分析第四章 设计基本的游戏功能第五章 程序主要功能设计与按键事件的控制第六章 程序设计思想与流程图致参考文献本毕业设计基本完成。存在问题工作措施存在问题:在开发设计中存在诸多问题工作措施:在网上进行了查阅以与学习以与询问导师指导教师(签字): 日期: 年 月 日 先锋软件学院毕业论文(设计)评阅表(指导教师、评阅人用)论文(设计)名称学生学号指导教师或评阅人)序号评审项目指标满分评分1论文(设计)完成量论文(设计)容完成量,难易程度符合教学基本要求202调查与综合根据论文(设计)任务,能独立查

3、阅文献资料和从事其它有关调研。有收集、综合和正确利用各种信息的能力。203论文(设计)质量文章切合选题,材料丰富、容充实,观点明确、论据充分、论证严格,构思完整、层次分明、段落、论题间的衔接自然、舒展。文笔流畅、语言通顺、使用专业术语准确,图表清楚,符合要求。504创新有独特的见解,或有一定应用价值10总分评语:(明确指出论文(设计)的调研论证材料收集是否适合论点要求、创新点、论文(设计)论证能力、写作水平,同时要明确指出论文(设计)的不足之处与改进方向。) 评阅人: 年 月 28 / 31摘 要俄罗斯方块是有史以来最伟大的游戏之一。它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同

4、,因为它的本质是电子化的,所以它的确属于现代产物。俄罗斯方块举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似俄罗斯方块触动了我们某些在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。俄罗斯方块是一款风靡全球的掌上游戏机和PC机游戏,它造成的轰动与创造的经济价值可以说是游戏史上的一件大事。它由俄罗斯人阿列克 帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷,俄罗斯方块上手极

5、其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普与程度可以说是史上任何一款游戏都无法相比的。相信大多数人都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(用信号和槽函数的关联来实现对按键事件的控制)。然后程序根据这七种方块堆叠成各种不同的模型。Qt是诺基亚开发的一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序

6、开发者建立艺术级的图形用户界面所需的所用功能。论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,整个开发过程贯穿软件工程的知识体系。此次设计在Linux系统下,以QT+Creator为开发语言,使用C+和QT库来进行游戏的设计与实现。关键词:游戏设计;算法;数组;事件目 录摘 要1目 录.2引 言31绪 论41.1电子游戏与其分类31.2电子游戏发展现状41.2.1 电子游戏在国外的发展现状42.可行性研究.52.1设计目的62.2 软件问题定义 62.3 可行性分析 63.概要设计.73.1游戏设

7、计方案的确定73.2系统流程结构设计83.3各个功能模块图设计83.3.1模型层功能模块图设计.8332试图层功能模块图设计 93.3.3 控制层功能模块设计 94.详细设计代码.10总 结 25致 26参 考 文 献 27引 言游戏是人们活动中一项非常重要的容,有人认为如果哪一天人类对所有的游戏都失去兴趣,恐怕世界的末日就要到了。电脑对游戏的贡献有目共睹,现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由联的游戏制作人Alex Pajitno

8、v制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在联众俄罗斯方块中,更有一些联众网络游戏所独有的魅力有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推出新演变出各种类似游戏, 深受广

9、大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可与。而一般游戏软件也确实具有很高的技术难度, 随着开发工具与软件开发方法学的不断发展, 动手开发游戏也不是十分困难的。俄罗斯方块游戏是一种古老而又有趣的游戏, 游戏软件不计其数, 网上就有好多关于实现的复杂算法和设计, 其难度让一般初学者望而却步。本文利用数组作为方块的数据结构,提出一种用pascal语言实现的简易方法, 对初学者可仿此开发类似游戏, 并了解游戏软件的设计与开发过程。1. 绪论1.1电子游戏与其分类电子游戏,也就是运

10、行在家用电脑、家用电子游戏机或是掌中宝游戏机与街机上的电子游戏程序。电子游戏是一种结合剧情故事、美术、音乐、动画、程序等技术于一身的互动型娱乐软件,涉与到多个行业。 从电子游戏的分类来看,有着多种分类方式。传统的游戏分类是按照游戏类型,将其分为即时战略游戏、第一人称射击游戏、角色扮演游戏、策略型游戏等类别。根据游戏运行平台的不同,可将电子游戏分为游戏机游戏、单机版PC 游戏、互动电视游戏、在线游戏和手机游戏。此外,国政府将电子游戏业分为家用游戏机游戏、单机版PC 游戏、网络游戏和街机游戏四大类。考虑到中游戏业比较接近,论文采用国的分类标准。“网络游戏”也就是人们一般所指的“在线游戏”,是指通过

11、互联网进行的电脑游戏,通过人与人之间的互动达到交流、娱乐和休闲的目的。在互联网(局域网)技术出现之前,电子游戏都可以归于单机版游戏,即“人机对战”游戏,或最多是双人对战游戏。而随着互联网技术的出现,通过连接游戏服务器,上百、上千、乃至上万的游戏玩家同时连线娱乐成为了现实,这就大大增加了游戏的互动性、真实性,丰富了电子游戏的涵。从网络游戏的分类来看,目前业界还没有一个比较统一规的分类。随着计算机设备和网络技术的发展,电子游戏在全球得到了迅猛的发展,取得了巨大的成功,已成为当今世界上不可缺少的精神粮食。1.2 电子游戏发展现状1.2.1 电子游戏在国外的发展现状电子游戏是最初产生于美国,1971年

12、,一个还在MIT就读的学生设计了世界上第一个业务用游戏机,这个街机游戏的名字叫电脑空间。可以说时至今日,电子游戏仍然是外国的天下。美国至今仍是世界第一大游戏市场,它遵循的是以发行商为主的产业开发链模式,根据美国市场调查公司NPD Group调查统计,美国2004年游戏总销售金额(包括家用、掌上型主机与软件)为99亿美元,占了全球游戏市场的45%。其中游戏软件销售的具体数字是:视频游戏软件的销售额达52亿美元(1.6亿套),PC游戏软件销售额达11亿美元(4500万套),掌机游戏销售额达10亿美元(4230万套)。2004年一共大约有2.48亿套游戏售出。据估计,美国每个家庭平均购买过2部游戏3

13、。日本近20年来疯狂赚电子游戏的钱。从上世纪60年代初的街机,到六七十年代之间的家用游戏机,再到八九十年代的掌上游戏机,日本经过30多年的耕耘,终于把电子游戏这棵“摇钱树”,培育成第一时尚娱乐产业,垄断全球业界长达10余年。对于日本来说,电玩业已是国家经济的重要支柱之一,在GDP中占有1/5的举足轻重地位。日本游戏业在最辉煌的1998年,曾经占领全球电子游戏市场硬件90%以上,软件50以上。国号称世界上网络游戏产业最发达国家之一。迄今为止,国网络游戏市场有超过60%的产品来自国游戏软件开发商,国网络游戏使国很多游戏运营公司在游戏营销市场或股票资本市场上获得了巨大的成功。 国游戏市场的发展不是偶

14、然,国政府不仅给游戏产业以正确的定位和引导,更是将其和本国经济发展紧密地联系到一起,做了很多市场培育方面的工作。国政府认识到,靠重型工业来支撑全国经济的做法是片面的,于是将、娱乐产业视为新的经济增长点,开始大力扶持。从那时起,科技含量极高而能源消耗极低的游戏制作与相关产业担负起了“富国兴邦”的重担。由文化观光部出面组建国游戏支援中心,向国游戏产业提供从资金到技术上的多方面支援;成立游戏投资联盟,政府每年向游戏产业投入的资金多达亿元,并为游戏企业提供长期的低息贷款;设立信息化基金和文化产业基金,为游戏产业服务;对指定的风险企业实行各种税制优惠政策,减少甚至免除游戏企业的税务负担;建设游戏产业基地

15、以扶持中小游戏企业的发展;对从事游戏产业的高科技人才免除两年的兵役。 在国,从制作到运营,一个网络游戏公司起步门槛较低,主要得益于政府实行的援助计划。此外,在有利的政策形势下,国出现了众多的游戏院校,一些原本不涉足此领域的大学也开设了游戏相关专业课程,以大力培养游戏专业人才,从而为游戏生产提供了基础保障。2可行性研究2.1 设计目的通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯方块游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,初步掌握MVC这种设计模式,进一步巩固和加强自身对j2se基础知识的理解,提高自己的编程水平

16、,从而达到理论与实践相结合的目的。2.2 软件问题定义基本要求:本游戏开发的总体任务是实现游戏的可操作性,以与界面的美观性。整个开发过程遵循软件工程规,采用PASCAL编程来实现界面以与事件的控制,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换方块、积分以与等级的功能。目标:通过本游戏的开发,主要实现游戏的可操作性以与美观性,同时使自己对PASCAL语言的了解更进一层,为将来的实际工作打下坚实的基础。条件、假定和限制:由于知识以与能力的限制,本游戏所实现的功能不够强大,可对本游戏进行改善,从而增强游戏的功能。可行性研究的方法:通过研

17、究分析俄罗斯方块所具备的能力与实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。2.3 可行性分析 技术可行性:开发本游戏的编程语言有多种,考虑到自身对语言的掌握程度,选择PASCAL语言进行游戏的开发,采用PASCAL编程来实现界面以与事件的控制。 经济可行性:本游戏的开发旨在完成毕业设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行相应JAVA程序的手机便可,所以不

18、用考虑到经济问题。社会可行性:本游戏的开发主要为了完成毕业设计,开发的主体是个人,不存在法律上的侵权行为,也不会为社会造成影响,这方面是完全可行的。3 概要设计31 游戏设计方案的确定 本游戏的设计采用MVC模式(Model -View -Controller),即把本游戏的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样本游戏的设计被分成三个层模型层、视图层、控制层。MVC模型图如下所示:32 系统流程结构设计触发按键事件图形工厂类图形类障碍物类中央控制器处理按键事件处理逻辑显示面板显示生产33 各个功能模块图设计3.3.1 模型层(Model)功能模块

19、图设计图形工厂图形障碍物生产图形下落产生障碍物3.3.2视图层(View)功能模块设计游戏面板GamePanel方块的显示障碍物的显示3.3.3控制层(Controller)功能模块设计中央控制器Controller类图形工厂生产图形显示面板显示图形和障碍物处理按键和鼠标事件4 详细设计代码Tetris - a MIDletPascal implementation of a classic game.You are allowed to use this code free, change it on yourown will, use it, distribute it etc., as

20、long as you make no profit outof it.program Tetris;const fieldWidth = 10;fieldHeight = 15;vargameField: array1.fieldWidth, 1.fieldHeight of integer;block: array1.4, 1.4 of integer;blockX, blockY: integer;blockSize: integer;screenWidth, screenHeight: integer;screenX, screenY: integer;score: integer;t

21、ime: integer;gameRunning: boolean;gameSpeedDelay: integer;pauseCommand, quitCommand, clickedCommand: command;gamePaused: boolean;procedure rotateRight; forward;function blockPositionValid: boolean; forward;welcomeScreen - display the wellcome screenprocedure welcomeScreen;var textToDisplay : string;

22、 textXPos : integer; textYPos : integer; keyCode : integer;beginsetColor(255, 0, 255); fillRect(0, 0, screenWidth, screenHeight); setColor(0, 0, 255); setFont(FONT_FACE_PROPORTIONAL, FONT_STYLE_BOLD, FONT_SIZE_LARGE); textToDisplay := Tetris; textXPos := (screenWidth - getStringWidth(textToDisplay)

23、div 2; textYPos := (screenHeight - getStringHeight(textToDisplay) / 2; drawText(textToDisplay, textXPos, textYPos); textYPos := textYPos + getStringHeight(textToDisplay); setColor(0, 0, 0); setFont(FONT_FACE_PROPORTIONAL, FONT_STYLE_PLAIN, FONT_SIZE_SMALL); textToDisplay := Created with MIDletPascal

24、; textXPos := (screenWidth - getStringWidth(textToDisplay) div 2; drawText(textToDisplay, textXPos, textYPos); textYPos := textYPos + getStringHeight(textToDisplay); textToDisplay := Press any key; textXPos := (screenWidth - getStringWidth(textToDisplay) div 2; drawText(textToDisplay, textXPos, text

25、YPos); repaint; wait until user presses any key repeat keyCode := getKeyClicked; until keyCode 0;end; gameOver - displays the game over screenfunction gameOver: boolean;var textToDisplay : string; textXPos : integer; textYPos : integer; keyCode : integer;newGame : command; quit : command; clickedCom

26、mand: command;begin setColor(255, 255, 255); fillRect(0, 0, screenWidth, screenHeight); setColor(255, 0, 0); setFont(FONT_FACE_PROPORTIONAL, FONT_STYLE_BOLD, FONT_SIZE_LARGE); textToDisplay := Game over!; textXPos := (screenWidth - getStringWidth(textToDisplay) div 2; textYPos := (screenHeight - get

27、StringHeight(textToDisplay) / 2; drawText(textToDisplay, textXPos, textYPos); textYPos := textYPos + getStringHeight(textToDisplay); repaint; newGame := createCommand(Play, CM_SCREEN, 1);quit := createCommand(Quit, CM_EXIT, 1);addCommand(newGame);addCommand(quit); wait until user presses any key rep

28、eat delay(100); clickedCommand := getClickedCommand; until (clickedCommand emptyCommand); if clickedCommand = quit thengameOver := true;elsegameOver := false;removeCommand(newGame);removeCommand(quit);end;setSizes - calculates the size of a single blockand the position of the game fieldprocedure set

29、Sizes;var blockWidth, blockHeight: integer;beginscreenWidth := getWidth;screenHeight := getHeight;blockWidth := screenWidth / fieldWidth;blockHeight := screenHeight / fieldHeight;if blockHeight blockWidth then blockSize := blockWidth;elseblockSize := blockHeight;screenX := (screenWidth - blockSize*f

30、ieldWidth) / 2;screenY := (screenHeight - blockSize*fieldHeight) / 2;end;initializeGameField - makes the game field emptyprocedure initializeGameField;var i, j:integer;beginfor i:=1 to fieldWidth dofor j:=1 to fieldHeight dogameFieldi, j := 0;end;drawScore - writes the score on the screen in blackpr

31、ocedure drawScore;var stringWidth, stringHeight: integer;outputText: string;beginoutputText := Lines: + score;stringWidth := getStringWidth(outputText);stringHeight := getStringHeight(outputText);setFont(FONT_FACE_PROPORTIONAL, FONT_STYLE_PLAIN, FONT_SIZE_SMALL);setColor(0, 0, 0);drawText(outputText

32、, (screenWidth - stringWidth) / 2, (screenHeight - stringHeight) / 2);end;drawBlock - draws a single game blockprocedure drawBlock(col, row, color: integer);var red, green, blue: integer;begin set the color if color = 1 then red := 255;if color = 2 then green := 255;if color = 3 then blue := 255;if

33、color = 4 then begin red := 255; green := 255; end;if color = 5 then begin red := 255; blue := 255; end;if color = 6 then begin green := 255; blue := 255; end;if (color 0) and (row 0) and (row 0) and (col = fieldWidth) thenbeginrow := row;col := col - 1; draw the light block fill setColor(red, green

34、, blue);fillRect(screenX + col*blockSize, screenHeight - screenY - row*blockSize, blockSize, blockSize); draw the dark border around the block setColor(red/2, green/2, blue/2);drawRect(screenX + col*blockSize, screenHeight - screenY - row*blockSize, blockSize, blockSize);end;end;redrawGameScreen - r

35、edraws the screen with all the blocks procedure redrawGameScreen;var i, j: integer;beginsetColor(0, 0, 0);fillRect(0, 0, screenWidth, screenHeight);setColor(255, 255, 255);fillRect(screenX, screenY, fieldWidth * blockSize + 1, fieldHeight * blockSize + 1); draw the blocks that are down for i:=1 to f

36、ieldWidth dofor j:=1 to fieldHeight dodrawBlock(i, j, gameFieldi, j); draw the blocks that are falling for i:=1 to 4 dofor j:=1 to 4 dodrawBlock(i + blockX, j + blockY, blocki, j); draw the score text drawScore;repaint;end;createNewBlock - creates the new falling block. If you wantto change the fall

37、ing shapes, do it here.procedure createNewBlock;var x, shape: integer;beginshape := random(7);x := random(6) + 1;if shape = 0 thenbeginblock1, 4 := 0; block2, 4 := x; block3, 4 := x; block 4, 4 := 0;block1, 3 := 0; block2, 3 := x; block3, 3 := x; block 4, 3 := 0;block1, 2 := 0; block2, 2 := 0; block

38、3, 2 := 0; block 4, 2 := 0;block1, 1 := 0; block2, 1 := 0; block3, 1 := 0; block 4, 1 := 0;end;if shape = 1 thenbeginblock1, 4 := 0; block2, 4 := x; block3, 4 := 0; block 4, 4 := 0;block1, 3 := 0; block2, 3 := x; block3, 3 := 0; block 4, 3 := 0;block1, 2 := 0; block2, 2 := x; block3, 2 := 0; block 4

39、, 2 := 0;block1, 1 := 0; block2, 1 := x; block3, 1 := 0; block 4, 1 := 0;end;if shape = 2 thenbeginblock1, 4 := 0; block2, 4 := x; block3, 4 := 0; block 4, 4 := 0;block1, 3 := 0; block2, 3 := x; block3, 3 := x; block 4, 3 := 0;block1, 2 := 0; block2, 2 := 0; block3, 2 := x; block 4, 2 := 0;block1, 1

40、 := 0; block2, 1 := 0; block3, 1 := 0; block 4, 1 := 0;end;if shape = 3 thenbeginblock1, 4 := 0; block2, 4 := 0; block3, 4 := x; block 4, 4 := 0;block1, 3 := 0; block2, 3 := x; block3, 3 := x; block 4, 3 := 0;block1, 2 := 0; block2, 2 := x; block3, 2 := 0; block 4, 2 := 0;block1, 1 := 0; block2, 1 := 0; block3, 1 := 0; block 4, 1 := 0;end;if shape = 4 thenbeginblock1, 4 := 0; block2, 4 := x; block3, 4 := 0; block 4, 4 := 0;block1, 3 := 0; block2, 3 := x; block3, 3 := 0; block 4, 3 := 0;block1, 2 := 0; block2, 2 := x; block3, 2 := x; block 4, 2 := 0;block1, 1 := 0; block2, 1 := 0; block

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com