贪吃蛇C语言代码(window版本)
来源:互联网 发布:淘宝发布宝贝 压缩包 编辑:程序博客网 时间:2024/06/06 00:57
应李老先生要求,特熬夜写此篇贪吃蛇C语言代码,代码如下:
#include <stdio.h>#include <conio.h>#include <windows.h>#include <time.h>#include <stdlib.h>// N代表长,M代表宽,其它宏定义代表对应的特定物体的字符表示。 #define N 20#define M 65#define food '$'#define head 'O'#define body 'X'#define Wall '*'#define Empty ' 'int snake[1000][2] = {}; //二维数组,代表蛇每个点坐标的x, y (0代表 x, 1代表 y)。char map[N][M] = {}; //地图大小。 enum direction{ up, down, left, right } dir; //枚举型定义方向, 同时定义全局变量 dir 代表蛇的方向。int score; //分数,吃了多少个食物。int length; //蛇的长度。 int food_x, food_y;//食物的位置。 int HEAD_X, HEAD_Y;//蛇头的位置。 void initial();//初始化函数。void creatFood();//制造食物函数 void ifkey();//判断是否有按键行为,判断是否有转向。 void printMap();//输出整张地图面貌,包括蛇和食物。 int move();//蛇移动后的各个反应,如果死了就返回 0, 如果还活着,就返回 1。void setoutputposition();//特殊说明:这里不采用清屏函数, 采用直接覆盖原图的效果,同时隐藏光标。 void over();//游戏结束 int main(){ initial(); while (1) { setoutputposition(); ifkey(); if (!move()) break; printMap(); Sleep(100); //调速,数值越大速度越慢 } over();} //制造新食物 void creatFood(){ score++; //以当前时间作为随机数种子。 srand((unsigned)time(NULL)); while (map[food_x][food_y] != Empty) { food_x = rand() % (N-1) + 1; food_y = rand() % (M-1) + 1; } map[food_x][food_y] = food;} //初始化函数。 void initial(){ //两层for循环初始化地图。 int i, j; for (i = 0; i < N; i++) for (j = 0; j < M; j++){ if (i == 0 || j == 0 || i == N-1 || j == M-1) map[i][j] = Wall; else map[i][j] = Empty; } creatFood(); score = 0; length = 2; snake[0][0] = 1, snake[0][1] = 1; snake[1][0] = 1, snake[1][1] = 2; map[1][1] = body, map[1][2] = head; HEAD_X = snake[1][0], HEAD_Y = snake[1][1]; //初始化蛇的前两节身体,snake[1]是头,snake[0]是尾。 dir = right; //方向初始化为向右。 } //判断是否有按键行为,判断是否有转向。 void ifkey() { char k1, k2; if(kbhit() != 0){ k1 = getch(); if(k1 == -32){ k2 = getch(); if(k2 == 72 && dir != down) dir = up; if(k2 == 80 && dir != up) dir = down; if(k2 == 75 && dir != right) dir = left; if(k2 == 77 && dir != left) dir = right; } }}//输出整张地图面貌,包括蛇和食物。 void printMap() { printf("当前分数: %d\n", score); int i, j; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) printf("%c", map[i][j]); printf("\n"); }}//蛇移动后的各个反应,如果死了就返回 0, 如果还活着,就返回 1。 int move() { //记住,移动了一步,无论如何,原来的头的位置肯定变成了身体。 map[HEAD_X][HEAD_Y] = body; //由方向决定新的头的位置。 if(dir == up) HEAD_X--; else if(dir == down) HEAD_X++; else if(dir == left) HEAD_Y--; else if(dir == right) HEAD_Y++; //吃到食物的话. if(map[HEAD_X][HEAD_Y] == food) { length++; snake[length-1][0] = HEAD_X, snake[length-1][1] = HEAD_Y; map[HEAD_X][HEAD_Y] = head; creatFood(); return 1; } else { //没有吃到食物的话,原来尾巴的位置变为空格。 map[snake[0][0]][snake[0][1]] = Empty; if(map[HEAD_X][HEAD_Y] == Empty) { int i; for(i = 0; i < length-1; i++) { snake[i][0] = snake[i+1][0]; snake[i][1] = snake[i+1][1]; } snake[length-1][0] = HEAD_X, snake[length-1][1] = HEAD_Y; map[HEAD_X][HEAD_Y] = head; return 1; } return 0; }}//这里使用了一些 window API,大致知道功能即可,可以忽略。 void setoutputposition() { //设置光标位置为( 0, 0 )。 COORD t = { 0, 0 }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), t); //隐藏光标。 CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);}//游戏结束 void over(){ system("cls"); //清屏函数。 printf("game over\n");}
源代码下载地址如下:
http://download.csdn.net/download/csm201314/9920727
阅读全文
0 0
- 贪吃蛇C语言代码(window版本)
- C语言贪吃蛇代码
- C语言贪吃蛇代码
- C语言贪吃蛇代码
- 贪吃蛇C语言代码
- 贪吃蛇C语言代码
- 贪吃蛇小游戏(C语言版本)
- c语言版本双人贪吃蛇
- 用C语言编写贪吃蛇代码(难度可选)
- C语言课程设计 贪吃蛇代码
- C语言贪吃蛇70行代码
- 贪吃蛇--C语言百行代码
- 贪吃蛇完整版(基于window消息机制的C语言)
- C语言贪吃蛇
- c语言“贪吃蛇”
- c语言贪吃蛇
- C语言:贪吃蛇
- C语言 贪吃蛇
- Swift3豆瓣电台
- STM32 Tutorial: #4 Using STM32Duino
- hadoop核心逻辑shuffle代码分析-map端
- spark shuffle内在原理说明
- springMvc和struts2区别
- 贪吃蛇C语言代码(window版本)
- Linux学习笔记之七
- 蓝桥杯练习题 BEGIN-1 A+B问题
- matlab lsqnonlin fsolve的区别
- Webpack相关网址
- (二)Angular4 英雄征途HeroConquest-编辑英雄
- 利用Github搭建个人博客之绑定域名
- 集成Eclipse和Tomcat时找不到server选项
- Java Socket应用---慕课网笔记