老游戏《贪吃蛇》-刚刚出炉的?
c语言吧
全部回复
仅看楼主
level 6
hack绝望 楼主
[汗]
没发到????
2009年12月09日 16点12分 1
level 6
hack绝望 楼主
[汗]太长?审核?
2009年12月09日 16点12分 2
level 6
hack绝望 楼主
/*
在WIN-TC编译通过
编译时间:2009-12-10
作品名:贪吃蛇
编译人:FENGZI
*/
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#include<stdlib.h>
#include<bios.h>
/*键值表*/
#define ESC 0x11b
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ENTER 0x1c0d
#define SPACE 0x3920
/*游戏宽度*/
#define L_num_x 26
#define L_num_y 17
#define SNAKE_NUM (L_num_x*L_num_y)
#define START_X   60
#define START_Y   40
/*颜色*/
      /*背景*/
#define CLO_back BLACK
      /*地图*/
#define CLO_map YELLOW
     /*snake*/
#define CLO_snake RED
     /*食物*/
#define CLO_food GREEN
/*游戏速度*/
#define GAME_SPEEH    80000
/*游戏数据*/
int game[L_num_x][L_num_y]={0};
int snake_num;
int snakelife=1; /*1为生存,0为死亡*/
struct SNAKE
{
int x;
int y;
}snake[SNAKE_NUM];
int food=0;
long score=0;     /*分数*/
float beishu=1;   /*游戏速度设置数据*/
/*函数声明*/
void setgraph(void);    /*设置图形函数*/
void setgamedata(void);      /*设置游戏数据*/
void drawgamepicture(void);    /*画游戏背景框图*/
void draw_key(int x,int y,int color);   /*画格子函数*/
void gamemain(void);    /*游戏主函数*/
void randfood(void);      /*食物生成函数*/
void movesnake(int x,int y);    /*snake 移动函数*/
void chacksnake(void);         /*检查snake是否撞墙函数*/
void printfscore(void);        /*分数输出函数*/
void gameover(void);           /*游戏结束函数*/
/**/
/*设置图形函数*/
void setgraph(void)
{
   int gd=DETECT,gm;
   registerbgidriver(EGAVGA_driver);
   initgraph(&gd,&gm,"");
}
/*设置游戏数据*/
void setgamedata(void)
{int i,j;
     /*设置地图*/
for(i=0;i<L_num_x;i++)
   for(j=0;j<L_num_y;j++)
       {
       if(i==0 || j==0 || i==L_num_x-1 || j==L_num_y-1)
            game[i][j]=-1;
       else
            game[i][j]=0;
       }
/*snake初始化,默认3节,从snake[1]开始,便于理解*/
snake_num=3;
for(i=1;i<=3;i++)
      {snake[i].x=L_num_x/2+i-5;
       snake[i].y=L_num_y/2;
       draw_key(snake[i].x,snake[i].y,CLO_snake);
      }
}

2009年12月09日 16点12分 3
level 6
hack绝望 楼主
/*画地图*/
void drawgamepicture(void)
{
int i,j;
setbkcolor(CLO_back);
setcolor(RED);
for(i=0;i<5;i++)
   {
    rectangle(i*10,i*10,639-i*10,479-i*10);
   }
for(i=0;i<L_num_x;i++)
   for(j=0;j<L_num_y;j++)
      {
      if(game[i][j]==-1)
         {
         draw_key(i,j,CLO_map);
         }
      }
      outtextxy(100,400,"QQ:7695600XX BY:FENGZI ENTER(SPACE|ENTER) TO START ");
      outtextxy(100,410,"UP=UPKEY DOWN=DOWNKEY LEFT=LEFTKEY RIGHT=RIGHTKEY");
      outtextxy(160,420,"PAUSE=SPACE | ENTER    QUIT=ESC");
}
/*画格子函数*/
void draw_key(int x,int y,int color)
{ setcolor(color);
    rectangle(
                x*20+START_X+1,
                y*20+START_Y+1,
               (x+1)*20+START_X-1,
               (y+1)*20+START_Y-1
               );
rectangle(
               x*20+START_X+2,
               y*20+START_Y+2,
               (x+1)*20+START_X-2,
               (y+1)*20+START_Y-2
               );
}
/*游戏主函数*/
void gamemain(void)
{
   long number=1;
   int key;
   int pause=0;
   int x=1,y=0;
   while(snakelife)
     {
       if(food==0)   /*set food*/
       randfood();
       if(bioskey(1))
         { /*if*/
         key=bioskey(0);
         switch(key)
            {
           case UP:
                 {
                 if(snake[snake_num].x+(0)   != snake[snake_num-1].x   &&

2009年12月09日 16点12分 4
level 6
hack绝望 楼主
                    snake[snake_num].y+(-1) != snake[snake_num-1].y)
                 {x=0;y=-1;}break;/*这是判断是不是往回走的语句,重要*/
                 }
           case DOWN:
                 {
                 if(snake[snake_num].x+(0) != snake[snake_num-1].x   &&
                    snake[snake_num].y+(1) != snake[snake_num-1].y)
                 {x=0;y=1;}break;
                 }
           case RIGHT:
                 {
                 if(snake[snake_num].x+(1) != snake[snake_num-1].x   &&
                    snake[snake_num].y+(0) != snake[snake_num-1].y)
                 {x=1;y=0;}break;
                 }
           case LEFT:
                 {
                 if(snake[snake_num].x+(-1) != snake[snake_num-1].x   &&
                    snake[snake_num].y+(0)   != snake[snake_num-1].y)
                 {x=-1;y=0;}break;
                 }
           case ESC:
                 {
                 snakelife=0;
                 break;
                 }
           case ENTER:;
           case SPACE:
                {
                pause=(pause+1)%2;
                break;
                }
            }
         }/*endif*/
          
        if(pause==1)
             number++;
          if(number%((long)(GAME_SPEEH / beishu))==0)   /*速度控制*/
           {
            number=0;
            movesnake(x,y);     /*MOVE SNAKE*/
            chacksnake();
           }
   }/*end while*/
gameover();
}
2009年12月09日 16点12分 5
level 6
hack绝望 楼主
/*分数输出*/
void printfscore(void)
{
int i;
char s[40];
sprintf(s,"SCORE:%ld   SPEEH:%.2f",score,beishu);
setcolor(CLO_back);
for(i=0;i<10;i++)
   rectangle(190+i,385+i,400-i,397-i);
setcolor(GREEN);
outtextxy(200,390,s);
}
    /*看snake有没有撞墙或撞自己*/
void chacksnake(void)
{
   int i,j;
   int x,y;
   x=snake[snake_num].x;
   y=snake[snake_num].y;
   if(game[x][y]==-1)    /*-1是墙*/
        snakelife=0;
   for(i=snake_num-3;i>0;i--)
        {
        if(snake[i].x==x && snake[i].y==y)
          { snakelife=0;
           break;
           }
        }
}
/*随机生成食物*/
void randfood(void)
{
int i,j;
int x,y,ok=1;
while(ok)
{
x=rand()%(L_num_x-2)+1;
y=rand()%(L_num_y-2)+1;
ok=0;
for(i=1;i<=snake_num;i++)
    {
    if(snake[i].x==x && snake[i].y==y)
         ok=1;
    }
}
draw_key(x,y,CLO_food);
game[x][y]=2;
food=1;
}
/*snake的移动*/
void movesnake(int x,int y)
{
   int i,j;
   if(game[snake[snake_num].x+x][snake[snake_num].y+y]==2)     /* 前面有食物*/
      {
      snake_num++;
      snake[snake_num].x=snake[snake_num-1].x+x;
      snake[snake_num].y=snake[snake_num-1].y+y;
      game[snake[snake_num].x][snake[snake_num].y]=0;
      food=0;
      draw_key(snake[snake_num].x,snake[snake_num].y,CLO_snake);
      if(snake_num%15==0)
         {
         beishu=beishu*1.1;
         }
      score=score+100;
      printfscore();
      /*有食物*/
      }
    else
                       /*前面没食物*/
      {
       /*判断不是向后走*/
         for(i=1;i<snake_num;i++)
             {
             if(i==1)
                {
                draw_key(snake[i].x,snake[i].y,CLO_back);
                }
             snake[i].x=snake[i+1].x;
             snake[i].y=snake[i+1].y;
             }
         snake[snake_num].x=snake[snake_num].x+x;
         snake[snake_num].y=snake[snake_num].y+y;
         draw_key(snake[snake_num].x,snake[snake_num].y,CLO_snake);
      }
}
/*game over */
void gameover(void)
{
cleardevice();
setcolor(RED);
outtextxy(250,200,"GAME OVER !");
getch();
}
int main()
{
srand(time(NULL));
setgraph();
setgamedata();
drawgamepicture();
gamemain();
closegraph();
return(0);
}

2009年12月09日 16点12分 6
level 6
hack绝望 楼主
[汗]
好像发多了……
算了……
2009年12月09日 16点12分 7
level 6
hack绝望 楼主
有谁的吃到一万分,游戏速度可是会逐渐加快的哦[瞌睡]
2009年12月09日 17点12分 8
level 6
hack绝望 楼主
/*
在WIN-TC编译通过
编译时间:2009-12-10
作品名:贪吃蛇
编译人:FENGZI
*/
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#include<stdlib.h>
#include<bios.h>
/*键值表*/
#define ESC 0x11b
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ENTER 0x1c0d
#define SPACE 0x3920
/*游戏宽度*/
#define L_num_x 26
#define L_num_y 17
#define SNAKE_NUM (L_num_x*L_num_y)
#define START_X   60
#define START_Y   40
/*颜色*/
      /*背景*/
#define CLO_back BLACK
      /*地图*/
#define CLO_map YELLOW
     /*snake*/
#define CLO_snake RED
     /*食物*/
#define CLO_food GREEN
/*游戏速度*/
#define GAME_SPEEH    80000
/*游戏数据*/
int game[L_num_x][L_num_y]={0};
int snake_num;
int snakelife=1; /*1为生存,0为死亡*/
struct SNAKE
{
int x;
int y;
}snake[SNAKE_NUM];
int food=0;
long score=0;     /*分数*/
float beishu=1;   /*游戏速度设置数据*/
/*函数声明*/
void setgraph(void);    /*设置图形函数*/
void setgamedata(void);      /*设置游戏数据*/
void drawgamepicture(void);    /*画游戏背景框图*/
void draw_key(int x,int y,int color);   /*画格子函数*/
void gamemain(void);    /*游戏主函数*/
void randfood(void);      /*食物生成函数*/
void movesnake(int x,int y);    /*snake 移动函数*/
void chacksnake(void);         /*检查snake是否撞墙函数*/
void printfscore(void);        /*分数输出函数*/
void gameover(void);           /*游戏结束函数*/
/**/
/*设置图形函数*/
void setgraph(void)
{
   int gd=DETECT,gm;
   registerbgidriver(EGAVGA_driver);
   initgraph(&gd,&gm,"");
}
/*设置游戏数据*/
void setgamedata(void)
{int i,j;
     /*设置地图*/
for(i=0;i<L_num_x;i++)
   for(j=0;j<L_num_y;j++)
       {
       if(i==0 || j==0 || i==L_num_x-1 || j==L_num_y-1)
            game[i][j]=-1;
       else
            game[i][j]=0;
       }
/*snake初始化,默认3节,从snake[1]开始,便于理解*/
snake_num=3;
for(i=1;i<=3;i++)
      {snake[i].x=L_num_x/2+i-5;
       snake[i].y=L_num_y/2;
       draw_key(snake[i].x,snake[i].y,CLO_snake);
      }

2009年12月09日 19点12分 9
level 6
hack绝望 楼主
}
/*画地图*/
void drawgamepicture(void)
{
int i,j;
setbkcolor(CLO_back);
setcolor(RED);
for(i=0;i<5;i++)
   {
    rectangle(i*10,i*10,639-i*10,479-i*10);
   }
for(i=0;i<L_num_x;i++)
   for(j=0;j<L_num_y;j++)
      {
      if(game[i][j]==-1)
         {
         draw_key(i,j,CLO_map);
         }
      }
      outtextxy(100,400,"QQ:7695600XX BY:FENGZI ENTER(SPACE|ENTER) TO START ");
      outtextxy(100,410,"UP=UPKEY DOWN=DOWNKEY LEFT=LEFTKEY RIGHT=RIGHTKEY");
      outtextxy(160,420,"PAUSE=SPACE | ENTER    QUIT=ESC");
}
/*画格子函数*/
void draw_key(int x,int y,int color)
{ setcolor(color);
    rectangle(
                x*20+START_X+1,
                y*20+START_Y+1,
               (x+1)*20+START_X-1,
               (y+1)*20+START_Y-1
               );
rectangle(
               x*20+START_X+2,
               y*20+START_Y+2,
               (x+1)*20+START_X-2,
               (y+1)*20+START_Y-2
               );
}
/*游戏主函数*/
void gamemain(void)
{
   long number=1;
   int key;
   int pause=0;
   int x=1,y=0;
   while(snakelife)
     {
       if(food==0)   /*set food*/
       randfood();
       if(bioskey(1))
         { /*if*/
         key=bioskey(0);
         switch(key)
            {
           case UP:
                 {
                 if(snake[snake_num].x+(0)   != snake[snake_num-1].x   &&

2009年12月09日 19点12分 10
level 6
hack绝望 楼主
                    snake[snake_num].y+(-1) != snake[snake_num-1].y)
                 {x=0;y=-1;}break;/*这是判断是不是往回走的语句,重要*/
                 }
           case DOWN:
                 {
                 if(snake[snake_num].x+(0) != snake[snake_num-1].x   &&
                    snake[snake_num].y+(1) != snake[snake_num-1].y)
                 {x=0;y=1;}break;
                 }
           case RIGHT:
                 {
                 if(snake[snake_num].x+(1) != snake[snake_num-1].x   &&
                    snake[snake_num].y+(0) != snake[snake_num-1].y)
                 {x=1;y=0;}break;
                 }
           case LEFT:
                 {
                 if(snake[snake_num].x+(-1) != snake[snake_num-1].x   &&
                    snake[snake_num].y+(0)   != snake[snake_num-1].y)
                 {x=-1;y=0;}break;
                 }
           case ESC:
                 {
                 snakelife=0;
                 break;
                 }
           case ENTER:;
           case SPACE:
                {
                pause=(pause+1)%2;
                break;
                }
            }
         }/*endif*/
          
        if(pause==1)
             number++;
          if(number%((long)(GAME_SPEEH / beishu))==0)   /*速度控制*/
           {
            number=0;
            movesnake(x,y);     /*MOVE SNAKE*/
            chacksnake();
           }
   }/*end while*/
gameover();
}

2009年12月09日 19点12分 11
1