《c++课程设计报告-朱原雨润》由会员分享,可在线阅读,更多相关《c++课程设计报告-朱原雨润(42页珍藏版)》请在金锄头文库上搜索。
1、1南南 阳阳 理理 工工 学学 院院本科生课程设计报告本科生课程设计报告学院(系):学院(系): 软件学院软件学院 专专 业:业: 云计算云计算 学学 生:生: 朱原雨润朱原雨润 指导老师:指导老师: 陈可陈可 2完成日期完成日期 20162016 年年 0606 月月南阳理工学院本科生课程设计报告贪吃蛇小游戏的设计与实现贪吃蛇小游戏的设计与实现DesignDesign andand ImplementationImplementation ofof thethe GluttonousGluttonous SnakeSnake GameGame3总 计:课程设计报告 32 页表 格:6 个图
2、片:10 个南南 阳阳 理理 工工 学学 院院 本本 科科 生生 课课 程程 设设 计计 报报 告告贪吃蛇小游戏的设计与实现贪吃蛇小游戏的设计与实现DesignDesign andand ImplementationImplementation ofof thethe GluttonousGluttonous SnakeSnake GameGame4学 院(系): 软件学院 专 业: 云计算 学 生 姓 名: 朱原雨润 学 号: 1515925638 指导老师(职称): 陈可 评 阅 教 师: 陈可 完 成 日 期: 2016 年 06 月 16 日 南阳理工学院Nanyang Institu
3、te of Technology贪吃蛇小游戏的设计与实现贪吃蛇小游戏的设计与实现5云计算 朱原雨润 摘要摘要 (1)(1)贪吃蛇的基本玩法:即可以用上、下、左、右键控制游戏区蛇的运动方向,贪吃蛇的基本玩法:即可以用上、下、左、右键控制游戏区蛇的运动方向,使之向着食物方向运动,并吞吃食物使身体增长使之向着食物方向运动,并吞吃食物使身体增长(2)(2)调节蛇的运行速度:即用户可以调节蛇的运动速度来选择不同的难度调节蛇的运行速度:即用户可以调节蛇的运动速度来选择不同的难度(3)(3)选择关卡功能:即游戏分多个难度级别选择关卡功能:即游戏分多个难度级别(4)(4)背景着色变换功能:即用户可以选择一种自
4、己喜欢的颜色作为游戏区的背景背景着色变换功能:即用户可以选择一种自己喜欢的颜色作为游戏区的背景色,避免对一种颜色产生视觉疲劳色,避免对一种颜色产生视觉疲劳 关键词关键词 (1)(1)#include#include “goto_xy.h“/“goto_xy.h“/定位光标位置到指定坐标定位光标位置到指定坐标(2)(2)structstruct save_loc/save_loc/蛇身的双向链表蛇身的双向链表(3)(3)classclass Interface/Interface/选择背景颜色和难度菜单选择背景颜色和难度菜单(4)(4)classclass CoutUI/CoutUI/打印游戏界
5、面打印游戏界面(5)(5)classclass Snake/Snake/打印蛇身和增长蛇身打印蛇身和增长蛇身(6)(6)classclass Move/Move/蛇的移动蛇的移动(7)(7)classclass Score/Score/通过吃食物增加成绩通过吃食物增加成绩 通过增加成绩改变速度等级通过增加成绩改变速度等级(8)(8)classclass Judge/Judge/判断吃食物和死亡判断吃食物和死亡6目目 录录一、软件需求分析.61、可行性分析6(1)经济可行性.6(2)法律可行性.6(3)技术可行性.62、用户需求概述7二、软件分析与设计.101、整体设计(概要设计)102、详细设
6、计11三、编码实现.11四、测试.24结束语.30附录:C+语言课程设计任务书.31致谢.327一、软件需求分析一、软件需求分析1 1、可行性分析、可行性分析(1 1)经济可行性)经济可行性我的这个游戏使用的是 c+ 语言,并且使用的是免费的编译器,所以不需8要任何经济基础就可以进行开发,而且贪吃蛇游戏是一个适合各个年龄段的游戏,游戏简单,画面小清新。而且玩这个游戏绝对免费。(2 2)法律可行性)法律可行性本游戏使用的是 Code:Blocks 13.12 版本的编译器,免费的正版编译器,并且开发系统也是正版的 windows10 操作系统,从构思到编写运行,全部是自己一个人的劳动成果,法律上
7、不存在任何侵权行为。游戏标题右下角是我的班级姓名,绝对不会侵权。(3 3)技术可行性)技术可行性技术上使用 windows.h 这个头文件下的函数,例如游戏中的清屏system(“cls”) ;,游戏中的按键判断使用的是 conio.h 下面的 getch() ;通过 kbhit 函数来判断是否有按键按下,使用 COORD 结构体的变量来接收坐标,HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE ) ;通过这行的代码来获取输出句柄,通过 SetConsoleCursorPosition()函数来设置刚才通过 hOut 获取的输出光标到刚才 COORD
8、结构体的变量接收的坐标中,我把这一块的功能封装到 goto_xy( int x, int y )函数中,可以很方便的使用。还有蛇使用 move()通过交换坐标的方式移动,通过 increse_body()来增加蛇的长度,这样就可以做出贪吃蛇的游戏的核心功能。所以在技术上不存在任何难度。2 2、用户需求概述、用户需求概述表 1 数据结构(类 Interface)成员表类型定义内容描述构造函数Interface()空的构造函数成员变量int m, n, x, y ;箭头的范围纵坐标最小值;箭头的范围纵坐标最大值;9箭头初始位置的横坐标;箭头初始位置的纵坐标成员函数choose_color()选择背
9、景颜色成员函数choose_dif()选择难度成员函数chooes_goon()选择是否再来一局成员函数void move_arrow( int 游戏界面到窗口的左边距;游戏界面到窗口的上边距;游戏界面的宽;游戏界面的高成员函数int get_posX() ;int get_posY() ;int get_wide() ;int get_high() ;分别获取成员变量成员函数void HideCursor()隐藏光标成员函数void print_UI()打印界面10表 3 数据结构(类 Snake)成员表类型定义内容描述构造函数Snake()随机产生蛇头和食物的位置成员变量int X, Y,
10、 foodX, foodY, dir ,xxx, yyy ;save_loc *head, *head_, *p1, *p2 ;CoutUI a ;蛇头的横纵坐标;食物的横纵坐标;方向;蛇尾的横纵坐标;指向蛇头的指针;指向蛇尾的指针;两个临时指针;CoutUI 的一个对象 a成员函数save_loc *get_head_() ;void set_dir( int d ) ; int get_dir() ;void set_X( int x ) ; int get_X() ;void set_Y( int y ) ; int get_Y() ;void set_foodX( int fx ) ;
11、 int get_foodX() ;void set_foodY( int fy ) ; int get_foodY() ;void set_xxx() ; int get_xxx() ;分别赋值或获取成员变量11void set_yyy() ; int get_yyy() ;成员函数save_loc *create_body()形成三节蛇身成员函数void print_snake( save_loc *head )打印蛇身成员函数void increse_body( save_loc *head, bool save_loc *p ;Snake b ;从键盘输入的一个方向;一个临时指针;Sn
12、ake 的一个对象 b成员函数void move( save_loc *head, Snake int temp ;int difficult ;CoutUI d ;玩家的得分;玩家的等级;游戏的难度;CoutUI 的一个对象 d成员函数int get_score() ;void set_difficult( int dif ) ; int get_difficult() ;分别赋值或获取成员变量成员函数int score( bool int highest_score ;CoutUI c ;一个临时指针;历史最高分;CoutUI 的一个对象 c成员函数void game_over( Scor
13、e struct save_loc/蛇身的双向链表int locX ;/每个节点的横坐标int locY ;/每个节点的纵坐标save_loc *last ;/前驱结点save_loc *next ;/后驱结点;class Interfacepublic:Interface()int choose_color() ;int choose_dif() ;16int chooes_goon() ;void move_arrow( int private:int m, n, x, y ;int Interface:choose_color()system( “cls“ ) ;m = 6 ;n = 1
14、0 ;x = 40 ;y = 6 ;cout “ ;while( ch != 27 switch( ch )case w: case 72:if( y != m )goto_xy( x, y ) ; cout “ ;elsegoto_xy( x, y ) ; cout “ ;break ;case s: case 80:if(y != n )goto_xy( x, y ) ; cout “ ;elsegoto_xy( x, y ) ; cout “ ;break ;default: break;if( ch = 27 ) y = 0 ;class CoutUIpublic:CoutUI()in
15、t get_posX() ;int get_posY() ;int get_wide() ;int get_high() ;void HideCursor() ;/隐藏光标void print_UI() ;/打印界面private:static int posX, posY ;/左边距,上边距20static int wide, high ;/墙的宽。高;int CoutUI:posX = 6 ;int CoutUI:posY = 5 ;int CoutUI:wide = 61 ;int CoutUI:high = 22 ;int CoutUI:get_posX() return posX ; int CoutUI:get_posY() return posY ; int CoutUI:get_wide() return wide ; int CoutUI:get_high() re