游戏程序设计实验报告
程序设计实训实验报告(热门20篇)

程序设计实训实验报告(热门20篇)c语言是在国内外广泛使用的一种计算机语言。
其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。
其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的windows,unix,linux,mac,os/2,无一例外,哪一个不是c 语言写的?很多新型的语言如,c++,java,c,j,perl...都是衍生自c语言。
掌握了c语言,可以说你就掌握了很多门语言。
学习c程序这门课一年了,这是我们学的第一门专业课,在大学里c语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。
所以作为我这个计算机专业的学生来说当然十分重要,老师在第一节课说过,c语言是计算机的基础,大多数软件都需要用c语言来编写,通过一个年的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。
同时,我觉得c语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。
在学习一年c语言的过程中我也在慢慢探索怎样才能学好c语言,并总结了一点经验:要了解c语言就要从语法规为基础来学习起,首先要是要了解它的结构,比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。
在c语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以我们在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。
这些都是语法基础也是c语言的基础如果把它们都了解很好了,那么你编起程序来就很得心应手了。
比如说ifelse和switchcase这两种条件语句都是用来判断执行功能的,那我要什么时侯用if什么时侯用switch呢?如果你很好地了解它们的结构和作用的话那么就知道:若它的条件分支是多个而且条件的值是整数或是一个字符值时就会选switch而不会选if。
人机猜拳小游戏

Java程序设计基础实验报告班级:学号:姓名:实验题目:猜拳小游戏实验要求:用java编写一个人机对战的猜拳小游戏。
人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况。
有基本的UI界面。
实验内容:1、问题分析过程:实验针对java的具体应用,设计了猜拳小游戏。
根据游戏的规则,玩家可以和电脑进行对战。
成学的主要功能是使用标准的JDK进行编译和运行。
定义玩家自己选择性出拳,电脑随机出拳,赢的记10分,输的记0分,平局都记10分。
本程序设计了Game、Person、Player、等多个类,通过程序设定的规则来实现游戏。
(登陆界面)(初始界面)(游戏界面)2、主要实现代码:******************************oString();"="+playerName);etName());etName());造函数的特点:* A:函数名和类名相同* B:函数没有返回类型,即使void也不行* 2.构造函数什么时候被执行:在用户实例化对象时编译器自动调用的,用户无法调用* 3.构造函数完成什么样的工作:在用户实例化对象时完成实例变量(被static的变量)的初始化工作**/public LoginFrame() {etScreenSize();etResource[index]);return new ImageIcon(url);}/*** 根据选手索引的猜拳状态创建ImageIcon对象* @param player_index 选手索引* @param state 猜拳状态,0:初始状态,1:赢状态;2:平局;3:输状态* @return ImageIcon对象*/public ImageIcon getPlayerIcon(int player_index,int state){URL url=getClass().getResource[player_index][state]);return new ImageIcon(url);}public static String getResult(Player userPlayer,Player computerPlayer){count++;int differ=()();int state=0;etPlayerIcon, 0));jContentPane = new JPanel();(null);etMorraIcon (new Game().getMorraIcon ;(new Game().getPlayerIcon(img_index, + "");+ "");+ "");}/*** 恢复游戏初始状态*/private void setInit() {=false;=0;本类型的默认值: byte(1) 0 short(2) 0 int(4) 0 long(8) 0 * char(2) '\0' boolean(2) false* float(4) double* 2.引用类型的默认值:null** 基本类型和引用类型的区别:* 基本类型是在栈内存中存放数据值* 引用类型是在栈内存中存放引用地址,在堆内存中存放数据值的* @author hsj* @version**/public class Person {private String name;private int age;public Person(String name, int age) {super();= name;= age;}public Person() {例化Person类型的对象Person p1=new Person("张三",20);用display()函数完成成员变量的输出工作//段落注释的快捷键:ctrl+shift+o/*();();*/}}3、实验心得体会:通过这次java实验。
北邮计算机实习贪吃蛇游戏编写报告

北邮计算机实习贪吃蛇游戏编写报告计算机实习报告姓名:班级:学号:⼩班序号:指导⽼师:题⽬:贪吃蛇⼩游戏邮箱:贪吃蛇⼩游戏实验报告⼀.功能说明1.1总体功能说明该软件主要实现的是贪吃蛇的基本功能,达到简单的娱乐效果。
⾸先,完成的是贪吃蛇的移动和转弯,通过上下左右四个按键来实现蛇的移动和转弯。
其次还能实现蛇的吃⾷过程,游戏过程中会在游戏区域内随即产⽣⼀个⾷物,玩家通过控制蛇的移动使蛇的头部通过⾷物,则完成进⾷过程,⾷物消失,蛇的⾝体增长⼀截,并在此随机产⽣新的⾷物。
最后还可以完成蛇的死亡过程,即游戏结束的控制过程,如果蛇的头部碰到了墙壁或是⾃⼰的⾝体就会死亡,游戏结束。
此外还在游戏中加了⾳效,使得玩家玩游戏的过程中能够更加放松。
具有操作简单,易于控制,易学易玩的特点。
1.2⽤户界⾯本图为游戏的主界⾯,其中外⾯的⼀圈紫⾊“■”为边界,边界内连成⼀串的“■”是蛇的⾝体,“●”形状的图标即为⾷物。
该界⾯⽤于玩家与计算机的交流,使玩家能够通过图形界⾯来控制蛇的⾏为,进⽽实现游戏过程。
1.3使⽤⽅法分别使⽤“↑↓←→”四个按键来实现对蛇的上下左右的控制,随着蛇的长度的增加,虽然蛇移动的速度没有变化,但是由于空间⼤⼩有限,⽽蛇的长度在逐渐增加,故使得游戏的难度组建增⼤。
⼆.程序设计说明2.1 总体设计框架int main(){ 播放声⾳定义数组记录蛇的横纵坐标定义变量记录蛇的长度定义变量记录⾷物⽬标的位置定义变量判定游戏是否结束init(snakeLocation_x,snakeLocation_y,snakeLength); createObject(object_x,object_y); //初始化while(select为真){ switch(choice){case KEY_UP:do {将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_DOWN:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_RIGHT:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_LEFT:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_ESC :程序将会停⽌}}}2.2 关键算法描述算法1:voidinit(int* snakeLocation_x,int* snakeLocation_y,int&snakeLength)该算法的功能是⽤来进⾏初始化实现,实现游戏边界的设计、贪吃蛇⾝体的初始化、贪吃蛇⾝体长度的初始化、在⽆输⼊的情况下蛇的移动。
手机游戏设计实验报告(3篇)

第1篇一、实验背景与目的随着移动互联网的快速发展,手机游戏已成为人们休闲娱乐的重要方式。
为了提高我国手机游戏设计水平,培养具备创新能力和实践能力的设计人才,本实验旨在通过实际操作,掌握手机游戏设计的基本流程、方法和技巧,提升设计实践能力。
二、实验内容与步骤1. 游戏选题与策划(1)选题:选择一款具有市场潜力、符合用户需求的手机游戏题材。
(2)策划:制定游戏的基本框架、角色设定、故事情节、游戏规则等。
2. 游戏界面设计(1)界面风格:根据游戏题材和用户喜好,确定界面风格。
(2)界面布局:设计游戏主界面、菜单、角色信息、地图、战斗界面等。
(3)图标与素材:制作游戏图标、按钮、角色、道具等素材。
3. 游戏编程(1)游戏逻辑:编写游戏基本规则、角色行为、事件触发等代码。
(2)图形渲染:使用游戏引擎(如Unity、Cocos2d-x等)实现游戏界面渲染。
(3)音频处理:添加背景音乐、音效等,增强游戏氛围。
4. 游戏测试与优化(1)功能测试:测试游戏基本功能、角色行为、界面交互等。
(2)性能测试:测试游戏运行速度、内存占用等性能指标。
(3)优化调整:针对测试中发现的问题,进行代码优化、界面调整等。
三、实验过程与结果1. 游戏选题与策划我们选择了一款以武侠题材为背景的手机游戏。
游戏以一个少年成长为武林高手的历程为主线,融入了丰富的角色、技能、装备和任务系统。
2. 游戏界面设计(1)界面风格:采用古典武侠风格,以水墨画为主色调。
(2)界面布局:设计了主界面、菜单、角色信息、地图、战斗界面等,界面简洁明了,易于操作。
(3)图标与素材:制作了游戏图标、按钮、角色、道具等素材,风格与游戏整体风格一致。
3. 游戏编程(1)游戏逻辑:实现了游戏基本规则、角色行为、事件触发等代码。
(2)图形渲染:使用Unity游戏引擎实现了游戏界面渲染,画面流畅,效果良好。
(3)音频处理:添加了背景音乐、音效等,增强了游戏氛围。
4. 游戏测试与优化(1)功能测试:测试了游戏基本功能、角色行为、界面交互等,未发现重大问题。
directx实验三

浙江理工大学《DirectX游戏程序设计》实验三报告2013 ~2014 学年第2学期学院信息学院班级姓名学号任课教师(上课时间:第3周3-5节)数字媒体技术专业2014 年3 月《DirectX游戏程序设计》实验报告实验三DirectX彩色图形绘制实验二、实验代码:项目二A添加关于颜色的头文件:const D3DXCOLOR WHITE( D3DCOLOR_XRGB(255, 255, 255) );const D3DXCOLOR BLACK( D3DCOLOR_XRGB( 0, 0,0) );const D3DXCOLOR RED( D3DCOLOR_XRGB(255, 0,0) );const D3DXCOLOR GREEN( D3DCOLOR_XRGB( 0, 255,0) );const D3DXCOLOR BLUE( D3DCOLOR_XRGB( 0, 0,255) );const D3DXCOLOR YELLOW( D3DCOLOR_XRGB(255, 255,0) );const D3DXCOLOR CYAN( D3DCOLOR_XRGB( 0, 255,255) );const D3DXCOLOR MAGENTA( D3DCOLOR_XRGB(255, 0, 2)在colorvertex结构体中添加颜色参数D3DCOLOR cvertices[0] = ColorVertex(-1.0f, -1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[1] = ColorVertex(-1.0f, 1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[2] = ColorVertex( 1.0f, 1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[3] = ColorVertex( 1.0f, -1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[4] = ColorVertex(-1.0f, -1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[5] = ColorVertex(-1.0f, 1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[6] = ColorVertex( 1.0f, 1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[7] = ColorVertex( 1.0f, -1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));C要求struct Vertex //顶点数据结构的定义{Vertex(){} //顶点数据包括XYZ坐标值还有顶点颜色值Vertex(float x, float y, float z, D3DCOLOR c){_x = x; _y = y; _z = z; _color = c;}float _x, _y, _z;D3DCOLOR _color;static const DWORD FVF;};Device->CreateVertexBuffer( //建立顶点缓冲区8 * sizeof(Vertex),D3DUSAGE_WRITEONLY,Vertex::FVF,D3DPOOL_MANAGED,&VB,0);Device->CreateIndexBuffer( //建立索引缓冲区36 * sizeof(WORD),D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,D3DPOOL_MANAGED,&IB,0);Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);//将渲染模式改为差值模式四、实验结果测试、收获与体会:结果截图项目一1项目二收货与感受源代码修改太多次,把主要的几个放在代码区,实验结果放在效果图上。
贪吃蛇游戏程序设计实验报告

贪吃蛇游戏程序设计实验报告贪吃蛇游戏程序设计实验报告1、引言1.1 文档目的1.2 背景介绍1.3 项目概述2、需求分析2.1 用户需求2.2 功能需求2.3 非功能需求3、总体设计3.1 系统结构3.2 使用的开发工具和技术3.3 程序流程图3.4 数据结构设计4、模块设计4.1 游戏界面模块设计4.2 蛇的移动模块设计4.3 食物模块设计4.4 游戏结束判定模块设计5、开发过程5.1 编码规范5.2 界面设计与实现5.3 功能模块实现5.4 联合测试与整合调试6、测试结果与分析6.1 单元测试6.2 集成测试6.3 性能测试6.4 用户验收测试7、部署与运维7.1 系统环境要求7.2 安装步骤7.3 运行与维护8、问题与解决方案8.1 开发中的问题8.2 解决方案9、结论9.1 实验总结9.2 实现目标9.3 后续改进方向附件:- 源代码文件- 参考文献法律名词及注释:- 版权:保护原创作品的独有权利,防止他人未经授权使用、复制或传播。
- 许可证:授权他人在特定条件下使用受版权保护的作品。
- 商标:用于标识特定产品或服务来源的标识,可以是文字、图形、颜色或声音。
- 专利:通过创造一种新的发明而获得的对该发明的独有权利,防止他人在未获许可的情况下制造、使用或销售该发明。
- 使用条款:规定使用软件、服务或作品的条件和限制。
- 免责声明:声明作者或提供者对使用软件、服务或作品时可能产生的损害不承担责任。
全文结束 \。
大富翁程序设计及其实验报告

大富翁程序设计及其实验报告新手小白,希望各位大佬能多多提出建议,大家一同进步前言设计题目:C语言游戏———大富翁(简易版)一、采用的数据存储结构及所代表的含义Input:判断是否进行游戏num1,num2,a1,a2:累计掷出骰子数所对应棋盘上的位置fund=2000,fund2=2000:初始资金c:判断游戏是否终止b1 = b2=:掷出的总数i=1:判断A/B进行游戏二、设计思路第一步:判断游戏是否进行第二步:判断A/B玩家进行第三步:值骰子第四步:判断掷出的数所对应效果第五步:判断是否获得成就第六步:判断是否有玩家破产第七步:若有破产则终止程序反之返回第二步第八步:判断谁获胜并输出第九步:询问是否重新游戏三:设计中的难点及解决方案难点1:产生随机数解决:利用rand函数但其只在一定范围内可以看成随机的,所以在引入srand函数利用time(NULL)变化的种子使其随机性增加难点2:棋盘可变性解决:利用头文件宏定义变量可以改变棋盘大小四:程序代码play.c#include<stdio.h> #include<stdlib.h> #include<time.h> int num1,num2, a1,a2, fund=2000,fund2=2000,c, b1 = 0,b2=0,i=1; int play(int row , int col) { printf(玩家A与B的初始资金均2000元); do { printf(****************************); printf(********* 1.continue *****); printf(********* 0.end **********); printf(****************************); scanf(%d, &c);//是否继续游戏 if (c == 0) break;//判断游戏是否终止 if (i % 2 == 1)//判断玩家A/B进行 { printf(玩家A 的回合); srand((int)time(NULL));//用于设置rand()产生随机数时的种子,time(NULL)变化的种子 num1 = rand() % 6 + 1;//生成随机数 printf(掷出结果为%d, num1); b1 += num1; a1 = b1 % (((row+col))*2+4);//在地图上所走位置 i++; switch (a1)//判断其走的步数所对应效果 { case 6: printf(倒退三步); a1 -= 3; b1 -= 3; break; case 2: printf(银行利率增长); fund *= 2; printf(剩余资金为%d, fund); break; case 5: printf(科创获奖得500元); fund += 500; printf(剩余资金为%d, fund); break; case 7: printf(被电诈骗700元); fund -= 700; printf(剩余资金为%d, fund); break; case 9: printf(投资基金增长); fund *= 5; printf(剩余资金为%d, fund); break; case : printf(前进四步); a1 += 4; b1 += 4; case 12: printf(奖学金得1000元); fund += 1000; printf(剩余资金为%d, fund); break; case 11: printf(股票暴跌); fund /= 4; printf(剩余资金为%d, fund); break; case 15: printf(投资被骗); fund /= 2; printf(剩余资金为%d, fund); break; default: printf(剩余资金为%d, fund); break; } if (fund > &&fund<) printf(累计达成成就初出茅庐); else if (fund > &&fund< ) printf(累计达成成就初出茅庐小有成就); else if (fund > &&fund< ) printf(累计达成成就初出茅庐小有成就资金充裕); else if (fund > ) printf(累计达成成就初出茅庐小有成就资金充裕资金高手); //判断获得的成就 } else { printf(玩家B的回合); srand((int)time(NULL)); num2 = rand() % 6 + 1; printf(掷出结果为%d, num2); b2 += num2; a2 = b2 % (((row + col)) * 2 + 4); i++; switch (a2) { case 6: printf(倒退三步); a2 -= 3; b2 -= 3; break; case 2: printf(银行利率增长); fund2 *= 2; printf(剩余资金为%d, fund2); break; case 5: printf(科创获奖得500元); fund2 += 500; printf(剩余资金为%d, fund2); break; case 7: printf(被电诈骗700元); fund2 -= 700; printf(剩余资金为%d, fund2); break; case 9: printf(投资基金增长); fund2 *= 5; printf(剩余资金为%d, fund2); break; case : printf(前进四步); a2 += 4; b2 += 4; case 12: printf(奖学金得1000元); fund2 += 1000; printf(剩余资金为%d, fund2); break; case 11: printf(股票暴跌); fund2 /= 4; printf(剩余资金为%d, fund2); break; case 15: printf(投资被骗); fund2 /= 2; printf(剩余资金为%d, fund2); break; default: printf(剩余资金为%d, fund2); break; } if (fund2 > && fund2 < ) printf(累计达成成就初出茅庐); else if (fund2 > && fund2 < ) printf(累计达成成就初出茅庐小有成就); else if (fund2 > && fund2 < ) printf(累计达成成就初出茅庐小有成就资金充裕); else if (fund2 > ) printf(累计达成成就初出茅庐小有成就资金充裕资金高手资金高手); } } while (fund > 0&&fund2 > 0);//判断是否出现破产 if (fund2 > fund) { printf(恭喜B胜利); } else printf(恭喜A胜利); return 0;//判断A/B胜利 }main.c#include<stdio.h> #includegame.h int main() { int input; do { printf(****************************); printf(********* 1.play *********); printf(********* 0.exit *********); printf(****************************); printf(请选择:>);//请选择是否开始游戏 scanf(%d,&input); switch (input)//判断用户的选择 { case 1: play( ROW , COL); break; case 0: printf(退出游戏); break; default: printf(选择错误重新选择); break; } } while (input); }game.h#pragma once #define ROW 7 #define COL 4//确定棋盘大小 int play(int row, int col);//调用函数总结本次实验设计通过对循环结构,选择结构的运用,使我对这些结构有了更好的理解;并且通过不断研究,也了解到了随机数生成的方式以及头文件的利用,让我对程序设计有了新的理解,利用代码可以更加方便的进行一些工作,还可以获得乐趣,同样与同伴一起讨论研究,使代码的编写过程也不枯燥,一次很好的设计体验。
JAVA开放性实验报告贪吃蛇

JAVA开放性实验报告贪吃蛇实验目的:本实验旨在利用Java语言实现一个经典的贪吃蛇游戏,通过实践提升对面向对象程序设计的理解和应用能力,加深对Java语言的熟练程度,并提高解决问题的能力和编程实践经验。
实验内容:1.设计游戏界面:通过Java中的Swing库实现游戏窗口的设计,包括游戏区域、游戏开始按钮、得分显示等。
2.实现游戏逻辑:设计贪吃蛇的移动规则,食物的生成和吃掉判定,碰撞检测等游戏逻辑。
同时实现游戏的主循环,控制游戏的进行。
3.实现键盘控制:通过监听键盘事件,实现玩家控制贪吃蛇的移动方向。
4.设计游戏机制:设置游戏的难度等级,增加贪吃蛇的移动速度、食物生成间隔等参数,使游戏更具挑战性。
5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。
玩家可以选择重新开始游戏或退出。
实验步骤:1.设计游戏界面:创建一个JFrame窗口,在窗口中添加游戏画布,开始按钮和得分显示等组件。
2.实现游戏逻辑:设计Snake类和Food类,表示贪吃蛇和食物。
通过ArrayList存储贪吃蛇的身体节点,并实现移动、吃食物等方法。
3.实现键盘控制:通过实现KeyListener接口来监听键盘事件,根据按键控制贪吃蛇的移动方向。
4.设计游戏机制:设置贪吃蛇的移动速度、食物生成间隔等参数,根据难度级别逐步增加,使游戏更具挑战性。
5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。
提供重新开始游戏和退出游戏的选项。
实验结果:经过实验设计和编码实现,成功完成了Java贪吃蛇游戏的开发。
游戏界面美观,操作流畅,游戏逻辑完整,玩家能够通过控制贪吃蛇吃到食物并获得得分。
随着游戏的进行,贪吃蛇会不断变长,玩家需要避开障碍,控制蛇头移动,体验游戏的乐趣和挑战。
实验总结:通过本次实验,我深入学习了Java语言的面向对象编程思想和应用,掌握了Swing库的使用方法,加深了对Java语言的理解和应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中师范大学计算机科学系《游戏设计基础》实验报告姓名学号:指导老师:实验课题:贪吃蛇游戏的实现交报告日期:2012/5/24目录摘要 (6)1、设计要求 (7)2、所用仪器设备 (7)3、具体设计过程……………………………………..…….8.3.1、程序功能 (8)3.2设计思想 (8)3.3.设计的具体实现………………………………..…….8.3.4 总体流程图 (14)3.5、程序代码编写及注释 (15)3.6调试问题及解决方法 (21)3.7调试结果……………………………………………….22. 4设计心得体会……………………………………………25.5、参考文献 (26)摘要编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
作为一个完整的程序,尤其是一个完整的游戏,必须考虑人机交流与用户体验。
游戏的界面不能太丑,更不能连个简单的界面都没有。
游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。
游戏的美观是一方面,游戏的内在素质是另一方面。
一个游戏的优劣,最终由玩家决定。
在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
关键词贪吃蛇流程图c语言源程序turbo C贪吃蛇游戏程序设计1、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).深入分析各个小问题,列出大纲,编写各部分程序模块;(3).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(4).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(5).完成课程设计报告,并进行答辩C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。
作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。
制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。
通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。
2、所用仪器设备1、能正常工作的计算机一台;2、WindowsXP;3、TC程序;4、Microsoft Word2003;3、具体设计过程3.1、程序功能贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体叉蛇头撞倒自己身体游戏结束。
3.2 设计思想程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。
移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现与消失也是画矩形块和覆盖矩形块。
为了便于理解,定义两个结构体:食物与蛇。
3.3.设计的具体实现(1)函数定义函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#include <graphics.h>/*图形头文件*/#include <stdlib.h>/*包含rand等函数*/#include <dos.h>/*包含bios函数*/#define LEFT 0x4b00/*光标左键值*/#define RIGHT 0x4d00/*光标右键值*/#define DOWN 0x5000/*光标下键值*/#define UP 0x4800/*光标上键值*/#define ESC 0x011b/*ESC的ASCII码*/int i,key;/*图形坐标变量及按键变量*/int score=0;/*得分*/int gamespeed=10000;/*游戏速度自己调整*/struct Food{int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/struct Snake{int x[];/*蛇的横坐标*/int y[];/*蛇的纵坐标*/int node;/*蛇的节数*/int direction;/*蛇移动方向*/int life;/* 蛇的生命,0活着,1死亡*/}snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*画界面函数*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/void main(void)/*主函数*/(2)主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main(void)/*主函数*/{Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}void Init(void)/*图形驱动*/{int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc"); /*第一个参数表示图形适配器的类型,第二个为在该类型下图形的显示模式,第三个参数指定驱动程序所在目录。
*/ cleardevice();}(3)画界面函数DrawK( )主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。
void DrawK(void)/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/{setbkcolor(0);/*设置当前背景颜色*/setcolor(YELLOW);/*设置当前画线颜色*/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);/*右边*/}}(4)游戏具体过程函数GamePlay()这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。
void GamePlay(void)/*玩游戏具体过程*/{randomize();/*随机数发生器*/food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/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)/*可以重复玩游戏,压ESC键结束*/{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) /*定义1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/{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; /*-20表示尾巴长一节*//*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/food.yes=1;/*画面上需要出现新的食物*/score+=10;}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);} /*endwhile(!kbhit)*/if(snake.life==1)/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==ESC)/*按ESC键退出*/break;elseif(key==UP&&snake.direction!=4)/*判断是否往相反的方向移动*/snake.direction=3;elseif(key==RIGHT&&snake.direction!=2)snake.direction=1;elseif(key==LEFT&&snake.direction!=1)snake.direction=2;elseif(key==DOWN&&snake.direction!=3)snake.direction=4;}/*endwhile(1)*/}(5)游戏结束函数GameOver()游戏结束,清除屏幕,输出分数,显示游戏结束信息。