贪吃蛇课程设计报告
qt贪吃蛇课程设计总结

qt贪吃蛇课程设计总结一、教学目标本课程的教学目标是使学生掌握Qt贪吃蛇游戏的基本开发方法和技巧,培养学生运用编程思维解决实际问题的能力。
具体目标如下:1.知识目标:–了解Qt框架的基本概念和原理;–掌握Qt Creator的使用方法和编程环境;–掌握贪吃蛇游戏的基本算法和数据结构;–熟悉Qt Widget编程和事件处理。
2.技能目标:–能够独立设置Qt开发环境,编写简单的Qt程序;–能够运用贪吃蛇游戏的基本算法,实现游戏的基本功能;–能够使用Qt Creator进行调试和优化程序;–能够根据需要,查阅相关资料和文档,解决问题。
3.情感态度价值观目标:–培养学生对编程和软件开发的兴趣和热情;–培养学生独立思考、自主学习和团队协作的能力;–培养学生勇于探索、创新和解决问题的精神;–培养学生具有良好的职业道德和责任意识。
二、教学内容根据课程目标,教学内容主要包括以下几个方面:1.Qt框架的基本概念和原理:Qt概述、Qt模块、信号与槽机制、Qt类体系结构等;2.Qt Creator的使用方法和编程环境:安装与配置、界面布局、编写代码、调试与运行等;3.贪吃蛇游戏的基本算法和数据结构:游戏流程、坐标系、蛇身模型、食物模型、方向控制、碰撞检测等;4.Qt Widget编程和事件处理:窗口布局、控件使用、事件处理机制、键盘和鼠标事件等。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解Qt框架的基本概念和原理,贪吃蛇游戏的基本算法和数据结构;2.案例分析法:分析典型代码和案例,引导学生理解和掌握相关知识;3.实验法:让学生动手编写和调试Qt程序,培养实际编程能力;4.小组讨论法:分组进行讨论和实践,培养团队协作和解决问题能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将提供以下教学资源:1.教材:《Qt编程入门》、《Qt Creator入门与实践》等;2.参考书:《Qt 5开发实战》、《Qt 5核心编程》等;3.多媒体资料:教学PPT、视频教程、在线文档等;4.实验设备:计算机、网络环境、编程软件等。
设计贪吃蛇实验报告

一、实验目的1. 掌握游戏设计的基本流程和原则。
2. 学会使用Unity游戏引擎进行游戏开发。
3. 提高编程能力和逻辑思维能力。
4. 实现贪吃蛇游戏,并优化游戏性能。
二、实验环境1. 操作系统:Windows 102. 开发工具:Unity 2019.4.10f13. 编程语言:C#三、实验内容1. 游戏设计2. 场景搭建3. 贪吃蛇游戏逻辑实现4. 游戏优化四、实验步骤1. 游戏设计(1)确定游戏主题:贪吃蛇(2)游戏规则:玩家控制蛇头,通过移动蛇头吃到食物,蛇的长度逐渐增加。
同时,蛇头不能撞到墙壁或自己的身体,否则游戏结束。
(3)游戏界面:包括游戏主界面、游戏场景、得分显示、游戏结束界面等。
2. 场景搭建(1)创建游戏场景:使用Unity编辑器创建一个3D场景,命名为“贪吃蛇场景”。
(2)添加墙壁:使用Unity编辑器中的Cube对象创建墙壁,设置墙壁的位置和大小,使墙壁围成一个封闭的空间。
(3)添加食物:使用Unity编辑器中的Sphere对象创建食物,设置食物的位置和大小。
3. 贪吃蛇游戏逻辑实现(1)创建蛇头和蛇身:使用Unity编辑器中的Cube对象创建蛇头和蛇身,设置蛇头和蛇身的位置和大小。
(2)控制蛇头移动:编写C#脚本,实现蛇头在四个方向上的移动。
(3)蛇头吃到食物:当蛇头与食物接触时,蛇的长度增加,食物消失。
(4)蛇头撞到墙壁或自身:当蛇头与墙壁或自身接触时,游戏结束。
4. 游戏优化(1)提高游戏帧率:通过优化代码和减少资源消耗,提高游戏帧率。
(2)优化蛇身移动:在蛇身移动时,减少不必要的计算,提高游戏性能。
五、实验结果与分析1. 实验结果通过以上步骤,成功实现了一个简单的贪吃蛇游戏。
游戏界面简洁,操作方便,符合游戏设计原则。
2. 实验分析(1)游戏设计方面:游戏规则简单易懂,游戏画面简洁,符合玩家需求。
(2)场景搭建方面:墙壁和食物的布局合理,有利于游戏进行。
(3)游戏逻辑实现方面:蛇头移动、吃到食物、撞墙等逻辑实现正确,游戏运行稳定。
贪吃蛇课程设计报告

本科课程设计贪吃蛇游戏设计摘要 (3)Abstract (3)一.详细设计 (4)1.属性解释 (4)2.初始化坐标: (4)3.调用线程 (4)4.具体功能实现: (5)4.1.移动功能的实现: (5)4.2.吃食物功能实现: (6)4.3.判断游戏是否结束的功能实现: (8)4.4.画图方法的实现 (9)4.5.监听键盘动作: (10)5.界面的设计: (11)5.1进入程序界面设计 (11)5.2第2个界面的设计: (12)5.3第3个界面设计: (12)6.把程序植入手机中 (13)二.字符设备驱动程序实现 (13)三.总结: (14)四.参考文献: (14)五.致谢 (15)摘要程序核心思想:运行程序首界面(进入游戏,退出游戏)进入游戏后选择难度(简单,普通,高难)根据不同的难度设置相应的属性。
进入游戏界面。
首先初始化蛇的坐标,食物的坐标,和障碍物的坐标。
然后获取当前屏幕的大小为将来的边界判断做准备。
然后创建并执行线程。
线程基本流程:判断是否是暂停阶段,如果没有暂停就执行:eatFood();move(direction); repaint();如果游戏结束了就重新游戏或者退出。
AbstractCore of the process: first running the program interface (into the game, withdraw from the game) into the game after the difficult choice of (simple, ordinary, highly difficult) depending on the difficulty of setting the corresponding attribute. Into the game interface. First initialize the coordinates of the snake, coordinates food, and the coordinates of obstructions. And access to the size of the current screen for the future of the border to prepare for judgement. And then create and execution threads. Thread the basic process: determine whether the stage is suspended, if not the moratorium on the implementation of: eatFood (); move (direction); repaint (); game to an end if the game or out on the re.一.详细设计1.属性解释用1个2维数组snake[200][2]存放蛇身坐标,第2维是0的时候代表横坐标,为1的时候为纵坐标。
c贪吃蛇课程设计

c 贪吃蛇课程设计一、课程目标知识目标:1. 让学生掌握贪吃蛇游戏的规则及基本编程逻辑。
2. 学习运用方向键控制蛇的移动,理解坐标概念。
3. 理解并运用循环、条件语句等编程结构。
技能目标:1. 培养学生运用编程解决问题的能力,提高逻辑思维。
2. 培养学生团队协作能力,通过小组讨论、合作完成游戏设计。
3. 提高学生的创新意识,鼓励对游戏进行改进和优化。
情感态度价值观目标:1. 培养学生积极的学习态度,对编程产生兴趣。
2. 培养学生的耐心和细心,面对编程过程中的困难能够持续调试和优化。
3. 培养学生遵守游戏规则,树立公平竞争的价值观。
课程性质:本课程为信息技术课程,结合实际操作,培养学生编程兴趣和能力。
学生特点:六年级学生,具备一定的信息技术基础,好奇心强,喜欢动手实践。
教学要求:注重理论与实践相结合,关注学生个体差异,鼓励学生积极参与,充分调动学生的主观能动性。
通过课程学习,使学生达到预定的学习成果,为后续学习打下坚实基础。
根据课程目标,教学内容主要包括以下几部分:1. 游戏规则介绍:讲解贪吃蛇游戏的基本规则,引导学生了解游戏设计的基本概念。
- 教材章节:第一章 游戏设计基础2. 编程逻辑:学习运用Python编程语言,掌握贪吃蛇游戏的编程逻辑。
- 教材章节:第二章 Python基础、第三章 控制结构3. 坐标系统与移动控制:理解坐标概念,运用方向键控制蛇的移动。
- 教材章节:第四章 图形与动画4. 游戏编程实践:分组进行贪吃蛇游戏的编程实践,巩固所学知识。
- 教材章节:第五章 游戏编程实例5. 游戏优化与拓展:鼓励学生对游戏进行优化和拓展,提高游戏的趣味性和挑战性。
- 教材章节:第六章 游戏优化与拓展教学进度安排:1. 第一周:介绍游戏规则,学习Python基础。
2. 第二周:学习控制结构,理解坐标系统。
3. 第三周:学习图形与动画,编写贪吃蛇移动控制代码。
4. 第四周:分组进行游戏编程实践,进行作品展示。
贪吃蛇课程设计python报告

贪吃蛇课程设计python报告一、教学目标本课程旨在通过学习Python编程语言实现一个贪吃蛇游戏,让学生掌握以下知识目标:1.理解Python的基本语法和数据类型。
2.学会使用Python进行流程控制和函数定义。
3.理解面向对象编程的基本概念。
4.能够独立编写简单的Python程序。
5.能够利用Python实现基本的贪吃蛇游戏。
情感态度价值观目标:1.培养学生对编程的兴趣,提高学生的信息素养。
2.培养学生解决问题的能力,提高学生的创新意识。
二、教学内容根据课程目标,我们选择Python作为编程语言,以贪吃蛇游戏为例,让学生在实践中掌握编程知识和技能。
具体的教学大纲如下:1.第一章:Python基础。
学习Python的基本语法、数据类型和变量。
2.第二章:流程控制。
学习条件语句、循环语句和函数定义。
3.第三章:面向对象编程。
学习类和对象的概念,以及如何定义和调用方法。
4.第四章:贪吃蛇游戏实现。
利用所学知识编写贪吃蛇游戏的代码,并进行调试和优化。
三、教学方法为了激发学生的学习兴趣和主动性,我们采用以下教学方法:1.讲授法:讲解Python的基本语法、数据类型和流程控制知识。
2.讨论法:学生讨论面向对象编程的概念和实现方法。
3.案例分析法:通过分析贪吃蛇游戏的代码,让学生理解编程思路。
4.实验法:让学生动手编写和调试贪吃蛇游戏,提高实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们准备以下教学资源:1.教材:《Python编程:从入门到实践》2.参考书:《Python核心编程》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络环境通过以上教学资源,学生可以更好地学习Python编程,并在实践中掌握贪吃蛇游戏的开发技能。
五、教学评估本课程的教学评估将采取多元化方式进行,以全面、客观、公正地评估学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和积极性。
贪吃蛇设计报告

目录1. 课题分析与方案选择 (3)2.总体设计 (4)2.1 理论分析 (5)2.1.1 算法设计分析 (5)2.1.2 数据结构分析 (8)2.1.1 流程框图 (9)2.2 代码编写 (9)2.2.1 工具类 (9)2.2.2 载入类 (11)2.2.3 蛇类 (12)2.2.4 食物类 (13)2.2.5 地图类 (14)2.2.6 运行类 (15)3. 游戏测试 (15)3.1 载入界面测试 (16)3.2 简单模式测试 (16)3.3 普通模式测试 (16)3.4 困难模式测试 (17)4. 问题分析与解决 (19)5. 总结 (20)摘要贪吃蛇游戏作为一款简单游戏,是手机游戏的代表,在十多年前风靡全世界,时至今日,贪吃蛇游戏任然活跃的网络的各个角落。
本次编写的便是一款经典的贪吃蛇游戏,任务确定为实现贪吃蛇游戏过程。
作为游戏的组成,通过必要的图形,文字界面来引导游戏者参与到这款游戏中,更有效的吸引游戏者的兴趣,为了拓展游戏者对高分和刺激的追求,设定各种难度的关卡也成为了游戏的必需品,贪吃蛇游戏的编写共有八个类,其中,主要包括游戏的控制与游戏界面的建立两个方面,对于前者,需要通过控制台来获取输入,而对于后者,要求应用合适的数据结构和算法,通过编写本次课程设计,对理论知识与实际作品之间的关系有了更加深刻影响。
关键字:贪吃蛇,界面,难度控制,数据结构1 课题析与方案选择1.1课题分析本次设计为贪吃蛇游戏,一款游戏就必须要与使用者拥有良好的交互界面,使用C++对DOS界面显示的处理需要细致和精细,在游戏过程中,那么就会有游戏载入界面,游戏进行界面,和结束界面,在输入方面,这款游戏采用上下左右四个按键进行控制,需要用到回车键进行选择确定,而游戏的目标,则是获取更高分数,挑战更高难度。
功能设计框图1.2方案选择1.1.1软件选择本次编写软件为CODEBLOCKS 16.011.1.2设计选择通过分析,将游戏分为输入,游戏运行,输出三大部分,对于每个部分需要用不同的类进行实现和联系,大概将其分为五个类,分别为工具类,载入类,蛇体类,游戏界面类和运行类。
程序设计实训报告 贪吃蛇游戏

课程设计报告学院、系:专业:学生姓名:学号:设计题目:贪吃蛇游戏起迄日期:指导教师:发任务书日期: 2012年6月10日附录:系统源代码#define N 200#include "graphics.h" #include "stdio.h"#include "stdlib.h" #include "dos.h"#define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800#define Esc 0x011bint i,key,cor,lev;int score = 0;int gamespeed;struct Food{int x, y;int yes;}food;struct Snake{int x[N], y[N];int node, direction, life; }snake;void Init();void Close();void DrawK();void GameOver();void GamePlay();void PrScore();void SelectLevel();void SelectColor();void main(){SelectLevel();SelectColor();Init();DrawK();GamePlay();Close();}void SelectLevel(){for(i=0;i<10;i++)printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");printf("*");printf(" Please select the level! *\n"); for(i=0;i<10;i++)printf(" ");printf("*");printf(" 1:Easy 2:Normal 3:Hard *\n"); for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");printf("Please selcet:");scanf("%d",&lev);switch(lev){case 1: gamespeed=50000;break; case 2: gamespeed=100000;break; case 3: gamespeed=150000;break; default: break;}}void SelectColor(){for(i=0;i<10;i++)printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");printf(" ");printf("*");printf(" Please select the color! *\n"); for(i=0;i<10;i++)printf(" ");printf("*");printf(" 1:Black 2:Green 3:Gray *\n"); for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");printf("Please selcet:");scanf("%d",&cor);switch(cor){case 1: cor=0;break;case 2: cor=10;break;case 3: cor=8;break;default: break;}}void Init(){int gd = DETECT, gm;initgraph(&gd, &gm, "c\\tc");cleardevice();}void DrawK(){setbkcolor(cor);setcolor(11);setlinestyle(SOLID_LINE, 0, THICK_WIDTH); for( i=50; i<=600; i+=10){rectangle(i, 40, i+10, 49);rectangle(i, 451, i+10, 460);}for( i=40; i<=450; i+=10){rectangle(50, i, 59, i+10);rectangle(601, i, 610, i+10);}}void GamePlay(){randomize();food.yes = 1;snake.life = 0;snake.direction = 1;snake.x[0] = 100; snake.y[0] = 100;snake.x[1] = 110; snake.y[1] = 100;snake.node = 2;PrScore();while(1){while(!kbhit()){if(food.yes==1){food.x = rand()%400+60;food.y = rand()%350+60;while(food.x%10!=0){food.x++;}while(food.y%10!=0){food.y++;}food.yes = 0;}if(food.yes==0){setcolor(GREEN);rectangle(food.x, food.y, food.x+10, food.y-10); }for( i=snake.node-1; i>0; i--){snake.x[i] = snake.x[i-1];snake.y[i] = snake.y[i-1];}switch(snake.direction){case 1: snake.x[0] += 10; break;case 2: snake.x[0] -= 10; break;case 3: snake.y[0] -= 10; break;case 4: snake.y[0] += 10; break;}for( i=3; i<snake.node; i++){if(snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0]){GameOver();snake.life = 1;break;}}if(snake.x[0]<55 || snake.x[0]>595 || snake.y[0]<55 || snake.y[0]>455){GameOver();snake.life = 1;}if(snake.life == 1) break;if(snake.x[0] == food.x && snake.y[0] == food.y){setcolor(0);rectangle(food.x, food.y, food.x+10, food.y-10);snake.x[snake.node] = -20;snake.y[snake.node] = -20;snake.node ++;food.yes = 1;score += 10;PrScore();}setcolor(4);for( i=0; i<snake.node; i++){rectangle(snake.x[i], snake.y[i], snake.x[i]+10, snake.y[i]-10);}delay(gamespeed);setcolor(0);rectangle(snake.x[snake.node-1], snake.y[snake.node-1],snake.x[snake.node-1]+10, snake.y[snake.node-1]-10);}if(snake.life==1) break;key = bioskey(0);if(key==Esc) break;else if(key==UP && snake.direction!=4)snake.direction = 3;else if(key==RIGHT && snake.direction!=2)snake.direction = 1;else if(key==LEFT && snake.direction!=1)snake.direction = 2;else if(key==DOWN && snake.direction!=3)snake.direction = 4;}}void GameOver(){cleardevice();PrScore();setcolor(RED);settextstyle(0, 0, 4);outtextxy(200, 200, "GAME OVER" ); getch();}void PrScore(){char str[10];setfillstyle(SOLID_FILL, YELLOW); bar(50, 15, 220, 35);setcolor(6);settextstyle(0, 0, 2);sprintf(str, "score:%d", score); outtextxy(55, 20, str);}void Close(){getch();closegraph();}。
小游戏贪吃蛇课程设计报告

Java小游戏贪吃蛇课程设计报告
使用键盘事件 监听器实现蛇 的移动和转向
Java小游戏贪吃蛇课程设计报告
通过碰撞检测类实现碰 撞和游戏结束条件
Java小游戏贪吃蛇课程设计报告
使用Java Timer类实现分数和时间的更新
在实现过程中,我们遇到了以下问题和解决方案
在本次课程设计中,我们选择了一个经典的小游戏——贪吃蛇。贪吃蛇是一款简单而有趣 的游戏,玩家需要控制一条蛇在屏幕上移动,吃掉食物并避免撞到墙壁或自己的尾巴 在开始设计之前,我们首先对游戏进行了需求分析。我们需要实现以下功能
Java小游戏贪吃蛇课程设计报告
创建游戏窗口和背景
Java小游戏贪吃蛇课程设计报告
Java小游戏贪吃蛇 课程设计报告
-
1 创建游戏窗口和背景 2 生成蛇和食物 3 实现蛇的移动和转向 4 检测碰撞和游戏结束条件 5 分数和时间的显示 6 使用随机数生成器生成蛇和食物的位置 7 使用键盘事件监听器实现蛇的移动和转向 8 通过碰撞检测类实现碰撞和游戏结束条件
Java小游戏贪吃蛇课程设计报告
分数和时间显示不准确:解决方案:使用Java Timer类定期更新分数和时间,确保它 们与游戏进度同步
Java小游戏贪吃蛇课程设计报告
r
xxxxx
最终,我们成功实现了贪吃蛇游戏的基 本功能,包括创建游戏窗口、生成蛇和 食物、实现蛇的移动和转向、检测碰撞 和游戏结束条件以及分数和时间的显示
同时,我们还优化了游戏的性能和 用户体验,使其更加流畅和有趣
生成蛇和食物
Java小游戏贪吃蛇课程设计报告
Java小游戏贪吃蛇课程设计报告
检测碰撞和游 戏结束条件
Java小游戏贪吃蛇课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成都信息工程学院课程设计报告贪吃蛇游戏设计姓名:学号:姓名:学号:姓名:学号:专业:信息安全班级:提交日期:贪吃蛇游戏设计摘要本设计主要围绕贪吃蛇游戏展开。
众所周知,贪吃蛇游戏一直以来是比较流行的。
传统的贪吃蛇游戏功能比较少,对蛇的控制仅限于向左转和向右转,而现在的贪吃蛇游戏已经发展的相当好;具有更多的功能和友好的界面。
例如,最近流行的免费的3D版的贪吃蛇游戏,界面相当的美观,有很强的立体效果,真实感更强,食物也为立体的且颜色绚丽。
在3D版贪吃蛇游戏里面,墙壁是真实的墙壁,障碍物比较多,如树、土丘等。
此外,其功能更多更强,可以选择难度。
不过,总而言之,3D版与传统的贪吃蛇游戏有共性,即娱乐性与益智性。
这些也是贪吃蛇游戏的优点。
因我们水平有限,只能设计简单的贪吃蛇游戏。
不过,在功能上,比传统贪吃蛇游戏更丰富。
操作起来,显得更为灵活。
界面的颜色随机变换,不易使眼睛疲劳。
关键词:贪吃蛇小游戏简单灵活颜色多变目录论文总页数:12页第一章课题介绍 (1)1.1课题背景 (1)1.2关于编译软件 (1)1.3关于兼容性 (1)第二章课题分析 (1)2.1贪吃蛇游戏功能分析 (1)2.2游戏界面分析 (2)2.3游戏思路分析 (2)第三章设计的具体实现 (2)3.1系统组成模块结构及功能 (2)3.1.1 程序结构 (3)3.1.2 程序流程及效果 (3)3.2类的定义以及变量、函数的声明 (5)3.2.1 类的定义、函数的声明 (5)3.2.2 变量声明 (6)3.3主要功能实现代码 (7)3.3.1 初始化食物及随机生成食物 (7)3.3.2 蛇的移动 (7)3.3.2 判断是否撞墙或身体 (8)第四章问题解决及运行截图 (9)结论 (12)参考文献 (12)第一章课题介绍1.1 课题背景贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将我们自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。
我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。
虽然我们的编程能力不是很强,但是我们有信心,在这次学习中将从实践和实际的项目中提高自己的编程能力。
因此我们选定了这个题目。
1.2 关于编译软件本程序采用Microsoft Visual C++6.0的英文版本进行编译。
VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。
1.3 关于兼容性本程序经过调试,可以在XP系统下编译运行,也可以在Win7下运行,界面稍有不同,但不影响运行结果。
第二章课题分析2.1 贪吃蛇游戏功能分析该游戏和我们小时候玩儿的贪吃蛇大同小异:一条蛇在密闭的围墙内,围墙内会因难度系数不同而增设一些一些障碍物,在围墙内会随机出现一个食物,通过键盘上的四个光标键控制它相上下左右四个方向移动,当蛇头撞到食物时,则表示失误被吃掉,这时蛇身增长一节,同时获得10分,接着随机生成食物,等待被蛇吃掉。
如果在移动过程中撞到墙壁、障碍物或者自己的身体,游戏便结束。
2.2 游戏界面分析程序运行时,如图所示,边框有菱形的围墙,围墙内有不同等级的障碍物设置,美元符号‘$’代表食物。
2.3游戏思路分析用"⊙"代表蛇的身体,每吃掉一个事物,就增加一个"⊙","¤"代表头,"∧"代表尾,蛇头和蛇尾不能对换。
游戏开始时,初始化为蛇自行向下移动,当玩家按了有效键之后,便向指定方向移动,一步移动一节身体。
当蛇头位置碰撞到食物与之重复时,就新添加一个节点作为头。
关于蛇的生存:撞墙或者撞到自己的身体就视为生存期满,游戏结束。
关于判断:先判断蛇头移动方向的下一个节点地图坐标是否为1,若为1则撞上表示游戏结束;如果蛇头与自己身体的任一个节点相撞,则游戏结束。
关于过关:每吃一个食物得10分,每一关是200 * 关数为过关。
每关地图不一样,速度也不一样,难度递增。
第三章设计的具体实现3.1 系统组成模块结构及功能3.1.1 程序结构根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、以及停止游戏,音乐音效的添加与控制,游戏帮助提示与英雄榜的显示等等。
具体的程序结构如下面的图所示。
3.1.2 程序流程及效果根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。
贪吃蛇的内容主要包括:游戏开始,随机出现食物;按下Space键可以实现暂停功能;设置游戏等级,关卡数;游戏说明;可播放背景音乐和音效等等。
3.2 类的定义以及变量、函数的声明根据程序的结构,将贪吃蛇需要实现的功能细化成为相应的函数。
3.2.1 类的定义、函数的声明1.FOOD类:class food{public:/* 参数说明:int *nodes_x:当前蛇结点的所有x坐标int *nodes_y:当前蛇结点的所有y坐标int nodecount:当前蛇结点个数const int map[han][lie]:*/void createfood(int *nodes_x, int *nodes_y,const int map[han][lie],int nodecount);//随机生成食物int get_food_x();int get_food_y();void set_food_x(int x);void set_food_y(int y);void set_food_life(int life);private:static int food_x;static int food_y;static int food_life;//food 生命};2.MAP类:class map{public:void get_map( const int in_map[][40],int out_map[][40]);//获取地图数组void print_map( int key);//打印出地图void selectmap(int mapkey[han][lie]);private:};3.SNACK类:class snake{public:/*作用:创建蛇的对象*/snake(){};void Initi();//初始化蛇void snake_run();//蛇开始移动void inter_snake_life();//判断蛇是不是活着void inter_eat_food(char der);void movesnaketowhere(int count,char towhere);//控制蛇的移动方向void selectsnake_xy();//将蛇结点的横纵坐标取出来放到数组中。
//snake_node add_node(int node_x,int node_y);//返回结点对象void set_size();//设置size 大小private:int size;};4.SNACKNODE类:class snakenode{public:/* 函数作用:创建snake_node,并存入结点在屏幕上的的显示坐标*/ /*参数:int x:结点的横坐标*//*参数:int y:结点的纵坐标*/snakenode(){};snakenode(int x,int y){node_x=x;node_y=y;snake_node_count++;}/* 函数作用:返回数据对象x的值*/int get_node_x();void set_node_x( int x);void set_node_y( int y);/* 函数作用:返回数据对象y的值*/int get_node_y();static void set_node_count(int nodecount);/* 函数作用:返回数据对象snake_node_count的值*/static int get_node_count();private:int node_x;//存储snake_node结点在屏幕上显示的横坐标int node_y;//存储snake_node结点在屏幕上显示的纵坐标static int snake_node_count; //记录结点的个数};3.2.2 变量声明int *nodes_x://当前蛇结点的所有x坐标int *nodes_y://当前蛇结点的所有y坐标int nodecount://当前蛇结点个数const int map[han][lie]:int node_x;//存储snake_node结点在屏幕上显示的横坐标int node_y;//存储snake_node结点在屏幕上显示的纵坐标static int snake_node_count;//记录结点的个数int food::food_life=0;//初始值,生存flagint food::food_x=0;//初始化食物横坐标int food::food_y=0;//初始化食物纵坐标3.3 主要功能实现代码3.3.1 初始化食物及随机生成食物void food::createfood(int *nodes_x, int *nodes_y,const int map[han][lie],int nodecount){int i = 0;int x_food;int y_food;int mapflag = 1; //是否是地图障碍物的标志if(food_life == 0){do{do{srand((int)time(0)); //随机数初始化x_food = rand()%25;//产生25以内随机数y_food = rand()%80;//产生80以内随机数i++;if(i == nodecount){i = i - nodecount;}for(int j = 0; j < nodecount; j++){if((x_food != nodes_x[j] || y_food != nodes_y[j]) && y_food%2 == 0){food_x = x_food;food_y = y_food;mapflag = map[x_food][y_food/2];}}//mapflag=map[x_food][y_food/2];}while(mapflag);food_life=1;}while(!food_life);}gotoxy(y_food,x_food);printf("$");}3.3.2 蛇的移动void snake:: movesnaketowhere(int count,char towhere)//移动蛇的方向{//const int turntoX[2]={1,0};//蛇在x轴上移动//const int turntoY[2]={0,1};snakenode a;a=nodes[count-1];int x=a.get_node_x();int y=a.get_node_y();gotoxy(nodes[0].get_node_y(),nodes[0].get_node_x());//printf(" ");for( int j=0;j<count;j++){gotoxy(nodes[j].get_node_y(),nodes[j].get_node_x());printf(" ");}for(int i=0;i<count-1;i++){nodes[i]=nodes[i+1];nodes[i].set_node_x(nodes[i+1].get_node_x());nodes[i].set_node_y(nodes[i+1].get_node_y());}switch(towhere){case 'w':case 'W':x=x-1;a.set_node_x(x);break;case 'a':case 'A':y=y-2;a.set_node_y(y);break;case 'd':case 'D':y=y+2;a.set_node_y(y);break;case 's':case 'S':x++;a.set_node_x(x);break;default:;break;}nodes[count-1]=a;}3.3.2 判断是否撞墙或身体void snake::inter_snake_life()//判断蛇是不是撞墙或者撞到了自己的身体{snakenode snakenode;int count=snakenode.get_node_count();int node_x=nodes[count-1].get_node_x();//取蛇头的横坐标int node_y=nodes[count-1].get_node_y();//取蛇头的纵坐标int a=maparray[node_x][node_y/2];//获得当前蛇头所在位置的地图坐标所对应的值:a=0或者1。