
急求C语言程序设计—贪吃蛇的总结·
不知道怎么写。
。
。
。
C++ #include
贪吃蛇程序设计报告
报告,2种方法。
1.数组,2.链表。
送你7个大字:动身、去尾,加上头。
报告完毕。
请给楼上仁兄分。
代码很清晰。
有代码就能出报告的,写报告比写代码容易。
上课要认真听讲,别人代码要认真看,这样才能进步。
急求 设计贪吃蛇实验报告
学生课程设计(论文) 题 目: 贪吃蛇游戏程序设计指导 学生姓名: 学 号:200910801001 所在院(系): 计算机学院 专 业: 计算机科学与技术 班 级: 2009级一班 指导教师: 何春燕 职称: 讲 师 2010年06月 18日 目录 摘要…………………………………………………………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
*\\\/ 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 kbhit)*\\\/ if(snake.life==1)\\\/*如果蛇死就跳出循环*\\\/ break; key=bioskey(0);\\\/*接收按键*\\\/ if(key==ESC)\\\/*按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; }\\\/*endwhile(1)*\\\/ } (5)游戏结束函数GameOver( ) 游戏结束,清除屏幕,输出分数,显示游戏结束信息。 void GameOver(void)\\\/*游戏结束*\\\/ { cleardevice(); PrScore(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,guojian); getch(); } void PrScore(void)\\\/*输出成绩*\\\/ { char str[10]; setfillstyle(SOLID_FILL, WHITE); bar(50,15,200,35); setcolor(6); settextstyle(0,0,2); sprintf(str,score:%d,score); outtextxy(55,20,str); } void Close(void)\\\/*图形结束*\\\/ { getch(); closegraph(); } 3.4 总体流程图 } 3.5、程序代码编写及注释 #define N 200 #include kbhit)*\\\/ if(snake.life==1)\\\/*如果蛇死就跳出循环*\\\/ break; key=bioskey(0);\\\/*接收按键*\\\/ if(key==ESC)\\\/*按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; }\\\/*endwhile(1)*\\\/ } \\\/*游戏结束*\\\/ 3.6调试问题及解决方法 将已改好的程序复制到Turbo C时,由于软件的内容过多会出现右移,以致大部分的内容无法复制到Turbo C的界面上,最后导致软件无法运行。 解决方法:在改程序时应该把格式设置好,注意左对齐,同时一行的语句尽量的短,最好是一个语句占一行。 在将程序输入到TC中,对源程序进行编译、运行,发现程序存在的多处错误, 如下图所示: 可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。 3.7调试结果 1. 下图为程序调试编译结果: 2下图为程序调试运行结果(即贪吃蛇游戏界面) 4设计心得体会 经过短短两星期的计算机软件技术实习,让我对C程序有了一个更深的了解,以前总认为C语言很枯燥,认为那些我们所设计的程序没有什么用处,但现在通过设计贪吃蛇游戏这个程序使我懂得了如何将所学的知识运用于生活当中。 虽然在刚开始设计程序时不太明白如何去设计这程序,但当我看完《C语言课程设计案例精编》并用C语言做出这个贪吃蛇程序后,让我深深感受到C程序的神奇。 在设计这个程序中我主要学会了如何运用以下有关C语言的知识 1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增 加了程序的可读性。 2) 分析函数先从main()函数入手。 Main()函数是C源程序编译时的开始, 从main()函数开始读函数可将其他函数的功能理解得更透彻。 3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出 来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。 4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行 处理的函数,起功能我都有所了解。 同时我也获得了许多宝贵的经验: 1) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解, 知道所设计的题目和内容包含那些资源。 2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路 和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。 3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改 进”是程序设计的必经之路,发现错误也是取得成绩的一种。 4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而 应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。 5、参考文献 1.郭翠英,《C语言课程设计案例精编》,中国水利水电出版社,2004.3 2徐金梧,杨德斌等,《TURBO C实用大全》,机械工程出版社,1996.5 3李丽娟 《C语言程序设计教程》 人民邮电出版社 4林华聪 《C语言程序设计思想与实践》 冶金工业出版社 5张继温 《C语言程序设计教程》 高等教育出版社 6 潘云鹤,董金祥等著.计算机图形学——原理、方法及应用.北京:高等教育出版社,2003.12 7 孙家广等,计算机图形学(第三版),清华大学出版社,2004 8 陈元琰编著.计算机图形学实用技术.北京:科学出版社,2000 9和青芳著.计算机图形学原理及算法教程.北京:清华大学出版社 10 陆润民.C语言绘图教程.北京:清华大学出版社,1996 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } BufferedGraphics BufferedGraphicsA = null; BufferedGraphics BufferedGraphicsB = null; private void Form1_Load(object sender, EventArgs e) { BufferedGraphicsContext context = BufferedGraphicsManager.Current; BufferedGraphicsA = context.Allocate(this.CreateGraphics(), this.ClientRectangle); BufferedGraphicsB = context.Allocate(BufferedGraphicsA.Graphics, this.ClientRectangle); Pen pen = new Pen(Brushes.Blue,3); for(int i = 0;i < 400;i += 20) { BufferedGraphicsB.Graphics.DrawLine(pen, new Point(0, i), new Point(400, i)); BufferedGraphicsB.Graphics.DrawLine(pen, new Point(i, 0), new Point(i, 400)); } BufferedGraphicsB.Render(); food = this.GetPoint(random); BufferedGraphicsA.Graphics.FillRectangle(Brushes.Yellow, new Rectangle(food, new Size(20, 20))); BufferedGraphicsA.Render(); Point p = this.GetPoint(random); PointList.Add(p); } List 2.1程序功能介绍贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。 2.2程序整体设计说明一个游戏要有开始部分,运行部分,结束部分(实际上开始部分与运行部分是一体的)。 2.2.1设计思路这个程序的关键是表示蛇的图形以及蛇的移动。 用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。 移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。 如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。 食物的出现和消失也是画矩形块和覆盖矩形块2.2.2数据结构设计及用法说明 开始部分:游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面。 标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景,对游戏某些重 要变量的初始化。 运行部分:作为游戏的核心部分,这里包括的函数比较多,也就是模块比较多,首先让我模拟一下贪吃蛇的游戏模式:某个世界上突然出现一条蛇,它很短,它的运动神经异常,它没法停止自己的多动症在它的世界里就只有食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主人公,不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部分,它的身子变长啦。 当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗……它的身子是一直的加长,它不管自己过长身体的麻烦——转身不便,继续吃下去,现在它是直接把巴张大,好让食物有个绿色通道。 但是在某天的下午,它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去(不是毒死);又或者它往食物冲锋的时候,它失去控制,撞到了墙上。 第一轮循环:第一步,出现食物;第二步,蛇不停运动;第三步,检查蛇是撞到自己或墙壁;由第四步起游戏有两条支线(A、B):A :第四步,蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;B:第四步,蛇碰到自己或墙壁,终止游戏。 结束部分:游戏结束时,显示“GAME OVER”,已经是约定俗成的规律了,我的游戏也不例外。 除了游戏结束画面外,我还设置了一个游戏退出画面,“善始善终”嘛。 有了上述的大致划分,我把整个程序划分成(13+2)个模块(其实就是函数)2.2.3程序结构(流程图)图2.1流程图依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。 C语言中数据结构集中体现在数据类型上,因此在进行C语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以及它们的类型等。 这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分困难。 现在分析一下贪吃蛇游戏中的元素,继而得出与它们对应的在程序中的描述:蛇:基本描述:长度,颜色,位置。 对应数据与数据类型:长度—虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位—节数,以固定长度的每节描述;坐标--整型;颜色--整型; 位置--X,Y坐标。 增加的描述:蛇运动的方向,蛇的生命。 对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏结束部分相联系而设的。 方向只有四个方向:上下左右。 可以设置与之对应的四个整型数:3、4、2、1。 生命就只有两种情况:死或生,对应0或1。 食物: 基本描述:颜色,位置。 对应数据与数据类型:由于颜色设成固定的,所以不再讨论。 位置—X、Y坐标。 增加的描述:食物的存在。 对应数据与数据类型:这是为了避免重复出现食物而设置的,与绘制食物的函数有联系。 只有两个值:0或1(没有食物或有食物)其他的元素:墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际的墙壁就是四条直线组成的边框,由坐标描述。 还需要的变量:键盘键入的键值(作为全局变量,整型);经常要使用的循环变量;自定义的填充图案;说明文字的字符数组;游戏的记分;游戏的速度(蛇的速度)。 图2.2蛇的不停运动的关键算法的流程图2.2.4各模块的功能及程序说明主要模块的实现思路和算法的流程图说明:关键所在——蛇不停移动的Snakemove():蛇的不停移动,就是蛇的下一节取代前一节的位置,在计算机中就是蛇下一节的位置坐标变成前一节的位置坐标。 在上文中,已定义蛇的位置坐标为数组类型,一组坐标对应一节的位置,假设有i+1节,由0到i节,第i节的坐标取第i-1节的坐标,第i-1节的坐标取第i-2节的坐标……直到第1节取第0节的坐标。 而第0节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度。 蛇的这种坐标轮换需要循环语句使其继续下去。 2.2.5程序结果运行程序得到如下初始界面图:图2.3程序结果图用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示:图2.4程序结果图蛇没有碰到自己或墙壁,蛇继续前进:图2.5程序结果图游戏结束时,显示“GAME OVER”图2.6程序结果图2.3程序源代码及注释#define N 200#include kbhit)*\\\/ if(snake.life==1)\\\/*如果蛇死就跳出循环*\\\/ break; key=bioskey(0);\\\/*接收按键*\\\/ if(key==ESC)\\\/*按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; }\\\/*endwhile(1)*\\\/}\\\/*游戏结束*\\\/void GameOver(void){ cleardevice(); PrScore(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,GAME OVER); getch();}\\\/*输出成绩*\\\/void PrScore(void){ 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(void){ getch(); closegraph();}第3章 课程设计总结课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。 因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之 后,我们把前面所学过的知识又重新温故了一遍。 我做的是做贪吃蛇游戏。 简单的一个,但对我一个初学者来说却是一个很大的困难。 更加是第一次做课程设计,所以第一天下午在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。 可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。 特别是结构体,指针的部分,几乎是一片空白。 不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。 不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。 经过一波三折,终于开始正式编程。 编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。 而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。 所以认真仔细就是非常重要的了。 开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。 又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。 无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。 通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过 程中,我会更加注视实践操作,使自己便好地学好计算机。 在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。 朋友给段代码给你,这个代码不要任何控件,你只需要把以下代码复制到你的窗体代码中就行了,代码很简单,相信你能看懂 仅仅用了一个结构(ShenTi)一个数组(ZhuangTai(23, 23) As Long) 一个变量(GFangXiang)代码中自动生成了Timer1,Label1控件。 以及几个函数(Randomize,Circle,Line,Erase...) 相信这些对于你来说很简单,只是没想到用这些方法来实现而已,现在你开始看看效果吧 代码如下: '贪吃蛇代码(无控件、全代码) Private WithEvents Timer1 As Timer Private WithEvents Label1 As Label Dim GFangXiang As Boolean Dim HWB As Single Dim She() As ShenTi Dim X As Long, Y As Long Dim ZhuangTai(23, 23) As Long Private Type ShenTi F As Long X As Long Y As Long End Type '按键反应 ←↑↓→ Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim C As Long If KeyCode = 27 Then End 'ESC退出 If KeyCode = 32 Then If Timer1.Enabled = True Then '空格暂停 Timer1.Enabled = False Label1.Visible = True Else '空格开始 Timer1.Enabled = True Label1.Visible = False End If End If C = UBound(She) If GFangXiang = True Then Exit Sub Select Case KeyCode Case 37 '← If She(C).F = 2 Then Exit Sub She(C).F = 0 GFangXiang = True Case 38 '↑ If She(C).F = 3 Then Exit Sub She(C).F = 1 GFangXiang = True Case 39 '↑ If She(C).F = 0 Then Exit Sub She(C).F = 2 GFangXiang = True Case 40 '→ If She(C).F = 1 Then Exit Sub She(C).F = 3 GFangXiang = True End Select End Sub Private Sub Form_Load() Me.AutoRedraw = True Me.BackColor = &HC000& Me.FillColor = 255 Me.FillStyle = 0 Me.WindowState = 2 Set Timer1 = Controls.Add(VB.Timer, Timer1) Set Label1 = Controls.Add(VB.Label, Label1) Label1.AutoSize = True Label1.BackStyle = 0 Label1 = 暂停 Label1.ForeColor = RGB(255, 255, 0) Label1.FontSize = 50 ChuShiHua '初始化 End Sub Private Sub Form_Resize() On Error GoTo 1: With Me If .WindowState <> 1 Then .Cls .ScaleMode = 3 HWB = .ScaleHeight \\\/ .ScaleWidth .ScaleWidth = 24 .ScaleHeight = 24 Label1.Move (Me.ScaleWidth - Label1.Width) \\\/ 2, (Me.ScaleHeight - Label1.Height) \\\/ 2 HuaTu Me.Line (X, Y)-(X + 1, Y + 1), RGB(255, 255, 0), BF End If End With 1: End Sub Private Sub Timer1_Timer() Dim C As Long, I As Long On Error GoTo 2: QingChu '清图 C = UBound(She) Select Case She(C).F Case 0 If ZhuangTai(She(C).X - 1, She(C).Y) = 2 Then C = C + 1 ReDim Preserve She(C) She(C).F = She(C - 1).F She(C).X = She(C - 1).X - 1 She(C).Y = She(C - 1).Y ChanShengShiWu GoTo 1: ElseIf ZhuangTai(She(C).X - 1, She(C).Y) = 1 Then GoTo 2: End If Case 1 If ZhuangTai(She(C).X, She(C).Y - 1) = 2 Then C = C + 1 ReDim Preserve She(C) She(C).F = She(C - 1).F She(C).X = She(C - 1).X She(C).Y = She(C - 1).Y - 1 ChanShengShiWu GoTo 1: ElseIf ZhuangTai(She(C).X, She(C).Y - 1) = 1 Then GoTo 2: End If Case 2 If ZhuangTai(She(C).X + 1, She(C).Y) = 2 Then C = C + 1 ReDim Preserve She(C) She(C).F = She(C - 1).F She(C).X = She(C - 1).X + 1 She(C).Y = She(C - 1).Y ChanShengShiWu GoTo 1: ElseIf ZhuangTai(She(C).X + 1, She(C).Y) = 1 Then GoTo 2: End If Case 3 If ZhuangTai(She(C).X, She(C).Y + 1) = 2 Then C = C + 1 ReDim Preserve She(C) She(C).F = She(C - 1).F She(C).X = She(C - 1).X She(C).Y = She(C - 1).Y + 1 ChanShengShiWu GoTo 1: ElseIf ZhuangTai(She(C).X, She(C).Y + 1) = 1 Then GoTo 2: End If End Select ZhuangTai(She(0).X, She(0).Y) = 0 For I = 0 To C Select Case She(I).F Case 0 She(I).X = She(I).X - 1 Case 1 She(I).Y = She(I).Y - 1 Case 2 She(I).X = She(I).X + 1 Case 3 She(I).Y = She(I).Y + 1 End Select Next TiaoZheng 1: GFangXiang = False ZhuangTai(She(C).X, She(C).Y) = 1 HuaTu Exit Sub 2: '游戏结束 If MsgBox(得分: & UBound(She) - 2 & 分 & vbCrLf & 游戏结束,点“是”重新开始游戏,点“否”, vbYesNo, 贪吃蛇) = vbYes Then ChuShiHua Else End End If End Sub '初始化 Private Sub ChuShiHua() Me.Cls Timer1.Enabled = True Timer1.Interval = 50 Erase ZhuangTai ReDim She(2) She(0).F = 2 She(0).X = 9 She(0).Y = 11 ZhuangTai(9, 11) = 1 She(1).F = 2 She(1).X = 10 She(1).Y = 11 ZhuangTai(10, 11) = 1 She(2).F = 2 She(2).X = 11 She(2).Y = 11 ZhuangTai(11, 11) = 1 HuaTu '画图 ChanShengShiWu End Sub '清图 Private Sub QingChu() Dim I As Long For I = 0 To UBound(She) Me.Line (She(I).X, She(I).Y)-(She(I).X + 1, She(I).Y + 1), Me.BackColor, BF Next End Sub '画图 蛇 Private Sub HuaTu() Dim I As Long For I = 0 To UBound(She) Me.Circle (She(I).X + 0.5, She(I).Y + 0.5), 0.49, RGB(255, 255, 0), , , HWB Next End Sub Private Sub TiaoZheng() Dim I As Long For I = 0 To UBound(She) - 1 She(I).F = She(I + 1).F Next End Sub '随机产生食物 Private Sub ChanShengShiWu() Randomize Timer 1: X = Int(Rnd * 24) Y = Int(Rnd * 24) If ZhuangTai(X, Y) > 0 Then GoTo 1: ZhuangTai(X, Y) = 2 Me.Line (X, Y)-(X + 1, Y + 1), RGB(255, 255, 0), BF End Sub \\\/* 贪吃蛇程序 by champking *\\\/#define N 200#include kbhit)*\\\/ if(snake.life == 1)\\\/*如果蛇死就跳出循环*\\\/ break; key = bioskey(0);\\\/*接收按键*\\\/ if(key == ESC)\\\/*按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; }\\\/*endwhile(1)*\\\/}\\\/*游戏结束*\\\/void GameOver(void){ cleardevice(); PrScore(); setcolor(RED); settextstyle(0, 0, 4); outtextxy(200, 200, GAME OVER); getch();}\\\/*输出成绩*\\\/void PrScore(void){ 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(void){ getch(); closegraph();}用C#编写一个贪吃蛇的程序
C语言课程设计 贪吃蛇
VB 做一个非常简单的贪吃蛇程序
求,贪吃蛇 C语言代码 及其每一步的讲解



