新手发贪吃蛇代码(共200行)

貌似掉线
博客专家认证
2010-08-26 02:42:19
附件下载地址:http://download.csdn.net/source/2649214
半个月前用C语言写了一个贪吃蛇,包括用菜单和用字符做出的一些“界面”共用了五百多行代码(很臃肿是吧?第一次难免写得不好)。前几天将它删简去了菜单,选择难度和暂停界面等功能,精简到了二百行(见笑了)。里面的一个pcc32.h是在网上找的一个控制台增加函数。现在发出来与和我一样的新手共享,虚心请教,欢迎大家批评指点。
另外不知谁能告诉我这个怎么上传附件和插入本地图片???
在Dev-C++上编译通过。
#include <stdio.h>
#include "pcc32.h"

#define FALSE 0
#define TURE 1
#define OVER 2

#define WIDTH 22
#define HEIGH 18
#define BASETIME 300

#define TIME(x) BASETIME-23*(x)

enum DIR{
LEFT,
RIGHT,
UP,
DOWN
};//定义表示方向的枚举型
struct COOR{
uint8 x;
uint8 y;
};//定义表示坐标的结构体
struct SNAKE{
uint16 length;
struct COOR body[328];
enum DIR dir;
};//定义表示蛇的结构体

struct SNAKE snake={0,{0,0},0};
struct COOR food;
uint16 score=0;

void Ready();
void Play();
void Over();
void Wall();
void InitSnake();
void InitFood();
uint8 IsOver(uint8 x, uint8 y);
uint8 InSnake(uint8 x, uint8 y);
uint8 MoveSnake();

void Ready()
{
printf("说明:\n");
printf("开始游戏前请将输入法切换成英文输入法。\n");
printf("↑↓←→分别控制蛇上下左右移动。\n");
printf("回车键暂停或继续游戏。\n");
printf("\n\n请按任意键开始游戏");
jkGetKey();
}
void Play()
{
uint8 level=1;
system("cls");
Wall();
setTextColor(YELLOW);//设置文本颜色
InitSnake();//初始化蛇
InitFood();//初始化食物
do
{
if(level<10)//计算等级
level=(snake.length+5)/10;
gotoTextPos(0,HEIGH+1);
printf("SCORE: %5u LEVEL: %u",score,level);
sleep(TIME(level));//延时
if(jkHasKey())//扫描是否有键按下
switch(jkGetKey())//获取按键信息并进行处理
{
case JK_LEFT:
if(snake.dir!=RIGHT)
snake.dir=LEFT;
break;
case JK_RIGHT:
if(snake.dir!=LEFT)
snake.dir=RIGHT;
break;
case JK_UP:
if(snake.dir!=DOWN)
snake.dir=UP;
break;
case JK_DOWN:
if(snake.dir!=UP)
snake.dir=DOWN;
break;
case JK_ENTER://游戏暂停
for(;jkGetKey()!=JK_ENTER;);//再次按下回车才继续游戏
break;
default:;
}
}while(MoveSnake());//移动蛇并返回是否游戏结束
}
void Over()
{//输出分数
gotoTextPos(WIDTH-10,HEIGH/2-1);
setTextColor(WHITE);
printf("Your score is:%u",score);
sleep(1500);
jkGetKey();
}
void Wall()
{//画出围墙
uint8 x=0,y=0;
setTextColor(RED_ORANGE);
gotoTextPos(0,0);
while(x++<WIDTH)
printf("■");
while(++y<HEIGH)
{
gotoTextPos(0,y);
printf("■");
gotoTextPos((WIDTH-1)*2,y);
printf("■");
}
gotoTextPos(0,HEIGH-1);
while(--x>0)
printf("■");
}
void InitFood()
{//生成食物
srand((unsigned)time(NULL));//初始化随机因子
do
{//生成食物坐标位置
food.x=rand()%(WIDTH-2)+1;
food.y=rand()%(HEIGH-2)+1;
}while(InSnake(food.x, food.y));//如与蛇身重合则重新生成
gotoTextPos(food.x*2, food.y );
printf("●");//画出食物
}
void InitSnake()
{//初始化蛇身
uint8 i=0;
snake.length=5;
snake.dir=RIGHT;//初始化方向为右
setTextColor(YELLOW);
do
{//初始化蛇身坐标并画出
snake.body[i].x=5-i;
snake.body[i].y=4;
gotoTextPos(snake.body[i].x*2,snake.body[i].y);
printf("■");
}while(++i<snake.length);
}
uint8 IsOver(uint8 x,uint8 y)//判断是否结束
{//判断是否撞到墙或咬到自身
if(InSnake(x,y)||0==x||WIDTH-1==x||0==y||HEIGH-1==y)
return TURE;
return FALSE;
}
uint8 InSnake(uint8 x, uint8 y)
{
uint8 i= snake.length;
while(i--)//判断某一坐标是否与蛇身有重合
if(snake.body[i].x==x&&snake.body[i].y==y)
return TRUE;
return FALSE;
}
uint8 MoveSnake()//移动蛇身
{
uint8 i,x=snake.body[0].x, y=snake.body[0].y;
switch(snake.dir)
{
case LEFT: --x; break;
case RIGHT: ++x; break;
case UP: --y; break;
default: ++y;
}//蛇头移动
if(x==food.x&&y==food.y)//判断是否吃到食物
{
++snake.length;//蛇长度加1
InitFood();//重新生成食物
score+=50;//加分
}
else
{//如果没有吃到食物,则将原蛇尾擦去
gotoTextPos(snake.body[snake.length-1].x*2,snake.body[snake.length-1].y);
printf(" ");
}
gotoTextPos(x*2,y);//画上蛇头
printf("■");
for(i=snake.length-1;i>0;--i)//蛇身(除蛇头外)坐标的移动
snake.body[i]=snake.body[i-1];
if(IsOver(x,y))//判断移动后是否游戏结束
return FALSE;
snake.body[i].x=x;//给蛇头赋值
snake.body[i].y=y;
return TRUE;
}
int main(void)
{
setConsoleTitle("Snake 贪吃蛇 貌似掉线 QQ群:31066229");
setCursorVisible(0);
fixConsoleSize(WIDTH*2,HEIGH+2);
Ready();
Play();
Over();
return 0;
}

...全文
720 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackboycpp 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qweworld 的回复:]

向楼主请教怎么把代码粘贴到帖子里?
[/Quote]
复制,粘贴。想要好看一点的化就点格式工具的那个#按钮,选相应的语言高亮方式
貌似掉线 2010-08-29
  • 打赏
  • 举报
回复
可是谁能回答我下我的问题,这里到底怎么插入附件的啊?
貌似掉线 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 saishow 的回复:]

把 pcc32.h也提供出来啊。
[/Quote]http://www.xun6.com/folder/8691dcb/1/%E5%8E%9F%E5%88%9BC%E7%A8%8B%E5%BA%8F%E5%8F%8A%E4%BB%A3%E7%A0%81.html
大伙儿也告诉我怎么贴上附件吧
swl82560397pq 2010-08-29
  • 打赏
  • 举报
回复
有心人啊。
wibnmo 2010-08-29
  • 打赏
  • 举报
回复
跑下先。。
楼主是好人,写得一手好代码。。
jimbeing 2010-08-27
  • 打赏
  • 举报
回复

厉害的啊
libinfei8848 2010-08-26
  • 打赏
  • 举报
回复
不错,有前途
qweworld 2010-08-26
  • 打赏
  • 举报
回复
帮顶
qweworld 2010-08-26
  • 打赏
  • 举报
回复
向楼主请教怎么把代码粘贴到帖子里?
貌似掉线 2010-08-26
  • 打赏
  • 举报
回复
宏定义over的那个貌似不用加上,贴错了,汗。这次的代码是改过的,提高了一下效率,不过忘了把其中一个宏定义去掉了。
貌似掉线 2010-08-26
  • 打赏
  • 举报
回复
上传到论坛上了,不过不知道怎么插入到帖子里。
貌似掉线 2010-08-26
  • 打赏
  • 举报
回复
回复楼上几位,我在帖子里也提问了,不知道在帖子里怎么上传附件,希望大家能说明一下。不过,我已将它传到网盘上了,贴上我的网盘共享地址http://www.xun6.com/folder/8691dcb/1/%E5%8E%9F%E5%88%9BC%E7%A8%8B%E5%BA%8F%E5%8F%8A%E4%BB%A3%E7%A0%81.html。
如果不能下载试下这个地址:www.vdisk.cn/msdiaoxian
zhh_kv 2010-08-26
  • 打赏
  • 举报
回复
。h文件
Q446512799 2010-08-26
  • 打赏
  • 举报
回复
围观~~
bobo364 2010-08-26
  • 打赏
  • 举报
回复
楼主太谦虚了,写的出这个算的上半个高手了,我等还是写不出,那个.h我没听说过,望楼主也共享下
不想低调 2010-08-26
  • 打赏
  • 举报
回复
没有pcc32.h啊
  • 打赏
  • 举报
回复
pcc32.h
。。要给就给全嘛,自己去找.h不一定对的上号
  • 打赏
  • 举报
回复
good,跑下先
saishow 2010-08-26
  • 打赏
  • 举报
回复
把 pcc32.h也提供出来啊。
saishow 2010-08-26
  • 打赏
  • 举报
回复
等下跑跑看结果如何。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧