贪吃蛇实训报告
贪吃蛇实训报告模板

贪吃蛇实训报告模板1. 概述本报告旨在总结本次贪吃蛇实训的学习内容、实践经验,以及对于贪吃蛇游戏开发的理解和思考,为未来的实践学习提供参考和借鉴。
2. 前置知识在进行贪吃蛇实训前,推荐学生应具备以下基本前置知识:•编程语言基础:如C++、Java等。
•数据结构:如数组、链表、队列、栈等。
•基本算法:如排序算法、查找算法等。
3. 学习内容在本次贪吃蛇实训中,我们主要学习了以下内容:1.实现基本的贪吃蛇游戏逻辑:包括贪吃蛇的移动、食物的生成、得分统计等。
2.优化游戏体验:包括界面美化、音效、计时器等。
3.处理游戏特殊情况:如蛇碰到墙壁、自身等。
我们在实践中还遇到了以下问题:1.蛇的移动:如何保证蛇能够顺利移动并避免出现卡顿现象。
2.食物的生成:如何让食物能够随机生成且不与蛇重合。
3.得分统计:如何实现得分统计功能并将得分存入文件中。
通过解决这些问题,我们不仅实现了基本的贪吃蛇游戏功能,还使游戏更加智能化、丰富化。
4. 实践经验在进行贪吃蛇实践时,我们总结了以下实践经验:1.良好的代码规范:良好的代码规范对于功能实现和代码可读性的提高有着至关重要的意义。
比如,可以采用模块化编程,减少重复代码等。
2.良好的注释习惯:良好的注释习惯能够帮助程序员快速理解代码逻辑、减少代码修改和维护的困难度。
3.利用GitHub等代码分享平台:通过GitHub等代码分享平台,开源自己的代码,不仅可以让更多的人看到自己的成果,也可以接受更多人的意见和建议。
5. 游戏开发的思考在学习贪吃蛇游戏的过程中,我们不仅仅实现了一个简单的游戏,也思考了游戏开发的一些问题。
比如,游戏中的难度控制、人机交互等问题。
在游戏开发中,除了对于程序语言掌握以外,掌握这些问题也是非常必要的。
6. 总结本次贪吃蛇实训,我们不仅仅实现了贪吃蛇的基本功能,也通过实践和学习,提高了自己的编程水平和思考能力。
希望通过这次实践,能够启迪我们更好的编程思维和创造力,为未来的学习和工作打下坚实的基础。
关于贪吃蛇的实训报告

一、实训目的本次实训旨在通过C语言编程实现贪吃蛇游戏,巩固和加深对C语言程序设计的基本知识的理解和掌握,提高编程和程序调试的基本技能,并锻炼独立自主设计程序和编辑代码的能力。
通过设计贪吃蛇游戏,进一步理解和运用结构化程序设计的思想和方法,初步掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的基本方法,以及掌握书写程序设计开发文档的能力。
二、实训内容1. 游戏规则贪吃蛇游戏的基本规则如下:- 蛇在游戏区域中上下左右移动,通过键盘方向键控制。
- 每次蛇头撞到食物,蛇身增长一节,同时计10分。
- 若蛇头撞到墙壁或自身,游戏结束。
- 游戏区域大小、蛇的初始长度、食物的生成方式等参数可调整。
2. 程序设计(1)数据结构- Food结构体:用于存储食物的位置信息,包括横坐标x、纵坐标y和是否生成食物的标志yes。
```cstruct Food {int x;int y;int yes;};```- Snake结构体:用于存储蛇的位置信息、长度、移动方向和生命状态。
```cstruct Snake {int x[N];int y[N];int node;int direction;int life;};```(2)功能模块- 初始化函数:初始化游戏区域、蛇的位置、长度、方向和生命状态,以及食物的位置信息。
- 键盘输入处理函数:获取键盘输入,控制蛇的移动方向。
- 食物生成函数:根据设定规则生成食物。
- 蛇移动函数:根据蛇的移动方向和速度,更新蛇的位置信息。
- 游戏判断函数:判断蛇是否吃到食物、撞到墙壁或自身,以及游戏是否结束。
- 界面绘制函数:绘制游戏区域、蛇和食物。
三、程序实现以下为部分关键代码示例:```c// 初始化函数void init() {// 初始化游戏区域、蛇的位置、长度、方向和生命状态,以及食物的位置信息}// 键盘输入处理函数void keyInput() {// 获取键盘输入,控制蛇的移动方向}// 食物生成函数void generateFood() {// 根据设定规则生成食物}// 蛇移动函数void moveSnake() {// 根据蛇的移动方向和速度,更新蛇的位置信息}// 游戏判断函数void judgeGame() {// 判断蛇是否吃到食物、撞到墙壁或自身,以及游戏是否结束}// 界面绘制函数void draw() {// 绘制游戏区域、蛇和食物}```四、实训心得与体会1. 编程能力提升:通过本次实训,我对C语言编程和程序设计有了更深入的理解,编程能力得到了显著提升。
贪吃蛇实习报告范文

一、实习背景随着计算机技术的不断发展,编程技能已经成为现代社会人才必备的能力之一。
为了提高自己的编程能力,我在某科技公司进行了为期一个月的贪吃蛇游戏开发实习。
通过这次实习,我对贪吃蛇游戏有了更深入的了解,并掌握了相关编程技能。
二、实习目的1. 学习和掌握贪吃蛇游戏的基本原理和开发流程;2. 提高自己的编程能力,特别是C语言编程能力;3. 熟悉游戏开发工具和开发环境;4. 培养团队合作和沟通能力。
三、实习内容1. 游戏设计在实习过程中,我首先对贪吃蛇游戏进行了详细的设计。
游戏分为以下几部分:(1)游戏界面:包括标题界面、游戏界面、游戏结束界面等;(2)游戏规则:蛇在游戏区域内吃食物,蛇身会逐渐变长,蛇头撞到墙壁或自身则游戏结束;(3)游戏控制:通过键盘上的四个方向键控制蛇的移动方向;(4)游戏得分:蛇每吃一个食物,得分增加10分;(5)游戏难度:随着游戏进行,食物出现速度逐渐加快。
2. 程序开发在游戏设计完成后,我开始进行程序开发。
主要使用了C语言进行编程,以下是程序的主要模块:(1)初始化游戏环境:设置游戏窗口、绘制游戏界面等;(2)生成食物:在游戏区域内随机生成食物,确保食物不与蛇身重叠;(3)蛇的移动:根据用户输入的方向键,控制蛇的移动方向;(4)检测碰撞:检测蛇头是否撞到墙壁或自身,如果碰撞则游戏结束;(5)更新分数:根据蛇吃食物的次数,更新游戏分数;(6)游戏结束:当蛇头撞到墙壁或自身时,显示游戏结束界面。
3. 调试与优化在程序开发过程中,我遇到了一些问题,如蛇的移动速度不均匀、食物生成位置不合理等。
针对这些问题,我进行了以下优化:(1)调整蛇的移动速度,使其更加均匀;(2)优化食物生成算法,确保食物生成位置合理;(3)调整游戏界面,使界面更加美观。
四、实习成果通过一个月的实习,我成功完成了贪吃蛇游戏开发,并取得以下成果:1. 掌握了贪吃蛇游戏的基本原理和开发流程;2. 提高了C语言编程能力,特别是结构体、函数、数组等知识的应用;3. 熟悉了游戏开发工具和开发环境;4. 培养了团队合作和沟通能力。
贪吃蛇实习报告总结

贪吃蛇实习报告总结本次实习的主要内容是设计和实现一个贪吃蛇游戏。
通过本次实习,我深刻地理解了程序设计的基本原理和编程技巧,同时也锻炼了自己的解决问题和团队合作的能力。
在本次实习中,我负责实现了贪吃蛇游戏的主要功能,包括游戏逻辑、界面显示和键盘控制。
在实现过程中,我采用了面向对象的设计方法,将游戏中的各种元素抽象成类,并采用继承和多态等机制来实现游戏的各种功能。
同时,我还使用了计算机图形学的基本知识,实现了游戏界面的绘制和更新。
在团队合作方面,我和其他同学一起完成了游戏的设计和实现工作。
我们通过定期会议和在线讨论等方式,交流了彼此的想法和进展,并及时解决了遇到的问题。
在分工合作的过程中,我学会了如何合理地分配任务和协调工作,同时也提高了自己的沟通能力和团队合作精神。
在解决问题的过程中,我遇到了许多挑战。
例如,在实现游戏逻辑时,我需要处理许多复杂的状态和情况,如蛇的移动、食物的生成和得分等。
为了解决这些问题,我通过阅读相关文献和参考其他游戏的实现方式,不断摸索和尝试,最终找到了合适的解决方案。
通过本次实习,我不仅学会了如何设计和实现一个游戏,更重要的是学会了如何面对复杂的问题和挑战。
在实现游戏的过程中,我不断遇到各种困难和障碍,但是通过自己的努力和团队合作,我最终克服了这些困难,成功地完成了实习任务。
这种解决问题的能力和团队合作精神将对我未来的学习和工作产生积极的影响。
总结起来,本次实习是一次非常有意义的学习和实践过程。
通过设计和实现一个贪吃蛇游戏,我不仅掌握了程序设计的基本原理和编程技巧,还锻炼了自己的解决问题和团队合作的能力。
我相信这次实习经历将对我未来的学习和工作产生积极的影响。
贪吃蛇的实训报告

一、实训目的本次实训旨在通过设计并实现贪吃蛇游戏,巩固和加深学生对C语言程序设计的基本知识,提高学生的编程能力和实际动手操作能力。
通过实训,使学生能够熟练掌握C语言编程技巧,理解程序设计的基本思想和流程,同时培养学生的团队协作和问题解决能力。
二、实训内容1. 游戏规则贪吃蛇是一款经典的电脑游戏,玩家通过键盘控制蛇在游戏区域中移动,吃掉随机出现的食物。
蛇在吃掉食物后,长度会增加,得分增加。
如果蛇头撞到墙壁或自己的身体,游戏结束。
2. 游戏界面游戏界面由一个矩形区域组成,代表游戏区域。
蛇用一系列方块表示,食物用不同的颜色表示。
游戏开始时,蛇的长度为3,随机生成食物。
游戏过程中,蛇会根据玩家的输入移动。
3. 游戏逻辑(1)初始化:设置游戏区域大小、蛇的初始位置和方向、食物的初始位置等。
(2)游戏循环:不断检测玩家输入,更新蛇的位置,判断蛇是否吃到食物、撞到墙壁或自己的身体。
(3)游戏结束:当蛇撞到墙壁或自己的身体时,游戏结束。
4. 程序设计(1)数据结构:定义蛇、食物和游戏区域的数据结构。
(2)函数设计:设计初始化函数、移动函数、判断是否吃到食物函数、判断是否撞到墙壁或自己的身体函数等。
(3)主函数:调用相关函数,实现游戏循环。
三、实训过程1. 设计阶段首先,根据游戏规则和界面设计,确定游戏的数据结构和函数。
然后,编写程序代码,实现游戏的基本功能。
2. 编码阶段根据设计阶段的设计,使用C语言编写程序代码。
在编写过程中,注意代码的可读性和可维护性。
3. 调试阶段在编写代码过程中,不断调试程序,修复出现的错误。
调试过程中,注意观察程序运行情况,分析问题原因,并找出解决方案。
4. 测试阶段完成程序编写后,进行测试,确保程序能够正常运行。
测试过程中,注意观察游戏效果,确保游戏规则和界面设计符合预期。
四、实训成果通过本次实训,成功设计并实现了贪吃蛇游戏。
游戏运行稳定,功能完整,达到了实训目的。
五、实训心得1. 理解程序设计的基本思想和流程,掌握C语言编程技巧。
程序设计实训报告 贪吃蛇游戏

课程设计报告学院、系:专业:学生姓名:学号:设计题目:贪吃蛇游戏起迄日期:指导教师:发任务书日期: 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();}。
贪吃蛇实训报告个人总结

一、实训背景随着计算机科学技术的不断发展,C语言作为一种基础编程语言,在各个领域都有着广泛的应用。
为了巩固和加深对C语言课程的基本知识的理解和掌握,提高运用C语言解决实际问题的能力,我们进行了贪吃蛇实训。
二、实训目的1. 巩固和加深对C语言课程的基本知识的理解和掌握;2. 掌握C语言编程和程序调试的基本技能;3. 利用C语言进行基本的软件设计;4. 提高独立自主设计程序、编写代码的能力;5. 学会调试一个较长程序的基本方法;6. 掌握书写程序设计说明文档的能力。
三、实训内容1. 游戏规则:通过键盘方向键控制蛇的移动,吃掉随机出现的食物,蛇的长度会随之增加。
当蛇撞到墙壁或自己的身体时,游戏结束。
2. 程序设计:使用C语言进行贪吃蛇游戏的设计与实现,包括以下几个模块:(1)初始化模块:初始化游戏界面、蛇的位置、食物的位置等。
(2)绘图模块:使用图形库函数绘制蛇、食物、墙壁等元素。
(3)控制模块:根据键盘输入,控制蛇的移动方向。
(4)碰撞检测模块:判断蛇是否撞到墙壁或自己的身体。
(5)游戏逻辑模块:更新蛇的位置、食物的位置、蛇的长度等。
四、实训过程1. 理解游戏规则,明确程序设计思路。
2. 分析C语言基础知识,为编程做准备。
3. 编写程序代码,实现游戏的基本功能。
4. 调试程序,解决出现的问题。
5. 优化程序,提高程序运行效率。
6. 编写程序设计说明文档,总结实训经验。
五、实训心得与体会1. 通过本次实训,我对C语言的基本知识有了更深入的理解,掌握了C语言编程和程序调试的基本技能。
2. 在实训过程中,我学会了如何运用C语言进行基本的软件设计,提高了独立自主设计程序、编写代码的能力。
3. 通过调试程序,我学会了如何解决程序中出现的问题,提高了程序调试能力。
4. 编写程序设计说明文档,让我更加注重程序设计的规范性和可读性。
5. 本次实训让我认识到,编程不仅仅是编写代码,还需要考虑程序的结构、逻辑和可维护性。
贪吃蛇代码实训心得报告

一、实训背景随着计算机技术的飞速发展,编程已经成为一项非常重要的技能。
为了提高自己的编程能力,我参加了贪吃蛇代码实训。
通过这次实训,我对贪吃蛇游戏的编程有了更深入的了解,同时也锻炼了自己的编程思维和动手能力。
二、实训目标1. 熟悉C语言的基本语法和编程规范。
2. 掌握贪吃蛇游戏的设计与实现。
3. 培养团队协作和沟通能力。
三、实训内容1. 游戏设计:确定游戏规则、界面设计、功能模块划分等。
2. 代码编写:使用C语言实现游戏逻辑、图形界面、用户交互等。
3. 调试与优化:找出并修复代码中的错误,提高游戏性能。
四、实训过程1. 游戏设计在游戏设计阶段,我们首先明确了游戏规则:玩家通过键盘控制蛇的移动,吃掉食物使蛇变长,同时避免撞到墙壁和自己的身体。
游戏界面设计简洁,以蓝色背景和白色蛇身为主,食物用红色表示。
2. 代码编写在代码编写过程中,我们采用了模块化设计,将游戏分为以下几个模块:(1)主函数:初始化游戏环境,创建窗口,设置定时器等。
(2)蛇的移动:根据键盘输入控制蛇的移动方向,更新蛇的位置。
(3)食物的生成:随机生成食物位置,并在蛇吃到食物时更新食物位置。
(4)游戏结束判断:判断蛇是否撞到墙壁或自己的身体,如果发生碰撞则游戏结束。
(5)图形界面:使用图形库绘制蛇、食物和游戏界面。
3. 调试与优化在调试过程中,我们遇到了许多问题,如蛇的移动方向相反、食物生成位置不合理等。
通过查阅资料和团队合作,我们逐一解决了这些问题。
在优化方面,我们主要关注了以下两点:(1)提高游戏性能:通过减少不必要的计算和绘制,提高游戏运行速度。
(2)优化用户体验:调整游戏难度,使游戏更具挑战性。
五、实训收获1. 编程能力得到提升:通过编写贪吃蛇游戏,我熟悉了C语言的基本语法和编程规范,提高了自己的编程能力。
2. 编程思维得到锻炼:在游戏设计过程中,我学会了如何分析问题、设计算法和实现代码。
3. 团队协作能力得到提高:在实训过程中,我与团队成员共同解决问题,学会了沟通和协作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
郑州轻工业学院实训报告实训名称:贪吃蛇指导教师:姓名:学号:班级:提交日期:一.实验目的通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。
二.实验题目本次实训的题目为贪吃蛇。
通过使用C#编程语言来实现。
三.功能描述1.游戏的基本功能描述1)游戏场地是一片矩形区域的空地构成,蛇可以在这片定义的区域中自由移动。
2)定义一个Block来构成石块,蛇头,蛇身以及豆。
蛇由蛇头和蛇身组成。
3)当游戏开始之后,定义的区域中出现一颗豆和一条蛇,并且蛇不停地移动,蛇移动的方向与蛇头的方向一致。
4)通过space或者暂停键可以使游戏停止,蛇停止移动,分数停止积分。
5)当蛇移动时,玩家可以使用“↑”、“↓”、“←”和“→”四个方向键改变蛇的移动方向。
6)当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成一颗新的豆,蛇身增加一节。
7)当蛇头碰到石块时,蛇死亡,游戏结束。
8)当蛇头咬到蛇身时,则蛇死亡,游戏结束。
9)当蛇头碰到草坪四周时,蛇立即毙命,游戏结束。
10)游戏分为不同的级别,第一关游戏速度为200,当蛇吃五个豆子就可以过关,级别显示为2,速度增加100变为300.第二关为吃够10个豆子,速度增加50,以后以此类推。
11)游戏菜单中设有游戏帮助,玩家可以通过点击帮助了解游戏的玩法。
12)对于不是第一次玩的玩家可以改变蛇的运动速度,来增加难度。
在菜单中设有加速和减速两个键,单击可以改变速度。
13)游戏菜单中还有时间显示。
14)当游戏暂停时,可以通过“继续”键使游戏继续进行。
四.需求分析本游戏用户可以自己练习和娱乐。
本游戏需要满足以下几点要求:(1)利用方向键“↑、↓、←、→”来改变蛇的运行方向。
(2)空格键暂停游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
可行性分析:贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。
贪吃蛇的核心算法是如何实现蛇的移动和吃掉食物后如何变成新的蛇体。
没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。
而在吃到食物的时候,则只需把食物入队即可。
实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。
玩家可以根据自己的水平选择不同的级别进行游戏挑战。
贪吃蛇游戏中定义如下:1) 空白区域(Lawn):定义的区域是贪吃蛇游戏的场地。
豆、石头和蛇只能存在于空白区域的范围之内。
根据个人爱好还可以添加背景,改变区域的大小和颜色。
2) 蛇(Snake):在贪吃蛇游戏中,蛇由若干节组成,其中第一节是蛇头,在蛇头上面定义两个点,作为蛇的眼睛,其余是蛇身。
在游戏过程中,有且仅有一条蛇,并且蛇在不停地移动。
如果蛇吃了豆,则蛇生长一节。
如果蛇头碰到蛇身,蛇死亡,游戏结束。
如果蛇头离开所定义的区域,则蛇死亡游戏结束。
当蛇头撞到定义的石块上的时候游戏结束。
在定义蛇的时候可以改变蛇的初始长度,也可以改变蛇的颜色和大小。
3) 豆(Bean):在贪吃蛇游戏中,豆是蛇的食物。
在游戏过程中,有且仅有一颗豆。
如果蛇吃了豆,则重新生成一颗豆。
豆的出现是随机性的。
4)石块(stone):游戏中石块和豆是同时出现的,不同的是,豆是随机产生的,而石块是固定的,它的坐标在写代码的时候就定义好了,不能够改变。
它的大小和颜色也可以随便的改变。
5)菜单(MenuStrip):在贪吃蛇游戏中有游戏菜单,里面有开局、暂停、继续、加速、减速、帮助等菜单。
还有Label控件,显示速度、时间、日期和积分的。
五.设计说明Snake的每一节都有位置和大小等属性。
而Bean和stone也具有这两个属性。
抽象出这三者的共同特征,抽象出一般类Block,用于描述一个块。
Block派生出Bean和SnakeBlock两个类,其中SnakeBlock 类用于描述蛇的一节。
为了使游戏的运行更易于控制,定义Game类用于启动、暂停和继续游戏。
根据需求分析可知,Lawn仅包含大小和颜色两个属性。
为了减少类的数量,可将其大小和颜色等属性添加到Game类中。
综上所述,在贪吃蛇游戏中,有Block(块)、Bean(豆)、SankeBlock (节)、Snake(蛇)、Game(游戏)和MainForm(用户接口)六个类。
游戏逻辑构思图如下:吃到 豆游戏的设计如下: 游戏开始生成蛇生成豆生成石块蛇身增加统计分数 石块碰到石壁游戏结束 增加级别重新开局游戏图标及名称游戏菜单石块速度显示成绩显示级别显示日期及时间显示游戏的定义区域蛇身豆子六.源代码using System;using ;using ;using ;using ;using ;using WindowsFormsApplication1{public partial class MainForm : Form{int a = 200;rigion)break;}if (i ==bGetAPosition = true;}Display(g);f++;}new public void Display(Graphics g){SolidBrush brush = new SolidBrush(color);(brush, , , WIDTH, HEIGHT);Pen pen = new Pen;(pen, new Rectangle, , WIDTH - 1, HEIGHT - 1));}- blocks[ - 2].;int y = 2 * blocks[ - 1]. - blocks[ - 2].;(length, new SnakeBlock(x, y, color, false)); length++;}public void Move(){int x = 0;int y = 0;blocks[0].ChangeHeadToBody();switch (direction){case :x = blocks[0].;y = blocks[0]. - ;break;case :x = blocks[0].;y = blocks[0]. + ;break;case :x = blocks[0]. - ;y = blocks[0].;break;case :x = blocks[0]. + ;y = blocks[0].;break;}(0, new SnakeBlock(x, y, color, true));- 1);}public void Display(Graphics g){for (int i = 0; i < length; i++){blocks[i].Display(g, direction);}}public void Clear(Graphics g, Color backGroundColor){for (int i = 0; i < length; i++){blocks[i].Clear(g, backGroundColor);}}public void RemoveAfter(Graphics g, Color backGroundColor, int blockNum) {for (int i = length - 1; i > blockNum - 1; i--){blocks[i].Clear(g, backGroundColor);(i);length = blockNum;}}石块的定义定义如下,在空白区域中定义一个位置(坐标),使之固定不动,在蛇头撞到这个坐标的时候,参数传到判断蛇生死的函数,时蛇死亡,游戏结束。
public bool MeetStone(Point origion){if ((blocks[0]. == + 40) && blocks[0]. == + 40)) || (blocks[0]. == + 300) &&blocks[0]. == + 80)) || (blocks[0]. == + 150) && blocks[0]. == + 200))||(blocks[0]. == + 100) && blocks[0]. == + 400)))return true;elsereturn false;}当蛇碰到一个豆时,使豆成为蛇体的一部分,其颜色和大小跟蛇一样,蛇身增加。
public bool CanEatBean(Bean bean){if (blocks[0].Origion ==return true;elsereturn false;}public int CanEatSnake(){for (int i = 3; i < ; i++){if (blocks[0].Origion == blocks[i].Origion)return i;}return 0;}public void EatBean(Bean bean, Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight){(g, backGroundColor);Grow();(g, backGroundColor, lawnWidth, lawnHeight, this);eatebean = true;}public bool IsAlive(int lawnWidth, int lawnHeight)if (blocks[0]. < 0)return false;if (blocks[0]. < 0)return false;if (blocks[0]. + > lawnWidth)return false;if (blocks[0]. + > lawnHeight)return false;elsereturn true;}}Game控制游戏的运行,负责在游戏开始时生成Bean、Stone和Snake,以及负责在游戏运行中Snake的移动、Snake的生长、Bean的重生和石块的生产。
并随时检测Snake的生死状态。
Game类的参考代码如下:class Game{Point origion;public Snake snake;public Bean bean;public bool isSnakeAlive;public int lawnWidth;public int lawnHeight;public Game(int _lawnWidth, int _lawnHeight){Random random = new Random();int x = (0, _lawnWidth - 1) / * ;int y = (0, _lawnHeight - 1) / * ;Direction direction = (Direction)(1, 4);snake = new Snake, direction);bean = new Bean;isSnakeAlive = false;lawnWidth = _lawnWidth;lawnHeight = _lawnHeight;}public void Begin(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight)isSnakeAlive = true;(g, backGroundColor);(g, backGroundColor, lawnWidth, lawnHeight);(g, backGroundColor, lawnWidth, lawnHeight, snake);游戏中石块的填充,可以根据自己制定的坐标来固定石块,可以改变其颜色。