C++贪吃蛇说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言课程设计报告
题目:贪吃蛇
指导教师:**
院系:电气信息工程学院班级: 01 *名:***
学号: 15
目录
1程序设计目的.......................................... 错误!未定义书签。

2程序设计具体要求...................................... 错误!未定义书签。

3程序功能.............................................. 错误!未定义书签。

4设计思路.............................................. 错误!未定义书签。

5程序清单.............................................. 错误!未定义书签。

6总结与体会............................................ 错误!未定义书签。

7结束语................................................ 错误!未定义书签。

1、课程设计目的:
1.进一步掌握和利用C语言进行行程设计的能力;
2.进一步理解和运用结构化程序设计的思想和方法;
3.初步掌握开发一个小型实用系统的基本方法;
4.学会调试一个较长程序的基本方法;
5.学会利用流程图表示算法;
6.掌握书写程序设计开发文档的能力(书写课程设计报告)。

2、课程设计具体要求:
贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,
吃各个方向出现的蛋,越吃越长。

只要蛇头碰到屏幕四周,或者碰到自己
的身子,小蛇就立即毙命。

和别的游戏不同,贪食蛇是一个悲剧性的游戏。

许多电子游戏都是打通关到底,游戏操作者以胜利而告终。

而贪食蛇的结
局却是死亡。

“贪食蛇”,要命的就在一个“贪”字上。

所以,有时候真
的需要及时收手,不要逼人太甚。

如果没有余地,就算你的手再快,面临
的结局也是——崩盘。

3、程序功能:
我设计的贪吃蛇V1.00主要具有以下功能
1.每吃到一个普通食物,蛇的身体增长一节,玩家的分数加1。

同时,蛇
移动的速度也会随之加快。

2.可以选择FAST NOMAL SLOW三个速度等级。

3.可以选择单人游戏或者双人游戏,选择双人游戏时,按方向键控制Player1,按W A S D控制Player2.首先撞死的蛇为败者。

4.每吃掉3个普通食物,将产生一个奖励食物,如果吃掉奖励食物,玩家的分数加1,但是蛇的身体不增长。

5.每吃掉3个普通食物,同时将产生一个障碍,如果吃掉奖励食物,障碍也将随之消失。

另外,每次产生的障碍形状不同。

6.如果在难度等级对应的时间内没有吃掉奖励食物,食物消失,障碍也会消失。

7.按空格键可以控制暂停与开始,按ESC键退出游戏。

8.游戏有排行榜功能,当得分不为0时,玩家的姓名将被记录到排行榜中;进行双人游戏时,胜利玩家的姓名将被记录到排行榜中。

9.游戏开始以及蛇吃到食物,蛇死亡时,都有不同的音效。

10.兼容性:代码大概620行,在WINDOWS 7&&VC++6.0环境下编译通过。

生成的EXE游戏文件在WINDOWS 7 | | WINDOW XP环境下都能运行。

4、设计思路:
1.程序总体结构
贪吃蛇的关键算法为:先调用画图函数画出地图以及蛇的身体,将蛇的每一步移动当成一次循环来处理,判断是否吃到食物或者撞到障碍等问题,如果撞到障碍,则游戏结束;如果不撞到障碍,则进行下一次循环。

其主流程如图
2所示。

图2贪吃蛇的流程图
2.界面设计
贪吃蛇的界面如图3所示,具体设计如下:
(1)地图背景采用黑色,蛇的可移动范围为绿色方框部分,地图边框为蓝色图形部分。

(2)地图左右两边用绿色字体,调用newscore(int i)函数分别输出两个玩家的得分情况。

(3)两条蛇分别用不同颜色输出。

普通食物以紫色星星输出;奖励食物以白色星星输出,障碍以红色图形输出。

(5)当游戏结束时,在地图下方输出胜利者以及排行榜信息。

图3贪吃蛇V1.00的外观
3.重要数据的数据结构设计
贪吃蛇的主体程序为蛇的移动,主要用到了循环算法。

由于TC中的gotoxy(int x, int y)函数到VC或者其它编译器中用不了了,这样一来如果想在控制台程序中进行简单的屏幕输出控制就不好办了。

所以为了实现在VC++6.0中颜色字体的输出以及清屏,光标位置控制等功能,必须在头文件中包括”pcc32.h”“common.h””jkey32.h ”等文件。

利用上述同文件中的接口函数,便能够在WIN32控制台程序中实现TC中才能实现的屏幕控制以及键盘控制等功能。

另外,在设计游戏排行榜的过程中,运用了C文件调用以及重新保存技术。

5、函数清单:
贪吃蛇V1.00程序采用了结构化程序设计的思想,由8个.h文件,1个.cpp 文件,2个普通文件,2个.a静态库文件和4个.wav组成.其中包含11个自编函数,函数名及功能如下:
/*注:由于游戏功能强大,以下函数仅为主要函数,一些用于控制细节的函数,如Playsound()等将不予以一一列出,详见源代码*/
1.Char menu();
/*用于输入玩家选择的游戏速度,返回一个char值*/
2.Char menudouble();
/*用于输入玩家选择的游戏人数,返回一个chare值*/
3.DELAY(char ch1);
/*用于控制游戏速度*/
4.Void main();
/*主函数,用于控制游戏*/
5.void drawmap();
/*绘制游戏地图函数*
6.void drawfood(char ch);
/*绘制普通食物函数*/
7.void snake_move();
/*蛇的移动函数*/
8.void drawsnake(int i);
/*绘制蛇身函数*/
9.void newscore(int i);
/*更新玩家得分函数*/
10.void drawrw_food(char ch);
/*绘制奖励食物函数*/
11.void drawstone(char ch);
/*绘制障碍函数*/
贪吃蛇包含的文件有:common.h,pcc32.h,jkey32.h,libpcc32.a,libjkey32.a,finalsnake.cpp,片头.wav,超级马里奥兄弟死掉音.wav,食物.wav,奖励食物.wav。

源代码如下:
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#include "pcc32.h"
#include "mmsystem.h"
#include "jkey32.h"
#pragma comment(lib, "winmm.lib") #pragma comment(lib,"libpcc32.a") #pragma comment(lib,"libjkey32.a") #define DIR_UP 1
#define DIR_DOWN 2
#define DIR_LEFT 3
#define DIR_RIGHT 4
void drawmap();
void drawfood(char ch);
void snake_move();
void drawsnake(int i);
void newscore(int i);
void drawrw_food(char ch);
void drawstone(char ch);
struct point //结构体坐标
{
int x;
int y;
}snake[2][80],food,rw_food,stone[4];
struct rank //排行榜
{
char name[20];
int point;
}player[80];
clock_t begin_time,end_time;
int count=0; //记录吃掉普通食物的次数
int num=0;
int gamespeed=50;
int nofood=1;
int nopause=0;
int norw_food=1;
int rwtime;
int snake_dir[2]={DIR_RIGHT,DIR_RIGHT};
int snake_life[2]={1,1};
int snake_len[2]={3,3}; //蛇的初始节数都为3 int hx[2],hy[2]; //蛇头坐标
int score[2]={0,0};//得分为零
char menu()
{
char ch1;
setTextColor(2);
gotoTextPos(24/2,16/2);
PlaySound("d:\\片头.wav",NULL,
SND_ASYNC|SND_NODEFAULT );//SND_ASYNC用异步方式播放声音,PlaySound 函数在开始播放后立即返回。

SND_NODEFAULT不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。

printf("\t\tPlease choose the gamespeed:\n");
printf("\t\t\t1-Fast 2-Normal 3-Slow\n");
printf("\n\t\t\tPlease Press The numbers..\n");
do //确保输入的为规定情况之一
{ch1=getch();}
while(ch1!='1'&&ch1!='2'&&ch1!='3');
printf("\t\t\tYou have choosed the speed %c!",ch1);
printf("\n\n\t\t\tPress Anykey to continue!");
if(jkGetKey())
{
system("cls"); //清空屏幕#include <stdlib.h>
return(ch1); //返回一个选择的速度
}
}
char menudouble()
{
char ch2;
setTextColor(6);
gotoTextPos(24/2,16/2);
PlaySound("d:\\片头.wav",NULL, SND_ASYNC|SND_NODEFAULT );
printf("\t\tPlease choose the game mode:\n");
printf("\t\t\t1-1 player\n");
printf("\t\t\t2-2 players\n");
printf("\n\t\t\tPlease Press The numbers..\n");
do
{
ch2=getch();
}while(ch2!='1'&&ch2!='2');
printf("\t\t\tYou have choosed the mode %c!",ch2);
printf("\n\n\t\t\tPress Anykey to start!");
if(jkGetKey())
{
system("cls");
return(ch2);
}
}
void DELAY(char ch1)
if(ch1=='1')
{
delayMS(gamespeed);
}
else if(ch1=='2')
{
delayMS(gamespeed);
delayMS(gamespeed);
}
else
{
delayMS(gamespeed);
delayMS(gamespeed);
delayMS(gamespeed);
delayMS(gamespeed);
}
}
void main()
{
FILE *fp,*p1;
char ch1;
char ch2;
int i,j,n,k;
int temp_point;
char temp_name[20];
printf("贪吃蛇--By qiyingshuai\n");
printf("zhuandian 09-01-15\n");
setCursorVisible(0);
setConsoleTitle("贪吃蛇—qiyingshuai\n"); //标题ch1=menu();
ch2=menudouble();
drawmap();
switch(ch1)
{
case '1':rwtime=2500;break;
case '2':rwtime=3000;break;
case '3':rwtime=3500;break;
}
for(i=0;i<(ch2-48);i++)
newscore(i);
for(i=0;i<(ch2-48);i++) //画出蛇的最初形态
{ setTextColor(15);
gotoTextPos(30, 5+i*9);
printf("+");
gotoTextPos(30+2, 5+i*9);
setTextColor(3+i*2);
printf("■");
setTextColor(4+i*2);
gotoTextPos(30+4, 5+i*9);
printf("◆");
}
for(i=0;i<(ch2-48);i++) //定位蛇每节身体的初始坐标 {
for(j=0;j<snake_len[i];j++)
{
snake[i][j].x=34-j*2;
snake[i][j].y=5+i*9;
}
hx[i]=snake[i][0].x; //蛇头初始坐标
hy[i]=snake[i][0].y;
}
while(snake_life[0]&&snake_life[1]) //开始游戏
{
if(nopause)
{
DELAY(ch1); //赋予游戏速度
delayMS(80-snake_len[0]*2); //游戏速度随蛇长度的增加而加快
if(nofood)
drawfood(ch2); //产生食物
if(norw_food==1&&count==3) //每吃掉3个普通食物产生一个奖励食物,并产生障碍
{
drawrw_food(ch2);
drawstone(ch2);
begin_time=clock();
end_time=begin_time+rwtime;
}
snake_move();
if(end_time<=clock()&&norw_food==0) //在难度等级对应的时间内没有吃掉奖励食物,食物消失
{
gotoTextPos(rw_food.x, rw_food.y);
setTextColor(2);
printf("□");
for(i=0;i<4;i++)
{
gotoTextPos(stone[i].x,stone[i].y); printf("□");
}
for(j=0;j<4;j++) //石头坐标清零。

{
stone[j].x=0;
stone[j].y=0;
}
rw_food.x=0; //奖励食物坐标清零 rw_food.y=0;
begin_time=0;
end_time=0;
norw_food=1;
}
for(i=0;i<(ch2-48);i++)
drawsnake(i);
if(snake_life[1]==0&&snake_life[0]==0)
goto d;
for(i=0;i<(ch2-48);i++) //如果有其中一只蛇死亡,结束游戏
if(snake_life[i]==0)
goto c;
}
if(jkHasKey())
{
switch(jkGetKey())
{
case JK_SPACE:
nopause=!nopause;
break;
case
JK_ESC:snake_life[1]=0;snake_life[0]=0;score[0]=0;score[1]=0;goto d;break;
default:break;
}
}
}
c: PlaySound("d:\\超级马里奥兄弟死掉音.wav",NULL,
SND_ASYNC|SND_NODEFAULT );
d: setTextColor(14);
gotoTextPos(25,20);
if(ch2=='1')
printf("Game over!");
else if(ch2=='2')
{
if(snake_life[0]==0&&snake_life[1]!=0)
printf("player 2 win!");
else if(snake_life[1]==0&&snake_life[0]!=0)
printf("player 1 win!");
else
printf("Game over!/n");
}
getch();
if(score[0]!=0||score[1]!=0) //当有其中一个玩家的分数不为零,记录排行榜
{
if((fp=fopen("player_rank","rb"))==NULL) //打开排行榜文件
{
printf("file open error");
exit(0);
if((p1=fopen("num","rb"))==NULL) //打开排行榜玩家数量文件
{
printf("file open error");
exit(0);
}
n=fgetc(p1); //调用排行榜玩家数到内存,赋值给n for(j=0;j<n;j++) //调用排行榜玩家信息到内存
fread(&player[j],sizeof(struct rank),1,fp);
fclose(fp);
fclose(p1);
printf("Please intput the name of player:");
scanf("%s",player[n].name);
if(ch2=='1')
player[n].point=score[0];
else //双人游戏时,分数高的玩家姓名被记录到排行榜
{
if(score[0]>=score[1])
player[n].point=score[0];
else
player[n].point=score[1];
n++; //排行榜记录加1
for(i=0;i<n-1;i++) //按照得分进行从大到小排序{
k=i;
for(j=i+1;j<n;j++)
if(player[j].point>player[k].point)
k=j;
temp_point=player[k].point;
player[k].point=player[i].point;
player[i].point=temp_point;
strcpy(temp_name,player[k].name);
strcpy(player[k].name,player[i].name);
strcpy( player[i].name,temp_name);
}
gotoTextPos(25,21);
printf("player's name score");
printf("\n");
for(i=0;i<n;i++) //输出排行榜
{
gotoTextPos(25,21+i+1);
printf("%-15s%4d\n",player[i].name,player[i].point);
}
if((fp=fopen("player_rank","wb"))==NULL) //打开排行榜文件{
printf("file open error");
exit(0);
}
if((p1=fopen("num","wb"))==NULL) //打开排行榜玩家数量文件
{
printf("file open error");
exit(0);
}
for(j=0;j<n;j++) //将排行榜玩家信息重新写入文件 fwrite(&player[j],sizeof(struct rank),1,fp);
fputc(n,p1);
fclose(fp);
fclose(p1);
}
getch();
}
void drawmap()
{
int j,i;
setTextColor(2);
for(i=0;i<16;i++)
{
gotoTextPos(16, 3+i);
for(j=0;j<24;j++)
printf("□");
}
setTextColor(9);
for(j=0;j<26;j++) //输出上边
{
gotoTextPos(14+j*2, 2);
printf("¤");
}
for(i=0;i<18;i++) //输出左边{ gotoTextPos(14, 2+i);
printf("¤");
}
for(i=0;i<18;i++) //输出右边{
gotoTextPos(14+25*2, 2+i);
printf("¤");
}
for(j=0;j<26;j++) //输出下边
{
gotoTextPos(14+j*2, 2+17);
printf("¤");
}
}
void snake_move()
{
if(jkHasKey())
{
switch(jkGetKey())
{
case JK_UP:
if(snake_dir[0]!=DIR_DOWN)
snake_dir[0]=DIR_UP;
case 'w':
if (snake_dir[1]!=DIR_DOWN) snake_dir[1]=DIR_UP;
break;
case JK_DOWN:
if (snake_dir[0]!=DIR_UP)
snake_dir[0]=DIR_DOWN;
break;
case 's':
if (snake_dir[1]!=DIR_UP)
snake_dir[1]=DIR_DOWN;
break;
case JK_LEFT:
if (snake_dir[0]!=DIR_RIGHT) snake_dir[0]=DIR_LEFT;
break;
case 'a':
if (snake_dir[1]!=DIR_RIGHT) snake_dir[1]=DIR_LEFT;
case JK_RIGHT:
if (snake_dir[0]!=DIR_LEFT)
snake_dir[0]=DIR_RIGHT;
case 'd':
if (snake_dir[1]!=DIR_LEFT)
snake_dir[1]=DIR_RIGHT;
break;
case JK_SPACE:
nopause=!nopause;
break;
case
JK_ESC:snake_life[1]=0;snake_life[0]=0;score[0]=0;score[1]=0;break;
}
}
}
void drawsnake(int i)
{
int j,k=1;
switch(snake_dir[i])
{
case DIR_UP: hy[i]--;break;
case DIR_DOWN: hy[i]++;break;
case DIR_LEFT:hx[i]=hx[i]-2;break;
case DIR_RIGHT:hx[i]=hx[i]+2;break;
}
if(hx[i]>=64||hx[i]<=14||hy[i]>=19||hy[i]<=2) //判断蛇是否撞墙 snake_life[i]=0,k=0;
for(j=0;j<4;j++)//蛇是否撞到障碍
if(hx[i]==stone[j].x&&hy[i]==stone[j].y)
snake_life[i]=0,k=0;
for(j=0;j<snake_len[i];j++) //蛇是否撞到自己
if(hx[i]==snake[i][j].x&&hy[i]==snake[i][j].y)
snake_life[i]=0,k=0;
if(i==0) //当进行双人游戏时,需判断是否撞到对方的蛇 for(j=0;j<snake_len[1];j++)
if(hx[0]==snake[1][j].x&&hy[0]==snake[1][j].y)
snake_life[0]=0,k=0;
if(i==1)
for(j=0;j<snake_len[0];j++)
if(hx[1]==snake[0][j].x&&hy[1]==snake[0][j].y)
snake_life[1]=0,k=0;
if(hx[i]==food.x&&hy[i]==food.y) //如果吃到食物
{
count++;
num++;
PlaySound("d:\\食物.wav",NULL, SND_ASYNC|SND_NODEFAULT );
gotoTextPos(food.x, food.y);
setTextColor(4+i*2);
printf("◆");
gotoTextPos(snake[i][0].x, snake[i][0].y);
setTextColor(3+i*2);
printf("■");
score[i]++;
newscore(i);
snake_len[i]++;
k=0;
nofood=1;
}
if(hx[i]==rw_food.x&&hy[i]==rw_food.y)//如果吃到奖励食物加两分
{
PlaySound("d:\\奖励食物.wav",NULL, SND_ASYNC|SND_NODEFAULT);
gotoTextPos(rw_food.x,rw_food.y);
setTextColor(4+i*2);
printf("◆");
gotoTextPos(snake[i][0].x,snake[i][0].y);
setTextColor(3+i*2);
printf("■");
gotoTextPos(snake[i][snake_len[i]-1].x,snake[i][snake_len[i]-1].y );
setTextColor(2);
printf("□");
gotoTextPos(snake[i][snake_len[i]-2].x,snake[i][snake_len[i]-2].y );
setTextColor(15);
printf("+");
setTextColor(2);
rw_food.x=0; //奖励食物坐标清零
rw_food.y=0;
for(j=0;j<4;j++)
{
gotoTextPos(stone[j].x,stone[j].y); printf("□");
}
for(j=0;j<4;j++) //石头坐标清零。

{
stone[j].x=0;
stone[j].y=0;
}
score[i]=score[i]+2;
newscore(i);
k=0;
norw_food=1;
}
if(k==1) //蛇正常前进
{
gotoTextPos(hx[i],hy[i]);
setTextColor(4+i*2);
printf("◆");
gotoTextPos(snake[i][0].x,snake[i][0].y); setTextColor(3+i*2);
printf("■");
gotoTextPos(snake[i][snake_len[i]-1].x,snake[i][snake_len[i]-1].y );
setTextColor(2);
printf("□");
gotoTextPos(snake[i][snake_len[i]-2].x,snake[i][snake_len[i]-2].y );
setTextColor(15);
printf("+");
}
for(j=1;j<snake_len[i];j++) //重新定义蛇身和蛇尾坐标
{
snake[i][snake_len[i]-j].x=snake[i][snake_len[i]-j-1].x;
snake[i][snake_len[i]-j].y=snake[i][snake_len[i]-j-1].y;
}
snake[i][0].x=hx[i]; // 重新定义蛇头坐标
snake[i][0].y=hy[i];
}
void drawfood(char ch)
{
int i,j;
srand((unsigned)time(NULL)); //产生随机种子
a:
food.x=rand()%47+16;
food.y=rand()%16+3;
if(food.x%2!=0)
goto a;
for(i=0;i<(ch-48);i++) //食物是否在蛇身体内
for(j=0;j<snake_len[i];j++)
if(food.x==snake[i][j].x&&food.y==snake[i][j].y)
goto a;
if(food.x==rw_food.x&&food.y==rw_food.y) //食物是否与奖励食物重合
goto a;
for(j=0;j<4;j++) //食物是否与障碍重合
if(food.x==stone[j].x&&food.y==stone[j].y)
goto a;
gotoTextPos(food.x, food.y); //满足条件的坐标产生食物
setTextColor(5);
printf("★");
nofood=0;
void newscore(int i) //输出分数
{
if(i==0)
{
setTextColor(2);
gotoTextPos(2,5);
printf("Player 1");
gotoTextPos(2,7);
printf("Score: %d.", score[0]);
}
if(i==1)
{
setTextColor(2);
gotoTextPos(70,5);
printf("Player 2");
gotoTextPos(70,7);
printf("Score: %d.", score[1]);
}
}
void drawrw_food(char ch)
int i,j;
srand((unsigned)time(NULL)); //产生随机种子
a:
rw_food.x=rand()%47+16;
rw_food.y=rand()%16+3;
if(rw_food.x%2!=0)
goto a;
for(i=0;i<(ch-48);i++) //食物是否在蛇身体内
for(j=0;j<snake_len[i];j++)
if(rw_food.x==snake[i][j].x&&rw_food.y==snake[i][j].y)
goto a;
if(food.x==rw_food.x&&food.y==rw_food.y) //食物是否与普通食物重合
goto a;
for(j=0;j<4;j++) //食物是否与障碍重合
if(rw_food.x==stone[j].x&&rw_food.x==stone[j].y)
goto a;
gotoTextPos(rw_food.x, rw_food.y); //满足条件的坐标产生食物
setTextColor(7);
printf("★");
norw_food=0;
begin_time=0;
end_time=0;
count=0;
}
void drawstone(char ch) //画障碍函数{
int i,method,j,z;
srand((unsigned)time(NULL));
b:
method=rand()%4+1;
switch(method)
{
case 1:
stone[0].x=rand()%43+16;
stone[0].y=rand()%15+4;
stone[1].x=stone[0].x+2;
stone[1].y=stone[0].y;
stone[2].x=stone[1].x+2;
stone[2].y=stone[1].y;
stone[3].x=stone[1].x;
stone[3].y=stone[1].y-1;
break;
case 2:
stone[0].x=rand()%45+16;
stone[0].y=rand()%15+3;
stone[1].x=stone[0].x+2;
stone[1].y=stone[0].y;
stone[2].x=stone[0].x;
stone[2].y=stone[0].y+1;
stone[3].x=stone[2].x+2;
stone[3].y=stone[2].y;
break;
case 3:
stone[0].x=rand()%41+16;
stone[0].y=rand()%16+3;
stone[1].x=stone[0].x+2;
stone[1].y=stone[0].y;
stone[2].x=stone[1].x+2;
stone[2].y=stone[0].y;
stone[3].x=stone[2].x+2;
stone[3].y=stone[0].y;
break;
case 4:
stone[0].x=rand()%45+16;
stone[0].y=rand()%14+4;
stone[1].x=stone[0].x;
stone[1].y=stone[0].y+1;
stone[2].x=stone[0].x+2;
stone[2].y=stone[0].y-1;
stone[3].x=stone[2].x;
stone[3].y=stone[0].y;
break;
}
if(stone[0].x%2!=0)
goto b;
for(z=0;z<4;z++) //若障碍与普通食物重合,重新产生障碍坐标if(stone[z].x==food.x&&stone[z].y==food.y)
goto b;
for(z=0;z<4;z++) //若障碍与奖励食物重合,重新产生障碍坐标if(stone[z].x==rw_food.x&&stone[z].y==rw_food.y)
goto b;
for(i=0;i<(ch-48);i++) //若障碍与蛇的身体重合,重新产生障碍坐标for(z=0;z<4;z++)
for(j=0;j<snake_len[i];j++)
if(stone[z].x==snake[i][j].x&&stone[z].y==snake[i][j].y)
goto b;
setTextColor(12);
for(z=0;z<4;z++)
{
gotoTextPos(stone[z].x,stone[z].y);
printf("¤");
}
}
6、总结与体会:
本人设计的贪吃蛇程序基本符合题目的要求,功能基本完善,今后会在创新方面更加努力研究。

在设计过程中遇到很多困难,但是通过各种参考文献,从中找到了自己的不足之处,加以修改,得以完善。

通过这次自己亲手实验,让我更加了解C语言编程。

7、结束语:
我十分感谢老师和学校能给我们这次亲自动手的机会,让我们更加了解C 语言程序,还有过程中帮助我的朋友们,帮助我提高。

参考文献:
[1] 谭浩强,《C程序设计》(第3版),清华大学出版社.
[2] 郭翠英 C语言课程设计案例精编中国水利出版社
[3] 曹桂琴数据结构基础大连理工大学出版社
[4] 郑玲《c语言程序设计》电力大学出版社.
[5] 韩增红 C/C程序设计教程吉林科学技术出版社。

相关文档
最新文档