实训作业

  • 格式:doc
  • 大小:98.00 KB
  • 文档页数:6

C语言程序设计 课 程 实 验 报 告 实验题目:贪吃蛇游戏 12 级 计算机信管 专业 二 班 姓名: 贾慧娟 学号:201232803066 地点:高职实验411 实验学时:2 报告时间:2013-6-15 成绩

实验目的: (1)设计题目 贪吃蛇游戏是一款经典的休闲游戏,一条蛇在密封的围墙内,围墙内随机出现一个食物,通过控制方向键操作使小蛇不停的朝食物的方向前进,直到吃掉了食物。每吃一个食物,小蛇都会长长一节,随之而来的难度加大:当小蛇的头撞到墙时或者小蛇的头和身体相撞时,小蛇就会死亡。使用C语言,在VC环境下,设计一款贪吃蛇游戏。

(2) 功能设计要求 本游戏要求实现以下几点基本功能。 1) 用上、下、左、右键控制游戏区蛇的运动方向,使之向着食物方向运动,并吞吃食物使身体增长。

2) 用户可以调节蛇的运动速度来选择不同的难度。 3) 游戏分多个难度级别。 4) 用户可以选择一种自己喜欢的颜色作为游戏区的背景色,避免对一种颜色产生视觉疲劳。 5) 记录成绩在前五名的游戏玩家名字。 6) 增加背景音乐。 7) 拔高要求:增加障碍物及游戏级别。

实验内容: 数据代码: #include #include #include

#include int length=1; //蛇的当前长度,初始值为1 int line[100][2]; //蛇的走的路线 int head[2]={40,12}; //蛇头 int food[2]; //食物的位置 char direction; //蛇运动方向 int x_min=1;x_max=77; y_min=2; y_max=23; //设置蛇的运动区域 int tail_before[2]={40,12}; //上一个状态的蛇尾 char direction_before='s'; //上一个状态蛇的运动方向 int live_death=1; //死活状态,0死,1活 int eat_flag=0; //吃食物与否的状态,0没吃,1吃了 int max=0; int delay; //移动延迟时间

void gotoxy(int x, int y); //x为列坐标,y为行坐标 void hidden(); //隐藏光标 void update_score(); void create_window(); void update_line(); void initial(); void createfood(); void show_snake(); char different_direction(char dir); void get_direction(); void live_state(); //判断蛇的生存状态 void eat();

int main(void) { int x=0,y=0; int i; hidden(); //隐藏光标 create_window(); initial(); createfood(); for(direction='s',delay=600;;) { get_direction(); eat(); C语言程序设计 课 程 实 验 报 告 实验题目:贪吃蛇游戏 12 级 计算机信管 专业 二 班 姓名: 贾慧娟 学号:201232803066 地点:高职实验411 实验学时:2 报告时间:2013-6-15 成绩

update_line(); live_state(); //判断生死状态 if(live_death==1) show_snake(); else break; Sleep(delay); } return 0; } void gotoxy(int x, int y) //x为列坐标,y为行坐标 { COORD pos = {x,y}; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos); } void hidden() //隐藏光标 { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(hOut,&cci); cci.bVisible=0; //赋1为显示,赋0为隐藏 SetConsoleCursorInfo(hOut,&cci); } void update_score() { gotoxy(2,1); printf("我的分数:%d",length); gotoxy(42,1); printf("最高记录:%d",max); } void create_window() { gotoxy(0,0); printf("╔══════════════════╦═══════════════════╗"); printf("║ ║ ║"); printf("╠══════════════════╩═══════════════════╣"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("║ ║"); printf("╚══════════════════════════════════════╝"); }

void update_line() { int i; if(eat_flag==0) //吃了食物就不用记住上一个状态的蛇尾,否则会被消掉 { tail_before[0]=line[0][0]; //记住上一个状态的蛇尾 tail_before[1]=line[0][1]; for(i=0;i{ line[i][0]=line[i+1][0]; line[i][1]=line[i+1][1]; } line[length-1][0]=head[0]; //更新蛇头 line[length-1][1]=head[1]; } } C语言程序设计 课 程 实 验 报 告 实验题目:贪吃蛇游戏 12 级 计算机信管 专业 二 班 姓名: 贾慧娟 学号:201232803066 地点:高职实验411 实验学时:2 报告时间:2013-6-15 成绩

void initial() { FILE *fp; gotoxy(head[0],head[1]); printf("蛇"); line[0][0]=head[0]; //把蛇头装入路线 line[0][1]=head[1]; if((fp=fopen("highest","r"))==NULL) //第一次使用时,初始化奖最高分为0 { fp=fopen("highest","w"); fprintf(fp,"%d",0); max=0; fclose(fp); } else { fp=fopen("highest","r"); fscanf(fp,"%d",&max); } update_score(); } void createfood() { int flag,i; srand((unsigned)time(NULL)); for(;;) { for(;;) //产生一个偶数横坐标 { food[0]=rand()%(x_max+1); if(food[0]%2==0 && food[0]>x_min) break; } for(;;) { food[1]=rand()%(y_max); if(food[1]>y_min) break; } for(i=0,flag=0;iif(food[0]==line[i][0] && food[1]==line[i][1]) { flag=1; break; } } if(flag==0) //食物不在蛇身上,结束循环 break; } gotoxy(food[0],food[1]); printf("*"); }

void show_snake() { gotoxy(head[0],head[1]); printf("@"); if(eat_flag==0) //没吃食物时消去蛇尾 { gotoxy(tail_before[0],tail_before[1]); printf(" "); //消除蛇尾 } else eat_flag=0; //吃了食物就回到没吃状态 }

char different_direction(char dir) { switch(dir) { case 'a': return 'd'; case 'd': return 'a'; case 'w': return 's'; case 's': return 'w'; } }