贪吃蛇正式版

学术版

@[封癫](/space/show?uid=25815) ###**\_能把2048代码粘一下吗\_**
by 引领天下 @ 2017-06-13 17:35:46


@[引领天下](/space/show?uid=39863) 我没打2048啊 我是在逛学术版的时候看见某个人在学术版发帖说自己的2048 我才这么搞的 而且之前那个2048巨难看 虽然算法很%
by 封癫 @ 2017-06-13 17:47:29


@[绝胜烟柳](/space/show?uid=46287) 要用windows.h 这是句柄 不加头文件怎么行
by 封癫 @ 2017-06-13 17:48:20


这个判方向丑的一匹还贼长 我学了广搜之后就这么写 ```cpp switch(dir){ case 'w':{ x=0;y=-1;break; } case 'a':{ x=-1;y=0;break; } case 's':{ x=0;y=1;break; } case 'd':{ x=1;y=0;break; } } pos.X+=x; pos.Y+=y;
by 封癫 @ 2017-06-13 17:52:06


@[封癫](/space/show?uid=25815) 我玩了,确实6
by zht467 @ 2017-06-13 18:27:06


@[封癫](/space/show?uid=25815) 恩,怎么玩啊,只能看它一头撞上去,然后game over。。。。。我是用电脑玩的。。。应该加一个控制说明啊
by 绝胜烟柳 @ 2017-06-13 20:57:55


###**@Microsoft**\_ ###**@封癫** # 看我的代码(贪吃蛇) ```cpp #include <stdio.h> #include <iostream> #include <windows.h> #include <conio.h> #include <time.h> #include <stdlib.h> using namespace std; const int H = 12; //地图的高 const int L = 21; //地图的长 char GameMap[H][L]; //游戏地图 int key; //按键保存 int sum = 1, over = 0; //蛇的长度, 游戏结束(自吃或碰墙) int dx[4] = {0, 0, -1, 1}; //左、右、上、下的方向 int dy[4] = {-1, 1, 0, 0}; void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) { HANDLE hCon=GetStdHandle(STD\_OUTPUT\_HANDLE); SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); } struct Snake //蛇的每个节点的数据类型 { int x, y; //左边位置 int now; //保存当前节点的方向, 0,1,2,3分别为左右上下 }Snake[H\*L]; const char Shead = '@'; //蛇头 const char Sbody = '#'; //蛇身 const char Sfood = '\*'; //食物 const char Snode = '.'; //'.'在地图上标示为空 void Initial(); //地图的初始化 void Create\_Food(); //在地图上随机产生食物 void Show(); //刷新显示地图 void Button(); //取出按键,并判断方向 void Move(); //蛇的移动 void Check\_Border(); //检查蛇头是否越界 void Check\_Head(int x, int y); //检查蛇头移动后的位置情况 int main() { Initial(); Show(); return 0; } void Initial() //地图的初始化 { printf("\n\n\n\n\n\t\t按回车键开始程序"); getchar(); system("cls"); int iiii; printf("\n\n\n\n\n\t\t"); printf("●玩命加载中〉"); for(iiii=0; iiii<=100; iiii++) { SetColor(iiii%7+8,0); printf("%3d",iiii); SetColor(15,0); printf(" %%"); SetColor(iiii%7+8,0); printf(" Written by Ekko"); Sleep(10); printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); } for(iiii=0;iiii<=20;iiii++) { SetColor(iiii%7+8,0); printf("%3d",iiii\*5); SetColor(15,0); printf(" %%"); SetColor(iiii%7+8,0); printf(" 正在读取作者QQ......"); Sleep(50); printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); } Sleep(100); printf("\n\n\n\n\n\t\t"); cout<<"qq:1959066412"; Sleep(200); system("cls"); int i, j; int hx, hy; system("title 贪吃蛇"); //控制台的标题 memset(GameMap, '.', sizeof(GameMap)); //初始化地图全部为空'.' system("cls"); srand(time(0)); //随机种子 hx = rand()%H; //产生蛇头 hy = rand()%L; GameMap[hx][hy] = Shead; Snake[0].x = hx; Snake[0].y = hy; Snake[0].now = -1; Create\_Food(); //随机产生食物 for(i = 0; i < H; i++) //地图显示 { for(j = 0; j < L; j++) printf("%c", GameMap[i][j]); printf("\n"); } printf("\n小小C语言贪吃蛇\n"); printf("按任意方向键开始游戏\n"); getch(); //先接受一个按键,使蛇开始往该方向走 Button(); //取出按键,并判断方向 } void Create\_Food() //在地图上随机产生食物 { int fx, fy; while(1) { fx = rand()%H; fy = rand()%L; if(GameMap[fx][fy] == '.') //不能出现在蛇所占有的位置 { GameMap[fx][fy] = Sfood; break; } } } void Show() //刷新显示地图 { int i, j; while(1) { Sleep(100); //延迟半秒(1000为1s),即每半秒刷新一次地图 Button(); //先判断按键在移动 Move(); if(over) //自吃或碰墙即游戏结束 { printf("\n**游戏结束**\n"); printf(" >\_<\n"); SetColor(14,0); printf("\n\t\t\t● 谢 谢 您 的 使 用 !\n\n\t\t\t● 作 者: 引领天下\n\n\t\t\t● I D 39863\n\n\t\t\t● 代 码 原 创,版 权 所 有 ●"); getchar(); break; } system("cls"); //清空地图再显示刷新吼的地图 for(i = 0; i < H; i++) { for(j = 0; j < L; j++) printf("%c", GameMap[i][j]); printf("\n"); } printf("\n小小C语言贪吃蛇\n"); printf("按任意方向键开始游戏\n"); } } void Button() //取出按键,并判断方向 { if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0 { while(kbhit() != 0) //可能存在多个按键,要全部取完,以最后一个为主 key = getch(); //将按键从控制台中取出并保存到key中 switch(key) { //左 case 75: Snake[0].now = 0; break; //右 case 77: Snake[0].now = 1; break; //上 case 72: Snake[0].now = 2; break; //下 case 80: Snake[0].now = 3; break; } } } void Move() //蛇的移动 { int i, x, y; int t = sum; //保存当前蛇的长度 //记录当前蛇头的位置,并设置为空,蛇头先移动 x = Snake[0].x; y = Snake[0].y; GameMap[x][y] = '.'; Snake[0].x = Snake[0].x + dx[ Snake[0].now ]; Snake[0].y = Snake[0].y + dy[ Snake[0].now ]; Check\_Border(); //蛇头是否越界 Check\_Head(x, y); //蛇头移动后的位置情况,参数为: 蛇头的开始位置 if(sum == t) //未吃到食物即蛇身移动哦 for(i = 1; i < sum; i++) //要从蛇…
by 引领天下 @ 2017-06-14 16:59:07


```cpp for(i = 1; i < sum; i++) //要从蛇尾节点向前移动哦,前一个节点作为参照 { if(i == 1) //尾节点设置为空再移动 GameMap[ Snake[i].x ][ Snake[i].y ] = '.'; if(i == sum-1) //为蛇头后面的蛇身节点,特殊处理 { Snake[i].x = x; Snake[i].y = y; Snake[i].now = Snake[0].now; } else //其他蛇身即走到前一个蛇身位置 { Snake[i].x = Snake[i+1].x; Snake[i].y = Snake[i+1].y; Snake[i].now = Snake[i+1].now; } GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身 } } void Check_Border() //检查蛇头是否越界 { if(Snake[0].x < 0 || Snake[0].x >= H || Snake[0].y < 0 || Snake[0].y >= L) over = 1; } void Check_Head(int x, int y) //检查蛇头移动后的位置情况 { if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.') //为空 GameMap[ Snake[0].x ][ Snake[0].y ] = '@'; else if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*') //为食物 { GameMap[ Snake[0].x ][ Snake[0].y ] = '@'; Snake[sum].x = x; //新增加的蛇身为蛇头后面的那个 Snake[sum].y = y; Snake[sum].now = Snake[0].now; GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#'; sum++; Create_Food(); //食物吃完了马上再产生一个食物 } else over = 1; } ```
by 引领天下 @ 2017-06-14 17:00:23


# @[Microsoft](/space/show?uid=19437) # @封癫
by 引领天下 @ 2017-06-14 17:20:34


@[引领天下](/space/show?uid=39863) 挺好的 不过节奏稍微快了一点 你是刚写的吗
by 封癫 @ 2017-06-14 19:54:30


上一页 | 下一页