android贪吃蛇代码极客学院,新手发贪吃蛇代码(共200行)

附件下载地址:http://download.csdn.net/source/2649214

半个月前用C语言写了一个贪吃蛇,包括用菜单和用字符做出的一些“界面”共用了五百多行代码(很臃肿是吧?第一次难免写得不好)。前几天将它删简去了菜单,选择难度和暂停界面等功能,精简到了二百行(见笑了)。里面的一个pcc32.h是在网上找的一个控制台增加函数。现在发出来与和我一样的新手共享,虚心请教,欢迎大家批评指点。

另外不知谁能告诉我这个怎么上传附件和插入本地图片???

在Dev-C++上编译通过。

#include 

#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++

printf("■");

while(++y

{

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

}

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;

}

21 个解决方案

#1

等下跑跑看结果如何。

#2

把 pcc32.h也提供出来啊。

#3

good,跑下先

#4

pcc32.h

。。要给就给全嘛,自己去找.h不一定对的上号

#5

没有pcc32.h啊

#6

楼主太谦虚了,写的出这个算的上半个高手了,我等还是写不出,那个.h我没听说过,望楼主也共享下

#7

围观~~

#8

。h文件

#9

回复楼上几位,我在帖子里也提问了,不知道在帖子里怎么上传附件,希望大家能说明一下。不过,我已将它传到网盘上了,贴上我的网盘共享地址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

#10

上传到论坛上了,不过不知道怎么插入到帖子里。

#11

宏定义over的那个貌似不用加上,贴错了,汗。这次的代码是改过的,提高了一下效率,不过忘了把其中一个宏定义去掉了。

#12

该回复于2010-08-27 15:33:16被版主删除

#13

向楼主请教怎么把代码粘贴到帖子里?

#14

帮顶

#15

不错,有前途

#16

厉害的啊

#17

可是谁能回答我下我的问题,这里到底怎么插入附件的啊?

#18

引用 13 楼 qweworld 的回复:

向楼主请教怎么把代码粘贴到帖子里?

复制,粘贴。想要好看一点的化就点格式工具的那个#按钮,选相应的语言高亮方式

#19

跑下先。。

楼主是好人,写得一手好代码。。

#20

有心人啊。

#21

引用 2 楼 saishow 的回复:

把 pcc32.h也提供出来啊。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

大伙儿也告诉我怎么贴上附件吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值