贪吃蛇游戏程序设计
课程设计贪吃蛇小游戏程序设计

信息技术学院本科课程设计报告课程设计题目学生姓名:李雪学院:信息技术学院专业:信息治理与信息系统班级:B1102学号:0911110201指导教师:王浩涌完成日期:辽东学院Eastern Liaoning University一、题目(问题)描述贪吃蛇小游戏程序设计图1 贪吃蛇系统界面二、功能分析贪吃蛇游戏是一个经典小游戏,一条蛇在封锁围墙里,围墙里随机显现一个食物,通过按键盘四个光标键操纵蛇向上下左右四个方向移动,蛇头撞倒食物,那么食物被吃掉,蛇躯体长一节,同时记10分,接着又显现食物,等待蛇来吃,若是蛇在移动中撞到墙或躯体交叉蛇头撞倒自己躯体游戏终止。
三、系统设计1.程序整体结构图2贪吃蛇程序系统的构图2.界面设计如图,通过W、S、A、D、space键进行操作3.输入方式设计A 用W、S、A、D、键操纵蛇的上下左右移动,space键停止,esc键终止。
B 游戏目标:操纵屏幕上那条可爱的小蛇,在方框中不断吃豆豆,而每吃一个豆豆,蛇的躯体都变的更长一些,即增加一颗星星。
游戏的难度也会随之加大。
C 游戏终止:终止条件1——蛇头撞到墙上;终止条件2——蛇身形成一个圈,也确实是蛇头碰着自身的任何一处4.重要数据的数据结构设计5.函数设计6.函数挪用图7. 实体属性图四、关键技术、难点及其解决方式五、测试方式六、总结附录1程序源代码#include <windows.h>#include <stdlib.h>#include <time.h>#include <stdio.h>#include <string.h>#include <conio.h>#define N 21int apple[3];char score[3];char tail[3];void gotoxy(int x, int y) //输出坐标{COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }void color(int b) //颜色函数{HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;SetConsoleTextAttribute(hConsole,b) ;int Block(char head[2]) //判定出界{if ((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N))return 1;return 0;}int Eat(char snake[2]) //吃了苹果{if ((snake[0] == apple[0]) && (snake[1] == apple[1])){apple[0] = apple[1] = apple[2] = 0;gotoxy(N+44,10);color(13);printf("%d",score[0]*10);color(11);return 1;}return 0;}void Draw(char **snake, int len) //蛇移动{if (apple[2]) {gotoxy(apple[1] * 2, apple[0]);color(12);printf("●");color(11);}gotoxy(tail[1] * 2, tail[0]);if (tail[2]){ color(14);printf("★");color(11);}elseprintf("■");gotoxy(snake[0][1] * 2, snake[0][0]);color(14);printf("★");color(11);putchar('\n');char** Move(char **snake, char dirx, int *len) //操纵方向{int i, full = Eat(snake[0]);memcpy(tail, snake[(*len)-1], 2);for (i = (*len) - 1; i > 0; --i)memcpy(snake[i], snake[i-1], 2);switch (dirx){case 'w': case 'W': --snake[0][0]; break;case 's': case 'S': ++snake[0][0]; break;case 'a': case 'A': --snake[0][1]; break;case 'd': case 'D': ++snake[0][1]; break;default: ;}if (full){snake = (char **)realloc(snake, sizeof(char *) * ((*len) + 1));snake[(*len)] = (char *)malloc(sizeof(char) * 2);memcpy(snake[(*len)], tail, 2);++(*len);++score[0];if(score[3] < 16)++score[3];tail[2] = 1;}elsetail[2] = 0;return snake;}void init(char plate[N+2][N+2], char ***snake_x, int *len) //初始化{int i, j;char **snake = NULL;*len = 3;score[0] = score[3] =3;snake = (char **)realloc(snake, sizeof(char *) * (*len));for (i = 0; i < *len; ++i)snake[i] = (char *)malloc(sizeof(char) * 2);for (i = 0; i < 3; ++i){snake[i][0] = N/2 + 1;snake[i][1] = N/2 + 1 + i;}for (i = 1; i <= N; ++i)for (j = 1; j <= N; ++j)plate[i][j] = 1;apple[0] = rand()%N + 1; apple[1] = rand()%N + 1;apple[2] = 1;for (i = 0; i < N + 2; ++i){gotoxy(0, i);for (j = 0; j < N + 2; ++j){switch (plate[i][j]){case 0:color(12);printf("□");color(11); continue;case 1: printf("■"); continue;default: ;}}putchar('\n');}for (i = 0; i < (*len); ++i){gotoxy(snake[i][1] * 2, snake[i][0]);printf("★");}putchar('\n');*snake_x = snake;}void Manual(){gotoxy(N+30,2);color(10);printf("按W S A D 移动方向");gotoxy(N+30,4);printf("按space 键暂停");gotoxy(N+30,8);printf("历史最高分为: ");color(12);gotoxy(N+44,8);printf("%d",score[1]*10);color(11);gotoxy(N+30,12);printf("你此刻得分为: 0");}int File_in() //取记录的分数{FILE *fp;if((fp = fopen("C:\\tcs.txt","a+")) == NULL){gotoxy(N+18, N+2);printf("文件不能打开\n");exit(0);}if((score[1] = fgetc(fp)) != EOF);elsescore[1] = 0;return 0;}int File_out() //存数据{FILE *fp;if(score[1] > score[0]){gotoxy(10,10);color(12);puts("闯关失败加油耶");gotoxy(0,N+2);return 0;}if((fp = fopen("C:\\tcs.txt","w+")) == NULL){printf("文件不能打开\n");exit(0);}if(fputc(--score[0],fp)==EOF)printf("输出失败\n");gotoxy(10,10);puts("恭喜您打破记录");gotoxy(0,N+2);return 0;}void Free(char **snake, int len) //释放空间{int i;for (i = 0; i < len; ++i)free(snake[i]);free(snake);}int main(void){int len;char ch = 'g';char a[N+2][N+2] = {{0}};char **snake;srand((unsigned)time(NULL));color(11);File_in();init(a, &snake, &len);Manual();while (ch != 0x1B) // 按ESC 终止{Draw(snake, len);if (!apple[2]) {apple[0] = rand()%N + 1;apple[1] = rand()%N + 1;apple[2] = 1;}Sleep(200-score[3]*10);setbuf(stdin, NULL);if (kbhit()){gotoxy(0, N+2);ch = getche();}snake = Move(snake, ch, &len);if (Block(snake[0])==1){gotoxy(N+2, N+2);puts("你输了");File_out();Free(snake, len);getche();exit(0);}}Free(snake, len);exit(0);}。
贪吃蛇游戏程序设计实验报告

贪吃蛇游戏程序设计实验报告贪吃蛇游戏程序设计实验报告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 后续改进方向附件:- 源代码文件- 参考文献法律名词及注释:- 版权:保护原创作品的独有权利,防止他人未经授权使用、复制或传播。
- 许可证:授权他人在特定条件下使用受版权保护的作品。
- 商标:用于标识特定产品或服务来源的标识,可以是文字、图形、颜色或声音。
- 专利:通过创造一种新的发明而获得的对该发明的独有权利,防止他人在未获许可的情况下制造、使用或销售该发明。
- 使用条款:规定使用软件、服务或作品的条件和限制。
- 免责声明:声明作者或提供者对使用软件、服务或作品时可能产生的损害不承担责任。
全文结束 \。
贪吃蛇程序设计

贪吃蛇程序设计贪吃蛇是一款经典的电子游戏,其设计简单却极具挑战性,深受各个年龄段玩家的喜爱。
下面将详细介绍贪吃蛇程序的设计过程,包括基本规则、程序结构、实现方法以及可能的扩展功能。
基本规则贪吃蛇游戏的基本规则如下:1. 游戏界面是一个矩形网格,蛇在网格中移动。
2. 蛇由多个方块组成,初始时通常只有几个方块。
3. 玩家通过键盘控制蛇头的移动方向。
4. 蛇在吃到食物后,身体长度会增加一节。
5. 如果蛇头撞到自己的身体或屏幕边缘,游戏结束。
程序结构贪吃蛇程序主要包括以下几个部分:1. 游戏界面:显示蛇、食物和网格。
2. 蛇的移动逻辑:控制蛇的移动方向和速度。
3. 食物生成逻辑:随机在界面上生成食物。
4. 碰撞检测:检测蛇是否吃到食物或撞到自己及屏幕边缘。
5. 分数和生命值:记录玩家的得分和剩余生命。
实现方法1. 初始化- 设置游戏界面的大小。
- 初始化蛇的位置和长度。
- 随机生成食物的位置。
2. 游戏循环- 监听键盘输入,更新蛇头的移动方向。
- 根据移动方向更新蛇的位置。
- 检查蛇是否吃到食物,如果是,则增加蛇的长度和分数,并生成新的食物。
- 检查蛇是否撞到自己的身体或屏幕边缘,如果是,则结束游戏。
- 刷新游戏界面,显示当前的蛇、食物和分数。
3. 绘制界面- 使用图形库或API绘制网格、蛇和食物。
4. 处理用户输入- 监听键盘事件,根据用户的输入改变蛇的移动方向。
5. 碰撞检测- 检查蛇头是否与食物重叠,如果是,则触发吃食物的逻辑。
- 检查蛇头是否与蛇身其他部分重叠,如果是,则游戏结束。
- 检查蛇头是否到达屏幕边缘,如果是,则游戏结束。
可能的扩展功能1. 多种难度级别:根据游戏难度调整蛇的移动速度或食物的生成频率。
2. 特殊食物:例如,某些食物可以让蛇短暂加速或获得保护,避免碰撞。
3. 自定义皮肤:允许玩家选择或设计蛇和食物的外观。
4. 多人模式:支持多个玩家在同一设备或网络上进行游戏。
5. 成就系统:为玩家设置各种成就目标,增加游戏的可玩性。
设计贪吃蛇实验报告

一、实验目的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)游戏逻辑实现方面:蛇头移动、吃到食物、撞墙等逻辑实现正确,游戏运行稳定。
c贪吃蛇游戏课程设计

c 贪吃蛇游戏课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言的基本语法和编程逻辑。
2. 学生能运用C语言编写简单的贪吃蛇游戏,包括游戏界面显示、蛇的移动、食物的生成和得分功能。
3. 学生了解并掌握结构体、数组、函数等C语言核心概念在游戏编程中的应用。
技能目标:1. 学生通过编写贪吃蛇游戏,提高逻辑思维和问题解决能力。
2. 学生能够运用C语言进行程序设计和调试,培养编程实践能力。
3. 学生能够自主查找并利用相关资料,提高信息检索和自主学习能力。
情感态度价值观目标:1. 学生在编程过程中,培养耐心和细心的品质,增强面对困难的勇气和毅力。
2. 学生通过团队协作,培养沟通和合作意识,提高团队协作能力。
3. 学生在完成游戏项目的过程中,激发对编程和计算机科学的兴趣,树立学习信心。
课程性质:本课程为C语言编程实践课,以贪吃蛇游戏为载体,让学生在实际编程过程中掌握C语言的基本知识和技能。
学生特点:学生处于初中阶段,对计算机编程有一定的好奇心,但编程基础薄弱,需要通过具体实例来激发学习兴趣。
教学要求:教师需关注学生的个体差异,提供个性化的指导,帮助学生掌握C 语言编程技能,并注重培养学生的学习兴趣和情感态度。
在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、控制结构(循环和条件语句)。
2. 函数:介绍函数定义、调用、参数传递和返回值,强调模块化编程的重要性。
3. 结构体:讲解结构体的定义和使用,以及如何用结构体表示贪吃蛇和食物。
4. 数组:介绍数组的概念和应用,特别是在贪吃蛇游戏中存储和操作蛇的移动。
5. 图形显示:利用C语言图形库(如curses或SDL)实现贪吃蛇游戏的图形界面。
6. 游戏逻辑:编写蛇的移动、食物的随机生成、吃到食物后的身体增长和得分逻辑。
7. 键盘输入:处理玩家的键盘输入,实现蛇的方向控制。
8. 游戏循环:构建游戏循环,使游戏能够在用户输入下不断运行和更新状态。
c语言课程设计贪吃蛇设计

Part Three
C语言基础知识
数据类型和变量
基本数据类型:int、float、char、double等 复合数据类型:数组、结构体、指针等 变量声明:使用关键字"int"、"float"等声明变量 变量赋值:使用"="为变量赋值 变量作用域:局部变量、全局变量等 变量生命周期:从声明到释放的过程
结构体和联合体:包括结构 体定义、结构体初始化、结 构体访问、联合体定义、联 合体初始化、联合体访问等
函数和数组
函数:C语言中的基本单元,用于实现特定功能
数组:C语言中的基本数据类型,用于存储一组相同类型 的数据
数组函数:如strlen()、strcpy()等,用于操作字符串
指针:C语言中的重要概念,用于指向内存地址
Part Four
贪吃蛇游戏设计
游戏逻辑设计
游戏结束:当蛇碰到边界或 自己时结束
游戏循环:不断更新蛇的位 置和方向
游戏开始:初始化蛇的位置 和方向
得分计算:根据吃到的食物 数量计算得分
游戏难度:根据得分调整游 戏难度,如增加蛇的速度或
改变食物的位置
游戏界面:设计游戏界面, 包括蛇、食物、边界等元素
Part Seven
总结和展望
课程设计收获和体会
掌握了C语言的基本语法和编 程技巧
学会了如何设计并实现一个完 整的游戏项目
提高了解决问题的能力和团队 协作能力
对游戏开发有了更深入的了解 和兴趣
C语言在游戏开发中的应用前景
游戏开发中,C语言具有高效、稳定的特点,适合开发大型游戏。 C语言具有广泛的应用领域,可以开发各种类型的游戏,如动作、冒险、策略等。 C语言具有强大的社区支持,可以找到大量的游戏开发资源和教程。 C语言在游戏开发中具有广泛的应用前景,可以开发出更多优秀的游戏作品。
c贪吃蛇程序课程设计

c 贪吃蛇程序课程设计一、课程目标知识目标:1. 让学生理解贪吃蛇游戏的原理和基本算法。
2. 使学生掌握运用编程语言(如Python)编写简单的贪吃蛇程序。
3. 帮助学生掌握程序中的循环、条件判断和变量等基本概念。
技能目标:1. 培养学生运用编程解决问题的能力,提高逻辑思维和动手实践能力。
2. 培养学生团队合作意识,学会与他人共同分析问题、解决问题。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养主动探索和创新的意识。
2. 培养学生面对困难时勇于尝试、不断调整心态,形成积极向上的学习态度。
课程性质:本课程为信息技术课程,结合实际操作,注重培养学生的动手能力和逻辑思维能力。
学生特点:六年级学生具备一定的计算机操作能力,对编程有一定的好奇心,但注意力容易分散,需要结合实际案例激发学习兴趣。
教学要求:通过讲解、演示、实践相结合的方式,让学生在掌握基本知识的同时,提高编程实践能力。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 理论知识:- 简介贪吃蛇游戏的起源和发展。
- 讲解贪吃蛇程序的基本原理,包括游戏规则、程序结构等。
- 介绍编程语言(如Python)的基本语法和编程环境。
2. 实践操作:- 编写简单的贪吃蛇程序,实现蛇的移动、食物的生成等功能。
- 学习使用循环、条件判断和变量等编程元素,优化贪吃蛇程序。
- 引导学生通过团队协作,共同完成贪吃蛇程序的设计与调试。
3. 教学大纲:- 第一课时:介绍贪吃蛇游戏及编程语言,让学生了解课程内容。
- 第二课时:讲解贪吃蛇程序的基本原理,引导学生学习编程语法。
- 第三课时:实践编写贪吃蛇程序,指导学生掌握基本操作。
- 第四课时:优化贪吃蛇程序,提高学生编程技能和团队协作能力。
4. 教材章节:- 《信息技术》六年级上册:第三章 计算机编程,第三节 常用编程语言。
教学内容安排和进度:本课程共4课时,每课时45分钟。
第一、二课时为理论讲解,第三、四课时为实践操作。
贪吃蛇游戏设计与实现

七、实验结果展示
• 展示游戏窗体截图 • 演示蛇的移动、食物生成、分数统计等功能
八、实验扩展
• 扩展1:修改游戏界面的颜色和样式 • 扩展2:利用多线程机制,实现异步更新游戏状态
• ...
六、项目实现步骤
(1)创建窗体 (2)创建游戏棋盘 (3)创建蛇的节点 (4)创建蛇身 (5)把蛇绘制到棋盘上
(6)让蛇移动(移动的方法: 每次移动在蛇头运动方向添加一个节点,再删除最后一个节点)
(7)添加键盘监听 (8)添加边界处理(当蛇移动到边界处就游戏结束,蛇头撞到自身游戏结束) (9)把食物绘制到棋盘上 (10)吃食物
的身体游戏即结束。 ⑥ 可以选择不同的难度,以蛇移动速度的快慢进行区分。 ⑦ 游戏过程可以暂停、继续和重新开始 ⑧ 具有排行榜功能,在游戏结束时请用户输入玩家姓名并参与排行。
五、游戏设计思路
根据需求分析可知,每个棋盘格应处于以下几种状态之一: • 空棋盘格 • 是蛇身 • 是蛇头 • 是墙 • 是食物 所有棋盘格实时的状态可存储于一个表格结构中,它由指定行、列数 (cellNumX、cellNumY)的单元格构成,使用动态申请的二维数组board表 示。
三、界面设计
四、功能需求
① 蛇可行走的范围为固定大小的棋盘格,四周为墙。 ② 蛇按照固定的时间间隔向前进方向移动,每次蛇头和蛇身按照位置顺序依次前移。 ③ 在棋盘格中随机位置生成食物,当蛇咬到食物时得1分,同时蛇身变长一格,并生成一个新
食物。 ④ 在界面上能实时显示已获得的分数。 ⑤ 玩家可以通过键盘上的上、下、左、右方向键控制蛇前进的方向,一旦撞墙或咬到自己
五、游戏设计思路
蛇在棋盘格中游走时,有4个前进的方向其中,下一次前进的方向不能与当前前进方向相对,为了 进行判断,分别使用dicect和newDirect代表当前蛇前进的方向和用户希望 蛇将要前进的方向。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测控技术与仪器专业课程设计题单班级0982011 学生刘某某课程名称计算机课程设计课题贪吃蛇游戏程序设计设计要求 1.学习游戏设计有关知识。
2.设计贪吃蛇游戏程序。
3.调试并修改程序。
4.完成课程设计论文。
课题发给日期2011年6月25日课程设计完成日期2011年7月09日指导教师余某某评语:贪吃蛇游戏学生姓名:刘某某班级:0882011指导老师:余某某摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
作为一个完整的程序,必须考虑人机交流与用户体验。
游戏的界面不能太丑,更不能连个简单的界面都没有。
游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。
游戏的美观是一方面,游戏的内在素质是另一方面。
一个游戏的优劣,最终由玩家决定。
在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
关键词:贪吃蛇流程图c语言源程序目录1 前言 (1)2 课设内容 (3)2.1课设目的 (3)2.2设计功能 (3)2.3结构设计 (7)3结论 (11)参考文献 (15)附录A (16)1 前言C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。
作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。
制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。
通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。
C语言课程应注重边学边练,但由于课堂教学和实验的深度和广度有限,练习的深度也受到一定限制。
为了弥补这一点,学校开设了本课程设计。
它比教学实验复杂一些,涉及的深度广些并更加接近实用。
目的是通过课程设计的综合训练,培养我们实际分析问题、编程和动手能力,最终目标是想通过这种形式,帮助我们系统地掌握程序设计的主要内容,更好地完成学业。
这次课程设计的主要特点如下:1.函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。
2.分析函数先从main()函数入手。
Main()函数是C源程序编译时的开始,从main()函数开始读函数可将其他函数的功能理解得更透彻。
3.在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。
4.我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行处理的函数,起功能我都有所了解。
5.它独立于具体的C语言教科书,重点放在C语言的基本特征上,以"不变"应"万变",涵盖C语言的重要基础知识,让我们熟练掌握C语言的实际使用。
6.结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。
激发学习兴趣,调动我们主动学习的积极性,并会根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。
7.提供综合的课程设计理念,以期进一步锻炼学生的动手能力。
同时让同学合作完成这些实验,以便锻炼互相合作精神,培养团队意识。
8.通过观察网络的实例,循序渐进地启发学生完成设计。
课程设计将要求、算法和源程序分开,为学生创造独立思考的条件。
学生在充分理解要求和算法的前提下,设计自己的应用程序。
同时我也获得了许多宝贵的经验:1) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解, 知道所设计的题目和内容包含那些资源。
2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。
3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路,发现错误也是取得成绩的一种。
4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
2 课设内容2.1设计目的通过课程设计的综合训练,培养我们实际分析问题、编程和动手能力,据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。
最终目标是想通过这种形式,帮助我们系统地掌握程序设计的主要内容,更好地完成学业。
2.2设计功能在这次课射中,我选择的是贪吃蛇游戏的制作,游戏是人们生活中不可或缺的,一个人从小到大,真正伴随他成长的东西,游戏占有着很重要的地位.不论是一个玩具,还是一个能和伙伴一起开心的小游戏,都是能给我们留下很多美好的回忆.所以不论是什么样的游戏,只要它能迎合人们内心的某种需求,它的市场总会是好的,而贪吃蛇是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随即出现一个食物,通过按键上的四个光标键控制向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体则游戏结束。
本程序运行实现的主要技巧在二维数组的应用上,程序运行时,游戏界面如下图所示,边框表示围墙,黑色单独方块表示食物:图2.1 游戏界面2.3结构设计程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。
移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现与消失也是画矩形块和覆盖矩形块。
为了便于理解,定义两个结构体:食物与蛇。
2.3.1 数据结构表示食物和蛇的矩形都设计为10 X 10个像素单位,食物的基本数据域为它所出现的位置,用X和y 坐标表示,则矩形块用函数rectangle(x,y,x+10,y+10)或rectangle(x,y,x+10,y-10)可以画出。
由于每次只出现一个食物,而食物被吃掉后,才出现下一个食物,所以设定yes 表示是否要出现一个食物的变量。
蛇的一节身体为一个矩形块,这样表示每个矩形块只需起点坐标x 和y。
身体是不断增长的,所以用数组存放每一节的坐标,最大设定为N=200 ,node表示当前节数。
另外还需要保存蛇移动方向的变量direction 和表示生命的变量 life ,一但life 为1,则蛇死,游戏结束。
所以程序功能的实现就是数组的操作。
#define N 200struct Food{int x; /* 食物的横坐标 */int y; /* 食物的纵坐标 */int yes; /* 判断是否出现食物的变量 */} food; /* 食物的结构体 */struct snake{int x[N]; /* 蛇的横坐标 */int y[N]; /* 蛇的纵坐标 */int node; /* 蛇的节数 */int direction; /* 蛇移动方向 */int life; /* 蛇生命,0活着,1死亡 */}snake;2.3.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();2.3.3 画界面函数 DrawK ()主界面就是一个密封的围墙,用两个循环语句分别在水平方向和垂直方向输出连续的宽度和高度均为10 个单位的矩形小方块,围成密闭图形,表示围墙,为了醒目,设置淡青颜色,用函数setlinestyle ( SOLD_LINE,0,THICK_WIDTH )设置线型宽度为3个像素。
设置3个像素的围墙线,蛇在贴墙走的时候,会擦掉部分围墙线,使线变细,图形变得不好看,如果不想这种情况出现,则将线型宽度设置为1个像素。
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);/*右边*/}}2.3.4 游戏具体过程函数 GamePlay ()这个函数是游戏的主要部分,难点在表示蛇的新位置并消除前一次的图形。