首页 俄罗斯方块游戏毕业论文

俄罗斯方块游戏毕业论文

举报
开通vip

俄罗斯方块游戏毕业论文 中国石油大学(北京)现代远程教育 毕 业 设 计(论文) 俄罗斯方块游戏 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名:       日...

俄罗斯方块游戏毕业论文
中国石油大学(北京)现代远程教育 毕 业 设 计(论文) 俄罗斯方块游戏 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名:       日  期:        ​​​​​​​​​​​​ 指导教师签名:        日  期:        使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:        日  期:        ​​​​​​​​​​​​ 俄罗斯方块游戏 摘 要 俄罗斯方块是一款风靡全球的掌上游戏机和PC机游戏,它造成的轰动与创造的经济价值可以说是游戏史上的一件大事。它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷,俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。相信大多数人都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的 练习题 用券下载整式乘法计算练习题幼小衔接专项练习题下载拼音练习题下载凑十法练习题下载幼升小练习题下载免费 材。 关键词:俄罗斯方块开发;游戏编程;程序开发 目 录 1 1. 前言 2 2.功能描述 3 3.总体设计 3 3.1 功能模块设计 3 3.1.1 游戏执行主流程 3 3.1.2 游戏方块预览 5 3.1.3 游戏方块控制 6 3.1.4 游戏显示更新 7 3.1.5 游戏速度分数更新 7 3.1.6 游戏帮助 7 3.2 数据结构设计 7 3.2.1 游戏底板BOARD结构体 7 3.2.2 游戏方块SHAPE结构体 8 3.2.3 SHAPE结构数组 11 3.3 函数功能描述 12 4.程序实现 12 4.1 源码 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 12 4.1.1 程序预处理 16 4.1.2 主函数main() 21 4.1.3 初始化界面 22 4.1.4 时钟中断处理 24 4.1.5 成绩、速度及帮助的显示 25 4.1.6 满行处理 29 4.1.7 游戏方块的显示和清除 34 4.1.8 游戏方块操作判断处理 40 4.2 运行结果 40 4.2.1 游戏初始状态 41 4.2.2 游戏进行状态 42 5. 结论 43 致谢 44 参考文献 1.前言 俄罗斯方块(Tetris)原本是前苏联科学家阿列克谢·帕吉特洛夫在1984年6月利用空闲时间所编写的游戏程序,据说游戏的作者最喜欢网球(Tennis)运动,于是,它把来源于希腊语的tetra(意为“四”)与其结合,造了“tetris”一词,之后开始提供授权给各个游戏公司,造成各平台上俄罗斯游戏软件大量 发行的现象。 俄罗斯方块由于上手简单、老少皆宜,从而成为了家喻户晓款风靡全球的一款电视游戏机和掌上游戏机游戏。 C语言则是目前国际上比较流行的计算机高级编程语言之一,因其简洁、使用方便且具备强大的功能而受到编程人员的普遍青睐。它既适合作为系统描述语言,也可以用来编写系统软件,还可以来编写应用软件。 用C语言来编写俄罗斯方块这个游戏有较大优势:C语言具有各种各样的数据类型,并引入了指针概念,使得程序效率更高;C语言还包含很广泛的运算符;另外C语言具有强大的图形功能,支持多种显示器和驱动器,而且计算功能、逻辑判断能力也比较强大。 选择此论文题是旨在训练基本编程能力和游戏开发技巧,熟悉C语言图形模式下的编程。本程序中涉及结构体、数组、时钟中断及绘图等方面的知识。通过本程序的训练,能对C语言有一个更深刻的了解,掌握俄罗斯方块游戏开发的基本原理,为将来开发出高质量的游戏软件打下坚实的基础。 2.功能描述 如图2.1所示,本游戏主要实现一下几种功能: 图2.1 俄罗斯方块游戏功能描述图 (1) 游戏方块预览功能。在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。由于在此游戏中存在19种不同的游戏方块,所以在游戏方块预览区域中需要显示随机生成的游戏方块。 (2) 游戏方块控制功能。通过各种条件的判断,实现对游戏方块的左移、右移、快速下移、自由下落、旋转功能,以及行满消除行的功能。 (3) 游戏显示更新功能。当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块,用新坐标重绘游戏方块。当消除满行时,要重绘游戏底板的当前状态。 (4) 游戏速度分数更新功能。在游戏玩家进行游戏过程中,需要按照一定的游戏规则给玩家计算游戏分数。比如,消除一行加10分。当游戏分数达到一定数量之后,需要给游戏者进行等级的上升,每上升一个等级,游戏方块的下落速度将加快,游戏的难度将增加。 (5) 游戏帮助功能。玩家进入游戏后,将有对本游戏如何操作的友情提示。 3.总体设计 3.1 功能模块设计 3.1.1 游戏执行主流程 本俄罗斯方块游戏执行主流程图3.1所示。在判断键值时,有左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、变形旋转VK_UP、退出VK_ESC键值的判断。 3.1.2 游戏方块预览 新游戏方块将在如图3.2所示的4×4的正方形小方块中预览。使用随机函数rand()来产生1~19之间的游戏方块编号,并作为预览的方块编号。其中的正方形小方块的大小为BSIZE×BSIZE。BSIZE为设定的像素大小。 图3.2 游戏方块预览图 图3.1 游戏执行主流程图 3.1.3 游戏方块控制 这是此游戏开发的重点和难点部分。下面分别较少左移、右移、下移、旋转及满行判断的实现。 左移的实现过程如下: (1) 判断在当前的游戏底板中能否左移。这一判断必须满足如下两条件:游戏方块整体左移一位后,游戏方块不能超越游戏底板的左边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这两个条件,则执行下面的左移动作。否则不执行左移动作。 (2) 清除左移前的游戏方块。 (3) 在左移一位的位置,重新显示此游戏方块。 右移的实现过程如下: (1) 判断在当前游戏底板中能否右移。这一判断必须满足如下两个条件:游戏方块整体右移一位后,游戏方块不能超越游戏底板的右边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这两个条件,则执行下面的右移动作。否则不只执行右移动作。 (2) 清除右移前的游戏方块。 (3) 在右移一位的位置,重新显示此游戏方块。 下移的实现过程如下: (1) 判断在当前游戏底板中能否下移。这一判断必须满足如下两个条件:游戏方块整体下移一位后,游戏方块不能超越游戏底板的底边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这两个条件,则执行下面的下移动作。否则,将flag_newbox标志置1,主循环中会判断此标志,若为1,则会生成下一个游戏方块,并更新预览游戏方块。 (2) 清除下移前的游戏方块。 (3) 在下移一位的位置,重新显示此游戏方块。 旋转的实现过程如下: (1) 判断在当前游戏底板中能否旋转。这一判断必须满足如下条件:游戏方块整旋转后,游戏方块不能超越游戏底板的左边线、右边线和底边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这些条件,则执行下面的旋转动作。否则不只执行旋转动作。 (2) 清除旋转前的游戏方块。 (3) 在游戏方块显示区域(4×4)不变的位置,利用保存当前游戏方块的数据结构中的next值作为旋转后形成的新游戏方块的编号,并重新显示这个编号的游戏方块。 当生成新的游戏方块前,执行行满的检查,判断行满的过程为: 一次从下到上扫描游戏底板中的各行,若某行中1的个数等于游戏底板水平方向上的小方块的个数,则表示此行是满的。找到满行后,立即将游戏底板中的数据往下顺移一行,直到游戏底板逐行扫描完毕。 3.1.4 游戏显示更新 当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块,用新坐标重绘游戏方块。当消除满行时,要重绘游戏底板的当前状态。 清除方块的过程为:用先画轮廓再填充的方式,使用背景色填充小方块,然后使用前景色画一个游戏底板中的小方块。循环此过程,变化当前坐标,填充及画出共16个这样的小方块。这样在游戏底板中,清除了此游戏方块。 3.1.5 游戏速度分数更新 当判断出一行满时,score变量一固定值(如10),可以吧等级level看作是速度speed,因为速度speed是根据计分score值不断上升的,所以我们定义level=speed==score/speed_step,其中speed_step是每升一级所需要的分数。方块下落速度加快,这是不断修改了定时计数器变量TimerCounter判断条件的结果。速度越快,时间中断的间隔就越短。 3.1.6 游戏帮助 实现比较简单,使用outtextxy()函数实现。 3.2 数据结构设计 3.2.1 游戏底板BOARD结构体 Struct BOARD { Int var; Int color; }Table_board[Vertical_boxs][Horizontal_boxs]; BOARD结构体表示游戏底板中每个小方块所具有的属性。其中var表示小方块当前状态,只有0与1两个值,表示此小方块已被占用,0表示未被占用。Color表示小方块的颜色,游戏底板的每个小方块可以拥有不同的颜色,以增强美观。Vertical_boxs为游戏底板上垂直的方向上小方块的个数,Horizontal_boxs为游戏底板上水平的方向上小方块的个数。 3.2.2 游戏方块SHAPE结构体 struct SHAPE { char box[2]; int color; /*每个方块的颜色*/ int next; /*下个方块的编号*/ }; SHAPE结构体表示某个游戏方块具有的属性。其中,char box[2]表示用2个字节来表示这个游戏方块的形状。每4位来表示一个游戏方块的一行。Color表示每个游戏方块的颜色,颜色可设为BLACK、BLUE、GREEN、CYAN、RE、MAGENTA、BROWN、LIGHTGRAY、DARKGRAY、LIGHTBLUE、LIGHTCYAN、LIGHTRED、LIGHTMAGENTA、YELLOW和WHITE。 next表示下个游戏方块的编号,在旋转时需要用到此编号。 如box[0]="0x88",box[1]="0xc0",其中0x88和0xc0为十六进制表示形式,具体表现的含义如图3.3所示。 图3.3 SHAPE结构示意图 3.2.3 SHAPE结构数组 初始化游戏方块内容,即定义 MAX_BOX个SHAPE类型的结构数组,并初始化。MAX_BOX为19。应为一共有19种不同形状的俄罗斯方块。 struct SHAPE shapes[MAX_BOX]= { /* * 口 口口口 口口 口 * 口 口 口 口口口 * 口口 口 */ {0x88, 0xc0, CYAN, 1}, {0xe8, 0x0, CYAN, 2}, {0xc4, 0x40, CYAN, 3}, {0x2e, 0x0, CYAN, 0}, /* * 口 口口 口口口 * 口 口 口 口 * 口口 口口口 口 */ {0x44, 0xc0, MAGENTA, 5}, {0x8e, 0x0, MAGENTA, 6}, {0xc8, 0x80, MAGENTA, 7}, {0xe2, 0x0, MAGENTA, 4}, /* * 口 * 口口 口口 * 口 口口 */ {0x8c, 0x40, YELLOW, 9}, {0x6c, 0x0, YELLOW, 8}, /* * 口 口口 * 口口 口口 * 口 */ {0x4c, 0x80, BROWN, 11}, {0xc6, 0x0, BROWN, 10}, /* * 口 口 口 * 口口口 口口 口口口 口口 * 口 口 口 */ {0x4e, 0x0, WHITE, 13}, {0x8c, 0x80, WHITE, 14}, {0xe4, 0x0, WHITE, 15}, {0x4c, 0x40, WHITE, 12}, /* 口 * 口 * 口 口口口口 * 口 */ {0x88, 0x88, RED, 17}, {0xf0, 0x0, RED, 16}, /* * 口口 * 口口 */ {0xcc, 0x0, BLUE, 18} } 3.3 函数功能描述 (1) newtimer() 函数原型:void interrupt newtimer(void) Newtimer()函数用于为新的时钟中断处理函数。 (2) SetTimer() 函数原型:void SetTimer(void interrupt(*IntProc)(void)) SetTimer()函数用于设置新的时钟中断处理过程。 (3) KillTimer() 函数原型:void KillTimer() KillTimer()函数用于恢复原有的时钟中断处理过程。 (4) initialize() 函数原型:void initialize( int x,int y,int m,int n) Initialize()函数用于初始化界面,具体为在传入参数x、y指明位置上画m行n列小方块,并显示积分、等级、帮助及预览游戏方块等。 (5) DelFullRow() 函数原型:int DelFullRow(int y) DelFullRow()函数用于处理删除一满行的情况。Y指明具体哪一行为满行。 (6) setFullRow() 函数原型:void setFullRow(int t_boardy) setFullRow()函数用于找到满行,并调用DelFullRow()函数来处理满行。t_boardy为在游戏底板中的垂直方向的坐标值。 (7) MkNextBox() 函数原型:int MkNextBox(int box_numb) MkNextBox()函数用于生成下一个游戏方块,并返回方块号。Box_numb表示当前的游戏方块号。 (8) EraseBox() 函数原型:void EraseBox(int x,int y,int box_numb) EraseBox()函数用于清除(x,y)位置开始的编号为box_numb的游戏方块。 (9) show_box() 函数原型:void show_box(int x,int y,int box_numb,int color) show_box()函数用于显示(x,y)位置开始的编号为box_numb的、颜色值为color的游戏方块。 (10) MoveAble() 函数原型:int MoveAble(int x,int y,int box_numb,int direction) MoveAble()函数判断是否可以移动。(x,y)为当前方块位置,box_numb为方块号,direction为方向标志,返回true和false。 (11) 主函数main() 整个游戏的主控部分。 4.程序实现 4.1 源码分析 4.1.1 程序预处理 包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。 /*加载头文件*/ #include #include #include #include /*图形函数库*/ /*定义按键码*/ #define VK_LEFT 0x4b00 #define VK_RIGHT 0x4d00 #define VK_DOWN 0x5000 #define VK_UP 0x4800 #define VK_ESC 0x011b #define TIMER 0x1c /*设置中断号*/ /*定义常量*/ #define MAX_BOX 19 /*总共有19种各形态的方块*/ #define BSIZE 20 /*方块的边长是20个象素*/ #define Sys_x 160 /*显示方块界面的左上角x座标*/ #define Sys_y 25 /*显示方块界面的左上角y座标*/ #define Horizontal_boxs 10 /*水平的方向以方块为单位的长度*/ #define Vertical_boxs 15 /*垂直的方向以方块为单位的长度*/ #define Begin_boxs_x Horizontal_boxs/2 /*产生第一个方块时出现的起始位置*/ #define FgColor 3 /*前景颜色,如文字.2-green*/ #define BgColor 0 /*背景颜色.0-blac*/ #define LeftWin_x Sys_x+Horizontal_boxs*BSIZE+46 /*右边状态栏的x座标*/ #define false 0 #define true 1 /*移动的方向*/ #define MoveLeft 1 #define MoveRight 2 #define MoveDown 3 #define MoveRoll 4 /*以后坐标的每个方块可以看作是像素点是BSIZE*BSIZE的正方形*/ /*定义全局变量*/ int current_box_numb; /*保存当前方块编号*/ int Curbox_x=Sys_x+Begin_boxs_x*BSIZE,Curbox_y=Sys_y; /*x,y是保存方块的当前坐标的*/ int flag_newbox=false; /*是否要产生新方块的标记0*/ int speed=0; /*下落速度*/ int score=0; /*总分*/ int speed_step=30; /*每等级所需要分数*/ void interrupt (*oldtimer)(void); /* 指向原来时钟中断处理过程入口的中断处理函数指针 */ struct BOARD /*游戏底板结构,表示每个点所具有的属性*/ { int var; /*当前状态 只有0和1,1表示此点已被占用*/ int color; /*颜色,游戏底板的每个点可以拥有不同的颜色.增强美观*/ }Table_board[Vertical_boxs][Horizontal_boxs]; /*方块结构*/ struct SHAPE { char box[2]; /*一个字节等于8位,每4位来表示一个方块的一行 如:box[0]="0x88",box[1]="0xc0"表示的是: 1000 1000 1100 0000*/ int color; /*每个方块的颜色*/ int next; /*下个方块的编号*/ }; /*初始化方块内容.即定义MAX_BOX个SHAPE类型的结构数组,并初始化*/ struct SHAPE shapes[MAX_BOX]= { /* * 口 口口口 口口 口 * 口 口 口 口口口 * 口口 口 */ {0x88, 0xc0, CYAN, 1}, {0xe8, 0x0, CYAN, 2}, {0xc4, 0x40, CYAN, 3}, {0x2e, 0x0, CYAN, 0}, /* * 口 口口 口口口 * 口 口 口 口 * 口口 口口口 口 */ {0x44, 0xc0, MAGENTA, 5}, {0x8e, 0x0, MAGENTA, 6}, {0xc8, 0x80, MAGENTA, 7}, {0xe2, 0x0, MAGENTA, 4}, /* * 口 * 口口 口口 * 口 口口 */ {0x8c, 0x40, YELLOW, 9}, {0x6c, 0x0, YELLOW, 8}, /* * 口 口口 * 口口 口口 * 口 */ {0x4c, 0x80, BROWN, 11}, {0xc6, 0x0, BROWN, 10}, /* * 口 口 口 * 口口口 口口 口口口 口口 * 口 口 口 */ {0x4e, 0x0, WHITE, 13}, {0x8c, 0x80, WHITE, 14}, {0xe4, 0x0, WHITE, 15}, {0x4c, 0x40, WHITE, 12}, /* 口 * 口 * 口 口口口口 * 口 */ {0x88, 0x88, RED, 17}, {0xf0, 0x0, RED, 16}, /* * 口口 * 口口 */ {0xcc, 0x0, BLUE, 18} }; unsigned int TimerCounter=0; /*定时计数器变量*/ 4.1.2 主函数main() Main()函数主要是实现了对整个程序的运行控制,以及相关功能模块的调用。 void main() { int GameOver=0; int key,nextbox; int Currentaction=0;/*标记当前动作状态*/ int gd=VGA,gm=VGAHI,errorcode; initgraph(&gd,&gm,""); errorcode = graphresult(); if (errorcode != grOk) { printf("\nNotice:Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to quit!"); getch(); exit(1); } setbkcolor(BgColor); setcolor(FgColor); randomize(); SetTimer(newtimer); initialize(Sys_x,Sys_y,Horizontal_boxs,Vertical_boxs);/*初始化*/ nextbox=MkNextBox(-1); show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); show_box(LeftWin_x,Curbox_y+200,nextbox,shapes[nextbox].color); show_intro(Sys_x,Curbox_y+320); getch(); while(1) { /* Currentaction=0; flag_newbox=false; 检测是否有按键*/ if (bioskey(1)){key=bioskey(0); } else { key=0; } switch(key) { case VK_LEFT: if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveLeft)) {EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x-=BSIZE;Currentaction=MoveLeft;} break; case VK_RIGHT: if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveRight)) {EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x+=BSIZE;Currentaction=MoveRight;} break; case VK_DOWN: if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown)) {EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_y+=BSIZE;Currentaction=MoveDown;} else flag_newbox=true; break; case VK_UP:/*旋转方块*/ if(MoveAble(Curbox_x,Curbox_y,shapes[current_box_numb].next,MoveRoll)) {EraseBox(Curbox_x,Curbox_y,current_box_numb);current_box_numb=shapes[current_box_numb].next; Currentaction=MoveRoll; } break; case VK_ESC: GameOver=1; break; default: break; } if(Currentaction) { /*表示当前有动作,移动或转动*/ show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); Currentaction=0; } /*按了往下键,但不能下移,就产生新方块*/ if(flag_newbox) { /*这时相当于方块到底部了,把其中出现点满一行的清去,置0*/ ErasePreBox(LeftWin_x,Sys_y+200,nextbox); nextbox=MkNextBox(nextbox); show_box(LeftWin_x,Curbox_y+200,nextbox,shapes[nextbox].color); if(!MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown))/*刚一开始,游戏结束*/ { show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); GameOver=1; } else { flag_newbox=false; } Currentaction=0; } else /*自由下落*/ { if (Currentaction==MoveDown || TimerCounter> (20-speed*2)) { if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown)) { EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_y+=BSIZE; show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); } TimerCounter=0; } } if(GameOver )/*|| flag_newbox==-1*/ { printf("game over,thank you! your score is %d",score); getch(); break; } } getch(); KillTimer(); closegraph(); } 4.1.3 初始化界面 玩家进行游戏时,需要对游戏界面进行初始化工作。此代码被main()函数调用。主要进行的工作如下: (1) 循环调用line()函数绘制当前游戏板。 (2) 调用ShowScore()函数显示初始的成绩,初始成绩为0。 (3) 调用ShowSpeed()函数显示初始的速度(等级),初始速度1。 /**********初始化界面******* *参数说明: * x,y为左上角坐标 * m,n对应于Vertical_boxs,Horizontal_boxs * 分别表示纵横方向上方块的个数(以方块为单位) * BSIZE Sys_x Sys_y **********************************/ void initialize(int x,int y,int m,int n) { int i,j,oldx; oldx=x; for(j=0;j=t_boardy;n--) { if(n<0 || n>=Vertical_boxs ){continue;} /*超过低线了*/ for(m=0;m=Vertical_boxs)continue; /*超过低线了*/ for(m=0;m=0;n--)/*从当前行往上看*/ { totoal=0; for(m=0;m=MAX_BOX)/*指定的方块不存在*/ box_numb=MAX_BOX/2; setfillstyle(SOLID_FILL,color); /********************************* * 移位来判断第哪一位是1 * 方块是每1行用半个字节来表示 * 128d=1000 0000b *********************************/ for(ii=0;ii<2;ii++) { int mask=128; for(i=0;i<8;i++) { if(i%4==0 && i!=0) /*表示转到方块的下一行了*/ { y+=BSIZE; x=ls_x; } if((shapes[box_numb].box[ii])&mask) { bar(x,y,x+BSIZE,y+BSIZE); line(x,y,x+BSIZE,y); line(x,y,x,y+BSIZE); line(x,y+BSIZE,x+BSIZE,y+BSIZE); line(x+BSIZE,y,x+BSIZE,y+BSIZE); } x+=BSIZE; mask/=2; } y+=BSIZE; x=ls_x; } } /* * 擦除(x,y)位置开始的编号为box_numb的box. */ void EraseBox(int x,int y,int box_numb) { int mask=128,t_boardx,t_boardy,n,m; setfillstyle(SOLID_FILL,BgColor); for(n=0;n<4;n++) { for(m=0;m<4;m++) /*看最左边四个单元*/ { if( ((shapes[box_numb].box[n/2]) & mask) )/*最左边有方块并且当前游戏板也有方块*/ { bar(x+m*BSIZE,y+n*BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE+BSIZE); line(x+m*BSIZE,y+n*BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE); line(x+m*BSIZE,y+n*BSIZE,x+m*BSIZE,y+n*BSIZE+BSIZE); line(x+m*BSIZE,y+n*BSIZE+BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE+BSIZE); line(x+m*BSIZE+BSIZE,y+n*BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE+BSIZE); } mask=mask/(2); if(mask==0)mask=128; } } } void ErasePreBox(int x,int y,int box_numb) { int mask=128,t_boardx,t_boardy,n,m; setfillstyle(SOLID_FILL,BgColor); for(n=0;n<4;n++) { for(m=0;m<4;m++) /*看最左边四个单元*/ { if( ((shapes[box_numb].box[n/2]) & mask) )/*最左边有方块并且当前游戏板也有方块*/ { bar(x+m*BSIZE,y+n*BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE+BSIZE); } mask=mask/(2); if(mask==0)mask=128; } } } /* * 将新形状的方块放置在游戏板上,并返回此方块号 */ int MkNextBox(int box_numb) { int mask=128,t_boardx,t_boardy,n,m; t_boardx=(Curbox_x-Sys_x)/BSIZE; t_boardy=(Curbox_y-Sys_y)/BSIZE; for(n=0;n<4;n++) { for(m=0;m<4;m++) { if( ((shapes[current_box_numb].box[n/2]) & mask) ) { Table_board[t_boardy+n][t_boardx+m].var=1;/*这里设置游戏板*/ Table_board[t_boardy+n][t_boardx+m].color=shapes[current_box_numb].color;/*这里设置游戏板*/ } mask=mask/(2); if(mask==0)mask=128; } } setFullRow(t_boardy); Curbox_x=Sys_x+Begin_boxs_x*BSIZE,Curbox_y=Sys_y;/*再次初始化座标*/ if(box_numb==-1) box_numb=rand()%MAX_BOX; current_box_numb=box_numb; flag_newbox=false; return(rand()%MAX_BOX); } 4.1.8 游戏方块操作判断处理 游戏方块操作判断处理主要执行对当前操作进行条件判断,若满足相关条件,则返回true,即允许执行此操作。此判断由MoveAble(int x,int y,int box_numb,int direction)函数来实现,其中(x,y)为当前游戏方块位置,box_numb为游戏方块号,direction为左移、右移、下移或自由下落、旋转的标志。对这些动作判断的实现基本相同,因此,下面以对左移操作的判断为例讲述其实现过程。 (1) 计算出游戏方块左移一个方块后的新的相对坐标(t_boardx,t_boardy),并初始化mask=128(10000000)。Mask用来对当前游戏方块的box值进行按位于操作,逐位判断box[0]的值,box在结构体中定义为int box[2],即有两个元素的数组。若box[0]&mask=1,则表示box[0]的最高位是1,在游戏方块中表示此位置不为空。 (2) 逐行逐列进行判断,共4行4列,即游戏方块的大小。对每个小方块一次进行判断,若小方块的值是1,左移一位后其横坐标没有超过游戏主板的最左边,并且在此位置游戏主板的值Table_board[t_boardy+n][t_boardx+m].var为0,即表示是空的,则可以执行左移操作。任意小方块不满足上述任意条件,都不能执行此左移操作。 /* 判断是否可以移动 * x,y为当前方块位置 * box_numb为方块号 * direction 方向标志 * 返回true 和false #define MoveLeft -1 #define MoveRight 1 #define MoveDown 0 */ int MoveAble(int x,int y,int box_numb,int direction) { int n,m,t_boardx,t_boardy; /*t_boardx 当前方块最左边在游戏板的位置*/ int mask; if(direction==MoveLeft) /*如果向左移*/ { mask=128; x-=BSIZE; t_boardx=(x-Sys_x)/BSIZE; t_boardy=(y-Sys_y)/BSIZE; for(n=0;n<4;n++) { for(m=0;m<4;m++) /*看最左边四个单元*/ { if((shapes[box_numb].box[n/2]) & mask)/*最左边有方块并且当前游戏板也有方块*/ { if((x+BSIZE*m)=(Sys_x+BSIZE*Horizontal_boxs) )return(false);/*碰到最右边了*/ else if( Table_board[t_boardy+n][t_boardx+m].var) { return(false); } } mask=mask/(2); if(mask==0)mask=128; } } return(true); } else if(direction==MoveDown) /*如果向下移*/ { y+=BSIZE; t_boardx=(x-Sys_x)/BSIZE; t_boardy=(y-Sys_y)/BSIZE; mask=128; for(n=0;n<4;n++) { for(m=0;m<4;m++) /*看最下边四个单元*/ { if((shapes[box_numb].box[n/2]) & mask)/*最下边有方块并且当前游戏板也有方块*/ { if((y+BSIZE*n)>=(Sys_y+BSIZE*Vertical_boxs) || Table_board[t_boardy+n][t_boardx+m].var) { flag_newbox=true; break; } } mask=mask/(2); /*mask依次为:10000000,01000000,00100000,00010000 00001000,00000100,00000010/00000001 */ if(mask==0)mask=128; } } if(flag_newbox) { return(false); } else return(true); } else if(direction==MoveRoll) /*转动*/ { t_boardx=(x-Sys_x)/BSIZE; t_boardy=(y-Sys_y)/BSIZE; mask=128; for(n=0;n<4;n++) { for(m=0;m<4;m++) /*看最下边四个单元*/ { if((shapes[box_numb].box[n/2]) & mask)/*最下边有方块并且当前游戏板也有方块*/ { if((y+BSIZE*n)>=(Sys_y+BSIZE*Vertical_boxs) )return(false);/*碰到最下边了*/ if((x+BSIZE*n)>=(Sys_x+BSIZE*Horizontal_boxs) )return(false);/*碰到最左边了*/ if((x+BSIZE*m)>=(Sys_x+BSIZE*Horizontal_boxs) )return(false);/*碰到最右边了*/ else if( Table_board[t_boardy+n][t_boardx+m].var) { return(false); } } mask=mask/(2); if(mask==0)mask=128; } } return(true); } else { return(false); } } 4.2 运行结果 4.2.1 游戏初始状态 当用户刚进入游戏时,如图4.2所示。此时,分数初始化为0,等级默认为1。游戏当前设置为成绩每增加30分等级就升一级,升级后游戏方块在原来基础上下落速度有所加快,这主要是变化了定时器的时间间隔的缘故。用户可使用键盘左移键、右移键、上移键和下移键,分别进行左移、右移、旋转和下落操作。用户可按ESC键退出游戏。 图4.2 游戏初始状态 4.2.2 游戏进行状态 图4.3为游戏等级提升了一级后的状态,级别越高,游戏方块下落速度越快。 图4.3 游戏进行状态 5. 结论 本文介绍了俄罗斯方块这款风靡世界的游戏的设计思路及其编程实现。重点介绍各功能模块的设计原理和数据结构的实现。 通过本论文程序的编写和开发,进一步的提高了自己的基本编程能力和游戏开发技巧,熟悉了C语言图形模式下的编程。深入的理解了程序中有关结构体、数组、时钟中断及绘图等方面的知识。通过本程序的训练,使我对C语言有了一个更能深刻的了解。 本文的程序设计借鉴了参考书籍和互联网上相关程序的设计思想,在此对相关网站的源代码提供者表示衷心的感谢。 由于时间、经验及水平的原因,论文中难免有不足之处。许多问题往往都不是只有一种解决方法,本游戏的开发也是如此,可以对此程序进行优化和功能完善或者使用不同方法来实现某些功能,以达到学以致用的目的。 致谢 三年的艰苦跋涉,多个月的精心准备,毕业论文终于到了划句号的时候,心头照例该如释重负,但写作过程中常常出现的辗转反侧和力不从心之感却挥之不去。论文写作的过程并不轻松,工作的压力时时袭扰,知识的积累尚欠火候,于是,我只能一次次埋头于图书馆中,一次次在深夜奋笔疾书。第一次花费如此长的时间和如此多的精力,完成一篇具有价值的论文,其中的艰辛与困难难以诉说,但曲终幕落后留下的滋味,值得我一生慢慢品尝。 通过这一阶段的努力,我的毕业论文《俄罗斯方块游戏(C语言)》终于完成了,这意味着大学生活即将结束。在大学阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。 当然最该感谢的是我的父母。感谢他们的教诲之情。在我成长的道路上,你们用平凡朴实的做人准则教我如何做人,没有深奥的道理,没有华丽的词语,他们用自己的一言一行教我怎样做一个真正的人。 在此感于春老师在论文方面的指导和帮助,感谢刘红梅、付强、龚浩、查勇、蔡淮等老师在过去几年的教学指导和帮助。 在三年的学习期间,得到张植星、何宗欣、廖建、郭挺、赵天擎、王海峰等同学的关心和帮助,在此表示深深的感谢。没有他们的帮助和支持是没有办法完成我的毕业论文的,同窗之间的友谊永远长存。 参考文献 1) 《C语言大学实用 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 》 苏小红等编著 电子工业出版社. 2) 《VisualC++面向对象与可视化程序设计》 黄维通 编著 清华大学出版社. 3) 《数据结构(C语言版)》 严蔚敏 吴伟民 编著 清华大学出版社. 4) 《VisualC++游戏设计》 荣软科技 编著 北京科海电子出版社. 5) 《C语言程序设计 案例 全员育人导师制案例信息技术应用案例心得信息技术教学案例综合实践活动案例我余额宝案例 教程》 仇芒仙,张丽华 清华大学出版社. 6) 《C语言程序设计(第三版)+上机指导 》 谭浩强 清华大学出版社 . 7) 《C语言参悟之旅》 左飞 李召恒 中国铁道出版社 . 8) 《UML+OOPC嵌入式C语言开发精讲》 高焕堂 电子工业出版社 . 9) 《C语言程序设计方法》 邓文新 主编 清华大学出版社. 10) 《C语言程序设计教程》 冉崇善 主编 机械工业出版社. 11) 《 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 C语言程序设计及应用》 周纯杰 刘正林等 编著 华中科技大学. 12) 《C语言课程设计案例精编》 姜灵芝、余健 编著 清华大学出版社. 13) 《C++ 程序设计》 谭浩强 主编 清华大学出版社. 14) 《C++Primer中文版 第4版》(美)Stanley B. Lippman Barbara 人民邮电出版社. 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名:       日  期:        ​​​​​​​​​​​​ 指导教师签名:        日  期:        使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:        日  期:        ​​​​​​​​​​​​ 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权      大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 独 创 声 明 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 本声明的法律后果由本人承担。   作者签名: 二〇一〇年九月二十日   毕业设计(论文)使用授权声明 本人完全了解**学院关于收集、保存、使用毕业设计(论文)的规定。 本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定)   作者签名: 二〇一〇年九月二十日 基本要求:写毕业论文主要目的是培养学生综合运用所学知识和技能,理论联系实际,独立分析,解决实际问题的能力,使学生得到从事本专业工作和进行相关的基本训练。毕业论文应反映出作者能够准确地掌握所学的专业基础知识,基本学会综合运用所学知识进行科学研究的方法,对所研究的题目有一定的心得体会,论文题目的范围不宜过宽,一般选择本学科某一重要问题的一个侧面。 毕业论文的基本教学要求是: 1、培养学生综合运用、巩固与扩展所学的基础理论和专业知识,培养学生独立分析、解决实际问题能力、培养学生处理数据和信息的能力。2、培养学生正确的理论联系实际的工作作风,严肃认真的科学态度。3、培养学生进行社会调查研究;文献资料收集、阅读和整理、使用;提出论点、综合论证、总结写作等基本技能。 毕业论文是毕业生总结性的独立作业,是学生运用在校学习的基本知识和基础理论,去分析、解决一两个实际问题的实践锻炼过程,也是学生在校学习期间学习成果的综合性总结,是整个教学活动中不可缺少的重要环节。撰写毕业论文对于培养学生初步的科学研究能力,提高其综合运用所学知识分析问题、解决问题能力有着重要意义。 毕业论文在进行编写的过程中,需要经过开题报告、论文编写、论文上交评定、论文答辩以及论文评分五个过程,其中开题报告是论文进行的最重要的一个过程,也是论文能否进行的一个重要指标。 撰写意义:1.撰写毕业论文是检验学生在校学习成果的重要措施,也是提高教学质量的重要环节。大学生在毕业前都必须完成毕业论文的撰写任务。申请学位必须提交相应的学位论文,经答辩通过后,方可取得学位。可以这么说,毕业论文是结束大学学习生活走向社会的一个中介和桥梁。毕业论文是大学生才华的第一次显露,是向祖国和人民所交的一份有份量的答卷,是投身社会主义现代化建设事业的报到书。一篇毕业论文虽然不能全面地反映出一个人的才华,也不一定能对社会直接带来巨大的效益,对专业产生开拓性的影响。但是,实践证明,撰写毕业论文是提高教学质量的重要环节,是保证出好人才的重要措施。 2.通过撰写毕业论文,提高写作水平是干部队伍“四化”建设的需要。党中央要求,为了适应现代化建设的需要,领导班子成员应当逐步实现“革命化、年轻化、知识化、专业化”。这个“四化”的要求,也包含了对干部写作能力和写作水平的要求。 3.提高大学生的写作水平是社会主义物质文明和精神文明建设的需要。在新的历史时期,无论是提高全族的科学文化水平,掌握现代科技知识和科学管理方法,还是培养社会主义新人,都要求我们的干部具有较高的写作能力。在经济建设中,作为领导人员和机关的办事人员,要写指示、通知、总结、调查报告等应用文;要写说明书、广告、解说词等说明文;还要写科学论文、经济评论等议论文。在当今信息社会中,信息对于加快经济发展速度,取得良好的经济效益发挥着愈来愈大的作用。写作是以语言文字为信号,是传达信息的方式。信息的来源、信息的收集、信息的储存、整理、传播等等都离不开写作。 论文种类:毕业论文是学术论文的一种形式,为了进一步探讨和掌握毕业论文的写作规律和特点,需要对毕业论文进行分类。由于毕业论文本身的内容和性质不同,研究领域、对象、方法、表现方式不同,因此,毕业论文就有不同的分类方法。 按内容性质和研究方法的不同可以把毕业论文分为理论性论文、实验性论文、描述性论文和设计性论文。后三种论文主要是理工科大学生可以选择的论文形式,这里不作介绍。文科大学生一般写的是理论性论文。理论性论文具体又可分成两种:一种是以纯粹的抽象理论为研究对象,研究方法是严密的理论推导和数学运算,有的也涉及实验与观测,用以验证论点的正确性。另一种是以对客观事物和现象的调查、考察所得观测资料以及有关文献资料数据为研究对象,研究方法是对有关资料进行分析、综合、概括、抽象,通过归纳、演绎、类比,提出某种新的理论和新的见解。 按议论的性质不同可以把毕业论文分为立论文和驳论文。立论性的毕业论文是指从正面阐述论证自己的观点和主张。一篇论文侧重于以立论为主,就属于立论性论文。立论文要求论点鲜明,论据充分,论证严密,以理和事实服人。驳论性毕业论文是指通过反驳别人的论点来树立自己的论点和主张。如果毕业论文侧重于以驳论为主,批驳某些错误的观点、见解、理论,就属于驳论性毕业论文。驳论文除按立论文对论点、论据、论证的要求以外,还要求针锋相对,据理力争。 按研究问题的大小不同可以把毕业论文分为宏观论文和微观论文。凡届国家全局性、带有普遍性并对局部工作有一定指导意义的论文,称为宏观论文。它研究的面比较宽广,具有较大范围的影响。反之,研究局部性、具体问题的论文,是微观论文。它对具体工作有指导意义,影响的面窄一些。 另外还有一种综合型的分类方法,即把毕业论文分为专题型、论辩型、综述型和综合型四大类: 1.专题型论文。这是分析前人研究成果的基础上,以直接论述的形式发表见解,从正面提出某学科中某一学术问题的一种论文。如本书第十二章例文中的《浅析领导者突出工作重点的方法与艺术》一文,从正面论述了突出重点的工作方法的意义、方法和原则,它表明了作者对突出工作重点方法的肯定和理解。2.论辩型论文。这是针对他人在某学科中某一学术问题的见解,凭借充分的论据,着重揭露其不足或错误之处,通过论辩形式来发表见解的一种论文。3.综述型论文。这是在归纳、总结前人或今人对某学科中某一学术问题已有研究成果的基础上,加以介绍或评论,从而发表自己见解的一种论文。4.综合型论文。这是一种将综述型和论辩型两种形式有机结合起来写成的一种论文。如《关于中国民族关系史上的几个问题》一文既介绍了研究民族关系史的现状,又提出了几个值得研究的问题。因此,它是一篇综合型的论文。 写作步骤:毕业论文是高等教育自学考试本科专业应考者完成本科阶段学业的最后一个环节,它是应考者的 总结 性独立作业,目的在于总结学习专业的成果,培养综合运用所学知识解决实际 问题 的能力。从文体而言,它也是对某一专业领域的现实问题或 理论 问题进行 科学 研究 探索的具有一定意义的论说文。完成毕业论文的撰写可以分两个步骤,即选择课题和研究课题。 首先是选择课题。选题是论文撰写成败的关键。因为,选题是毕业论文撰写的第一步,它实际上就是确定“写什么”的问题,亦即确定科学研究的方向。如果“写什么”不明确,“怎么写”就无从谈起。 教育部自学考试办公室有关对毕业论文选题的途径和要求是“为鼓励理论与工作实践结合,应考者可结合本单位或本人从事的工作提出论文题目,报主考学校审查同意后确立。也可由主考学校公布论文题目,由应考者选择。毕业论文的总体要求应与普通全日制高等学校相一致,做到通过论文写作和答辩考核,检验应考者综合运用专业知识的能力”。但不管考生是自己任意选择课题,还是在主考院校公布的指定课题中选择课题,都要坚持选择有科学价值和现实意义的、切实可行的课题。选好课题是毕业论文成功的一半。 第一、要坚持选择有科学价值和现实意义的课题。科学研究的目的是为了更好地认识世界、改造世界,以推动社会的不断进步和发展 。因此,毕业论文的选题,必须紧密结合社会主义物质文明和精神文明建设的需要,以促进科学事业发展和解决现实存在问题作为出发点和落脚点。选题要符合科学研究的正确方向,要具有新颖性,有创新、有理论价值和现实的指导意义或推动作用,一项毫无意义的研究,即使花很大的精力,表达再完善,也将没有丝毫价值。具体地说,考生可从以下三个方面来选题。首先,要从现实的弊端中选题,学习了专业知识,不能仅停留在书本上和理论上,还要下一番功夫,理论联系实际,用已掌握的专业知识,去寻找和解决工作实践中急待解决的问题。其次,要从寻找科学研究的空白处和边缘领域中选题,科学研究。还有许多没有被开垦的处女地,还有许多缺陷和空白,这些都需要填补。应考者应有独特的眼光和超前的意识去思索,去发现,去研究。最后,要从寻找前人研究的不足处和错误处选题,在前人已提出来的研究课题中,许多虽已有初步的研究成果,但随着社会的不断发展,还有待于丰富、完整和发展,这种补充性或纠正性的研究课题,也是有科学价值和现实指导意义的。 第二、要根据自己的能力选择切实可行的课题。毕业论文的写作是一种创造性劳动,不但要有考生个人的见解和主张,同时还需要具备一定的客观条件。由于考生个人的主观、客观条件都是各不相同的,因此在选题时,还应结合自己的特长、兴趣及所具备的客观条件来选题。具体地说,考生可从以下三个方面来综合考虑。首先,要有充足的资料来源。“巧妇难为无米之炊”,在缺少资料的情况下,是很难写出高质量的论文的。选择一个具有丰富资料来源的课题,对课题深入研究与开展很有帮助。其次,要有浓厚的研究兴趣,选择自己感兴趣的课题,可以激发自己研究的热情,调动自己的主动性和积极性,能够以专心、细心、恒心和耐心的积极心态去完成。最后,要能结合发挥自己的业务专长,每个考生无论能力水平高低,工作岗位如何,都有自己的业务专长,选择那些能结合自己工作、发挥自己业务专长的课题,对顺利完成课题的研究大有益处。 致 谢 这次论文的完成,不止是我自己的努力,同时也有老师的指导,同学的帮助,以及那些无私奉献的前辈,正所谓你知道的越多的时候你才发现你知道的越少,通过这次论文,我想我成长了很多,不只是磨练了我的知识厚度,也使我更加确定了我今后的目标:为今后的计算机事业奋斗。在此我要感谢我的指导老师——***老师,感谢您的指导,才让我有了今天这篇论文,您不仅是我的论文导师,也是我人生的导师,谢谢您!我还要感谢我的同学,四年的相处,虽然我未必记得住每分每秒,但是我记得每一个有你们的精彩瞬间,我相信通过大学的历练,我们都已经长大,变成一个有担当,有能力的新时代青年,感谢你们的陪伴,感谢有你们,这篇论文也有你们的功劳,我想毕业不是我们的相处的结束,它是我们更好相处的开头,祝福你们!我也要感谢父母,这是他们给我的,所有的一切;感谢母校,尽管您不以我为荣,但我一直会以我是一名农大人为荣。 通过这次毕业设计,我学习了很多新知识,也对很多以前的东西有了更深的记忆与理解。漫漫求学路,过程很快乐。我要感谢信息与管理科学学院的老师,我从他们那里学到了许多珍贵的知识和做人处事的道理,以及科学严谨的学术态度,令我受益良多。同时还要感谢学院给了我一个可以认真学习,天天向上的学习环境和机会。 即将结束*大学习生活,我感谢****大学提供了一次在**大接受教育的机会,感谢院校老师的无私教导。感谢各位老师审阅我的论文。 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名:       日  期:        ​​​​​​​​​​​​ 指导教师签名:        日  期:        使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:        日  期:        ​​​​​​​​​​​​ 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权      大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 独 创 声 明 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 本声明的法律后果由本人承担。   作者签名: 年 月 日   毕业设计(论文)使用授权声明 本人完全了解**学院关于收集、保存、使用毕业设计(论文)的规定。 本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定)   作者签名: 年 月 日 基本要求:写毕业论文主要目的是培养学生综合运用所学知识和技能,理论联系实际,独立分析,解决实际问题的能力,使学生得到从事本专业工作和进行相关的基本训练。毕业论文应反映出作者能够准确地掌握所学的专业基础知识,基本学会综合运用所学知识进行科学研究的方法,对所研究的题目有一定的心得体会,论文题目的范围不宜过宽,一般选择本学科某一重要问题的一个侧面。 毕业论文的基本教学要求是: 1、培养学生综合运用、巩固与扩展所学的基础理论和专业知识,培养学生独立分析、解决实际问题能力、培养学生处理数据和信息的能力。2、培养学生正确的理论联系实际的工作作风,严肃认真的科学态度。3、培养学生进行社会调查研究;文献资料收集、阅读和整理、使用;提出论点、综合论证、总结写作等基本技能。 毕业论文是毕业生总结性的独立作业,是学生运用在校学习的基本知识和基础理论,去分析、解决一两个实际问题的实践锻炼过程,也是学生在校学习期间学习成果的综合性总结,是整个教学活动中不可缺少的重要环节。撰写毕业论文对于培养学生初步的科学研究能力,提高其综合运用所学知识分析问题、解决问题能力有着重要意义。 毕业论文在进行编写的过程中,需要经过开题报告、论文编写、论文上交评定、论文答辩以及论文评分五个过程,其中开题报告是论文进行的最重要的一个过程,也是论文能否进行的一个重要指标。 撰写意义:1.撰写毕业论文是检验学生在校学习成果的重要措施,也是提高教学质量的重要环节。大学生在毕业前都必须完成毕业论文的撰写任务。申请学位必须提交相应的学位论文,经答辩通过后,方可取得学位。可以这么说,毕业论文是结束大学学习生活走向社会的一个中介和桥梁。毕业论文是大学生才华的第一次显露,是向祖国和人民所交的一份有份量的答卷,是投身社会主义现代化建设事业的报到书。一篇毕业论文虽然不能全面地反映出一个人的才华,也不一定能对社会直接带来巨大的效益,对专业产生开拓性的影响。但是,实践证明,撰写毕业论文是提高教学质量的重要环节,是保证出好人才的重要措施。 2.通过撰写毕业论文,提高写作水平是干部队伍“四化”建设的需要。党中央要求,为了适应现代化建设的需要,领导班子成员应当逐步实现“革命化、年轻化、知识化、专业化”。这个“四化”的要求,也包含了对干部写作能力和写作水平的要求。 3.提高大学生的写作水平是社会主义物质文明和精神文明建设的需要。在新的历史时期,无论是提高全族的科学文化水平,掌握现代科技知识和科学管理方法,还是培养社会主义新人,都要求我们的干部具有较高的写作能力。在经济建设中,作为领导人员和机关的办事人员,要写指示、通知、总结、调查报告等应用文;要写说明书、广告、解说词等说明文;还要写科学论文、经济评论等议论文。在当今信息社会中,信息对于加快经济发展速度,取得良好的经济效益发挥着愈来愈大的作用。写作是以语言文字为信号,是传达信息的方式。信息的来源、信息的收集、信息的储存、整理、传播等等都离不开写作。 论文种类:毕业论文是学术论文的一种形式,为了进一步探讨和掌握毕业论文的写作规律和特点,需要对毕业论文进行分类。由于毕业论文本身的内容和性质不同,研究领域、对象、方法、表现方式不同,因此,毕业论文就有不同的分类方法。 按内容性质和研究方法的不同可以把毕业论文分为理论性论文、实验性论文、描述性论文和设计性论文。后三种论文主要是理工科大学生可以选择的论文形式,这里不作介绍。文科大学生一般写的是理论性论文。理论性论文具体又可分成两种:一种是以纯粹的抽象理论为研究对象,研究方法是严密的理论推导和数学运算,有的也涉及实验与观测,用以验证论点的正确性。另一种是以对客观事物和现象的调查、考察所得观测资料以及有关文献资料数据为研究对象,研究方法是对有关资料进行分析、综合、概括、抽象,通过归纳、演绎、类比,提出某种新的理论和新的见解。 按议论的性质不同可以把毕业论文分为立论文和驳论文。立论性的毕业论文是指从正面阐述论证自己的观点和主张。一篇论文侧重于以立论为主,就属于立论性论文。立论文要求论点鲜明,论据充分,论证严密,以理和事实服人。驳论性毕业论文是指通过反驳别人的论点来树立自己的论点和主张。如果毕业论文侧重于以驳论为主,批驳某些错误的观点、见解、理论,就属于驳论性毕业论文。驳论文除按立论文对论点、论据、论证的要求以外,还要求针锋相对,据理力争。 按研究问题的大小不同可以把毕业论文分为宏观论文和微观论文。凡届国家全局性、带有普遍性并对局部工作有一定指导意义的论文,称为宏观论文。它研究的面比较宽广,具有较大范围的影响。反之,研究局部性、具体问题的论文,是微观论文。它对具体工作有指导意义,影响的面窄一些。 另外还有一种综合型的分类方法,即把毕业论文分为专题型、论辩型、综述型和综合型四大类: 1.专题型论文。这是分析前人研究成果的基础上,以直接论述的形式发表见解,从正面提出某学科中某一学术问题的一种论文。如本书第十二章例文中的《浅析领导者突出工作重点的方法与艺术》一文,从正面论述了突出重点的工作方法的意义、方法和原则,它表明了作者对突出工作重点方法的肯定和理解。2.论辩型论文。这是针对他人在某学科中某一学术问题的见解,凭借充分的论据,着重揭露其不足或错误之处,通过论辩形式来发表见解的一种论文。3.综述型论文。这是在归纳、总结前人或今人对某学科中某一学术问题已有研究成果的基础上,加以介绍或评论,从而发表自己见解的一种论文。4.综合型论文。这是一种将综述型和论辩型两种形式有机结合起来写成的一种论文。如《关于中国民族关系史上的几个问题》一文既介绍了研究民族关系史的现状,又提出了几个值得研究的问题。因此,它是一篇综合型的论文。 写作步骤:毕业论文是高等教育自学考试本科专业应考者完成本科阶段学业的最后一个环节,它是应考者的 总结 性独立作业,目的在于总结学习专业的成果,培养综合运用所学知识解决实际 问题 的能力。从文体而言,它也是对某一专业领域的现实问题或 理论 问题进行 科学 研究 探索的具有一定意义的论说文。完成毕业论文的撰写可以分两个步骤,即选择课题和研究课题。 首先是选择课题。选题是论文撰写成败的关键。因为,选题是毕业论文撰写的第一步,它实际上就是确定“写什么”的问题,亦即确定科学研究的方向。如果“写什么”不明确,“怎么写”就无从谈起。 教育部自学考试办公室有关对毕业论文选题的途径和要求是“为鼓励理论与工作实践结合,应考者可结合本单位或本人从事的工作提出论文题目,报主考学校审查同意后确立。也可由主考学校公布论文题目,由应考者选择。毕业论文的总体要求应与普通全日制高等学校相一致,做到通过论文写作和答辩考核,检验应考者综合运用专业知识的能力”。但不管考生是自己任意选择课题,还是在主考院校公布的指定课题中选择课题,都要坚持选择有科学价值和现实意义的、切实可行的课题。选好课题是毕业论文成功的一半。 第一、要坚持选择有科学价值和现实意义的课题。科学研究的目的是为了更好地认识世界、改造世界,以推动社会的不断进步和发展 。因此,毕业论文的选题,必须紧密结合社会主义物质文明和精神文明建设的需要,以促进科学事业发展和解决现实存在问题作为出发点和落脚点。选题要符合科学研究的正确方向,要具有新颖性,有创新、有理论价值和现实的指导意义或推动作用,一项毫无意义的研究,即使花很大的精力,表达再完善,也将没有丝毫价值。具体地说,考生可从以下三个方面来选题。首先,要从现实的弊端中选题,学习了专业知识,不能仅停留在书本上和理论上,还要下一番功夫,理论联系实际,用已掌握的专业知识,去寻找和解决工作实践中急待解决的问题。其次,要从寻找科学研究的空白处和边缘领域中选题,科学研究。还有许多没有被开垦的处女地,还有许多缺陷和空白,这些都需要填补。应考者应有独特的眼光和超前的意识去思索,去发现,去研究。最后,要从寻找前人研究的不足处和错误处选题,在前人已提出来的研究课题中,许多虽已有初步的研究成果,但随着社会的不断发展,还有待于丰富、完整和发展,这种补充性或纠正性的研究课题,也是有科学价值和现实指导意义的。 第二、要根据自己的能力选择切实可行的课题。毕业论文的写作是一种创造性劳动,不但要有考生个人的见解和主张,同时还需要具备一定的客观条件。由于考生个人的主观、客观条件都是各不相同的,因此在选题时,还应结合自己的特长、兴趣及所具备的客观条件来选题。具体地说,考生可从以下三个方面来综合考虑。首先,要有充足的资料来源。“巧妇难为无米之炊”,在缺少资料的情况下,是很难写出高质量的论文的。选择一个具有丰富资料来源的课题,对课题深入研究与开展很有帮助。其次,要有浓厚的研究兴趣,选择自己感兴趣的课题,可以激发自己研究的热情,调动自己的主动性和积极性,能够以专心、细心、恒心和耐心的积极心态去完成。最后,要能结合发挥自己的业务专长,每个考生无论能力水平高低,工作岗位如何,都有自己的业务专长,选择那些能结合自己工作、发挥自己业务专长的课题,对顺利完成课题的研究大有益处。 致 谢 这次论文的完成,不止是我自己的努力,同时也有老师的指导,同学的帮助,以及那些无私奉献的前辈,正所谓你知道的越多的时候你才发现你知道的越少,通过这次论文,我想我成长了很多,不只是磨练了我的知识厚度,也使我更加确定了我今后的目标:为今后的计算机事业奋斗。在此我要感谢我的指导老师——***老师,感谢您的指导,才让我有了今天这篇论文,您不仅是我的论文导师,也是我人生的导师,谢谢您!我还要感谢我的同学,四年的相处,虽然我未必记得住每分每秒,但是我记得每一个有你们的精彩瞬间,我相信通过大学的历练,我们都已经长大,变成一个有担当,有能力的新时代青年,感谢你们的陪伴,感谢有你们,这篇论文也有你们的功劳,我想毕业不是我们的相处的结束,它是我们更好相处的开头,祝福你们!我也要感谢父母,这是他们给我的,所有的一切;感谢母校,尽管您不以我为荣,但我一直会以我是一名农大人为荣。 通过这次毕业设计,我学习了很多新知识,也对很多以前的东西有了更深的记忆与理解。漫漫求学路,过程很快乐。我要感谢信息与管理科学学院的老师,我从他们那里学到了许多珍贵的知识和做人处事的道理,以及科学严谨的学术态度,令我受益良多。同时还要感谢学院给了我一个可以认真学习,天天向上的学习环境和机会。 即将结束*大学习生活,我感谢****大学提供了一次在**大接受教育的机会,感谢院校老师的无私教导。感谢各位老师审阅我的论文。 - I - PAGE 3 - - 74 -
本文档为【俄罗斯方块游戏毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
不系舟红枫
从教近30年,经验丰富,教学水平较高
格式:doc
大小:447KB
软件:Word
页数:75
分类:工学
上传时间:2019-01-23
浏览量:29