贪吃蛇游戏源代码.doc_第1页
贪吃蛇游戏源代码.doc_第2页
贪吃蛇游戏源代码.doc_第3页
贪吃蛇游戏源代码.doc_第4页
贪吃蛇游戏源代码.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

贪吃蛇游戏源代码#include #include #include #include #include #include #include#define LEFT_MARGIN 140#define FRAME_UNIT_WIDTH 25#define FRAME_UNIT_HEIGHT 15#define BOX_SIZE 15#define WINDOW_WIDTH 640#define WINDOW_HEIGHT 480#define SNAK_DEFAULT_POS_X 10#define SNAK_DEFAULT_POS_Y 5#define SMD_UP 1#define SMD_DOWN 2#define SMD_RIGHT 3#define SMD_LEFT 4#define UP_MOVE 72#define DOWN_MOVE 80#define LEFT_MOVE 75#define RIGHT_MOVE 77#define STEP_MOVE 7#define GAME_STOP 57#define ESC_OUT 1#define GENERAT_EGG 8#define NO_EVENT 0#define Boolean int#define TRUTH 1#define FALS 0#define Type_GAMESTATUS int#define ON_PALYING 2#define WINNER 1#define GAMEOVER 0#define TIMEINTERVAL 6typedef struct int p_X; int p_Y; POS_in_Fram;typedef struct SNode POS_in_Fram cur_pos; int color; struct SNode *next; SNode, *LSNode;typedef struct int direction; int len; POS_in_Fram Head_pre_pos; POS_in_Fram Head_cur_pos; int Head_color; LSNode next; Boolean Dead; SNAK;typedef struct POS_in_Fram egg_pos; int egg_color; EggType;SNAK obj_snake;EggType obj_egg;int Message_Event;int ScoreTotal;int SpeedLevel;Type_GAMESTATUS GameStat;void set_Message_Event(int T) Message_Event = T;int get_Message_Event() return(Message_Event);void clear_ScoreTotal() ScoreTotal = 0;int get_ScoreTotal() return(ScoreTotal);void draw_ScoreTotal() char text_buffer20; int ul_X, ul_Y; ul_X = LEFT_MARGIN; ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT - 4); setcolor(BLUE); sprintf(text_buffer, Score Total: %d, get_ScoreTotal(); moveto(ul_X, ul_Y); outtext(text_buffer); setcolor(YELLOW); ScoreTotal+; sprintf(text_buffer, Score Total: %d, get_ScoreTotal(); moveto(ul_X, ul_Y); outtext(text_buffer);void init_SpeedLevel() SpeedLevel = 1;int get_SpeedLevel() return(SpeedLevel);void draw_SpeedLevel(int old_l, int new_l) char text_buffer20; int ul_X, ul_Y; ul_X = LEFT_MARGIN; ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT - 4); setcolor(BLUE); sprintf(text_buffer, Speed Level: %d, old_l); moveto(ul_X, ul_Y + textheight(H) * 2); outtext(text_buffer); setcolor(YELLOW); sprintf(text_buffer, Speed Level: %d, new_l); moveto(ul_X, ul_Y + textheight(H) * 2); outtext(text_buffer);void setSpeedLevel(int score) if(score = 0 & score = 20 & score = 50 & score next) if(p-cur_pos.p_X = pX) & (p-cur_pos.p_Y = pY) return(TRUTH); return(FALS);Boolean Is_SnakEating() if(obj_snake.Head_pre_pos.p_X = obj_egg.egg_pos.p_X) & (obj_snake.Head_pre_pos.p_Y = obj_egg.egg_pos.p_Y) return(TRUTH); else return(FALS);void Init_obj_snake() obj_snake.direction = SMD_RIGHT; obj_snake.len = 1; obj_snake.Head_cur_pos.p_X = SNAK_DEFAULT_POS_X; obj_snake.Head_cur_pos.p_Y = SNAK_DEFAULT_POS_Y; obj_snake.Head_pre_pos = obj_snake.Head_cur_pos; obj_snake.Head_color = RED; obj_snake.next = NULL; obj_snake.Dead = FALS;void Init_obj_egg() obj_egg.egg_pos.p_X = 0; obj_egg.egg_pos.p_Y = 0; obj_egg.egg_color = BLACK;void RegistryGraphicMode() int Driver, Mode; detectgraph(&Driver, &Mode); initgraph(&Driver, &Mode,); void Draw_FrameInWindow(int f_ul_X, int f_ul_Y, int f_dr_X, int f_dr_Y, int W, int H) int i, x, y; rectangle(f_ul_X - 1, f_ul_Y - 1, f_dr_X + 1, f_dr_Y + 1); setfillstyle(SOLID_FILL, BLACK); bar(f_ul_X, f_ul_Y, f_dr_X, f_dr_Y); setcolor(DARKGRAY); for(i = 1;i W;i+) x = f_ul_X + i * BOX_SIZE; line(x, f_ul_Y, x, f_dr_Y); for(i = 1;i next) if(T = FALS) color = BLACK; else color = p-color; setfillstyle(SOLID_FILL, color); Ax = ul_X + BOX_SIZE * p-cur_pos.p_Y + 1; Ay = ul_Y + BOX_SIZE * p-cur_pos.p_X + 1; Bx = ul_X + BOX_SIZE * (p-cur_pos.p_Y + 1) - 1; By = ul_Y + BOX_SIZE * (p-cur_pos.p_X + 1) - 1; bar(Ax, Ay, Bx, By); void draw_GS_GO_Surface(Type_GAMESTATUS T) char text_buffer40; settextjustify(LEFT_TEXT, TOP_TEXT); switch(T) case ON_PALYING: settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 4); setcolor(LIGHTCYAN); strcpy(text_buffer, ITEM - 2: Game.Greed Snake); moveto(100, 100); outtext(text_buffer); settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 1); setcolor(YELLOW); strcpy(text_buffer, Please press any key to continue .); moveto(150, 300); outtext(text_buffer); break; case GAMEOVER: settextstyle(GOTHIC_FONT, HORIZ_DIR, 8); setcolor(RED); strcpy(text_buffer, GAME OVER); moveto(70, 80); outtext(text_buffer); settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 2); setcolor(YELLOW); strcpy(text_buffer, Sorry!); moveto(160, 320); outtext(text_buffer); sprintf(text_buffer, Total Score: %d, get_ScoreTotal(); moveto(240, 320); outtext(text_buffer); sprintf(text_buffer, Speed Level: %d, get_SpeedLevel(); moveto(240, 350); outtext(text_buffer); break; case WINNER: settextstyle(GOTHIC_FONT, HORIZ_DIR, 8); setcolor(RED); strcpy(text_buffer, YOU WIN !); moveto(80, 80); outtext(text_buffer); settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 2); setcolor(YELLOW); strcpy(text_buffer, Congratulation!); moveto(120, 320); outtext(text_buffer); sprintf(text_buffer, Total Score: %d, get_ScoreTotal(); moveto(280, 320); outtext(text_buffer); sprintf(text_buffer, Speed Level: %d, get_SpeedLevel(); moveto(280, 350); outtext(text_buffer); break; default: break; void set_SH_Pre_Pos(int T) int H_pX, H_pY; H_pX = obj_snake.Head_cur_pos.p_X; H_pY = obj_snake.Head_cur_pos.p_Y; switch(T) case SMD_UP: if(H_pX - 1) = FRAME_UNIT_HEIGHT | findPointInSnake(H_pX + 1, H_pY) = TRUTH) set_SnakeDead(TRUTH); return; obj_snake.Head_pre_pos.p_X = H_pX + 1; obj_snake.Head_pre_pos.p_Y = H_pY; break; case SMD_RIGHT: if(H_pY + 1) = FRAME_UNIT_WIDTH | findPointInSnake(H_pX, H_pY + 1) = TRUTH) set_SnakeDead(TRUTH); return; obj_snake.Head_pre_pos.p_X = H_pX; obj_snake.Head_pre_pos.p_Y = H_pY + 1; break; case SMD_LEFT: if(H_pY - 1) 0 | findPointInSnake(H_pX, H_pY - 1) = TRUTH) set_SnakeDead(TRUTH); return; obj_snake.Head_pre_pos.p_X = H_pX; obj_snake.Head_pre_pos.p_Y = H_pY - 1; break; Boolean set_SHD(int T) if(get_SHD() = T | get_SHOD(get_SHD() = T) return(FALS); obj_snake.direction = T; return(TRUTH);void process_SnakeNode(Boolean eated) int i; POS_in_Fram temp1_cur_pos, temp2_cur_pos; LSNode p, q; temp1_cur_pos = obj_snake.Head_cur_pos; obj_snake.Head_cur_pos = obj_snake.Head_pre_pos; p = obj_snake.next; for(i = 1;i cur_pos; p-cur_pos = temp1_cur_pos; temp1_cur_pos = temp2_cur_pos; p = p-next; if(eated = TRUTH) q = (LSNode)malloc(sizeof(SNode); q-color = obj_egg.egg_color; q-cur_pos = temp1_cur_pos; if(obj_snake.len = 1) q-next = obj_snake.next; obj_snake.next = q; obj_snake.len+; return; for(p = obj_snake.next;p-next != NULL;p = p-next); q-next = p-next; p-next = q; obj_snake.len+; void generate_Egg() int temp_pX, temp_pY, temp_color; draw_egg(FALS); temp_pX = random(FRAME_UNIT_HEIGHT); temp_pY = random(FRAME_UNIT_WIDTH); while(findPointInSnake(temp_pX, temp_pY) = TRUTH) temp_pX = random(FRAME_UNIT_HEIGHT); temp_pY = random(FRAME_UNIT_WIDTH); obj_egg.egg_pos.p_X = temp_pX; obj_egg.egg_pos.p_Y = temp_pY; for(temp_color = random(16);temp_color = BLACK;temp_color = random(16); obj_egg.egg_color = temp_color; draw_egg(TRUTH); set_Message_Event(NO_EVENT); void move_To(int T, Boolean step) if(step = FALS) if(set_SHD(T) = FALS) goto Skip_1; set_SH_Pre_Pos(T); if(Is_SnakeDead() = TRUTH) goto Skip_2; if(Is_SnakEating() = TRUTH) Mapped_Draw(FALS); process_SnakeNode(TRUTH); Mapped_Draw(TRUTH); draw_ScoreTotal(); setSpeedLevel(get_ScoreTotal(); goto Skip_3; else Mapped_Draw(FALS); process_SnakeNode(FALS); Mapped_Draw(TRUTH); goto Skip_1; Skip_1: set_Message_Event(NO_EVENT); return; Skip_2: set_Message_Event(ESC_OUT); return; Skip_3: set_Message_Event(GENERAT_EGG); return;void pause_game() while(bioskey(0) 8) != GAME_STOP); set_Message_Event(NO_EVENT);void process_GameStat(Type_GAMESTATUS T) LSNode p, q; switch(T) case ON_PALYING: draw_GS_GO_Surface(ON_PALYING); break; case WINNER: cleardevice(); draw_GS_GO_Surface(WINNER); getch(); break; case GAMEOVER: cleardevice(); draw_GS_GO_Surface(GAMEOVER); getch(); break; default: break; p = obj_snake.next; while(p != NULL) q = p-next; free(p); p = q; Boolean IsWinner() if(get_SpeedLevel() = 4) return(TRUTH); else return(FALS);Boolean IsGameOver() if(get_Message_Event() = ESC_OUT) return(TRUTH); else return(FALS);Boolean IsTimeOut() static long temp, sourc; temp = biostime(0, sourc); if(temp - sourc) 8); return; voi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论