搜索
查看: 1023|回复: 16
打印 上一主题 下一主题

[原创] 贪吃蛇直播制作【缓更】

[复制链接]
跳转到指定楼层
楼主
发表于 2016-8-12 12:47:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
刚刚看完啊哈c,突然有了点制作贪吃蛇的灵感,不知道我这能不能做出来,走过路过的都可以帮个忙哈[ps. 图片仅供参考,请以实物为准]

4d83cc525e7a1e2bd0dd139e81a839e6.png (21.17 KB, 下载次数: 42)

4d83cc525e7a1e2bd0dd139e81a839e6.png
沙发
 楼主| 发表于 2016-8-12 12:52:40 | 只看该作者
先画个地图再说,30*30够了

贪吃蛇1.PNG (50.26 KB, 下载次数: 13)

贪吃蛇1.PNG

贪吃蛇2.PNG (72.02 KB, 下载次数: 10)

贪吃蛇2.PNG

tcs3.PNG (77.56 KB, 下载次数: 9)

tcs3.PNG
板凳
 楼主| 发表于 2016-8-12 13:28:38 | 只看该作者
添加第一个蛇。。。。。还不会动

tcs4.PNG (81.01 KB, 下载次数: 11)

tcs4.PNG
地板
发表于 2016-8-12 15:48:51 | 只看该作者
图片是蛇蛇大作战。。。
5#
发表于 2016-8-12 21:21:28 | 只看该作者


Hi~ o(* ̄▽ ̄*)ブ
6#
发表于 2016-8-12 21:37:28 | 只看该作者
please发一下源代码
7#
 楼主| 发表于 2016-8-13 10:06:08 | 只看该作者
用随机函数生成的食物

tcs5.PNG (108.47 KB, 下载次数: 8)

tcs5.PNG
8#
发表于 2016-8-13 11:29:32 | 只看该作者
程序源代码 发表于 2016-8-13 10:06
用随机函数生成的食物

srand在程序最开头,也就是int main()的下方调用一次,而不是每次都调用。

点评

否则会生成相同的种子。time返回当前距1970年1月1号0点0分0秒的秒数(好像是这样),程序运行飞快,两次执行很有可能在同一秒中,所以每次生成相同的种子。  发表于 2016-8-13 11:32
9#
 楼主| 发表于 2016-8-13 12:34:46 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define W 30
#define H 30
int main()
{int map[H][W],x,y,l,size,direction=3,sx[1000],sy[1000],xf,yf,speed,full,score,sleeptime,s1,s2,s3;
char key,stop;
    for(x=0;x<H;x++)
                {
        for(y=0;y<W;y++)
                        {
            if(x==0||y==0||x==H-1||y==W-1)
                                {map[x][y]=19;}
            else{map[x][y]=10;}
            }
        }
sx[1]=15;sy[1]=15;
sx[2]=15;sy[2]=14;
sx[3]=15;sy[3]=13;
sx[4]=15;sy[4]=12;
printf("贪吃蛇");
printf("操作:a左转,d右转,空格暂停/继续\n请按任意键继续\n");
stop=getch();
printf("请输入游戏速度: 格/秒(正整数,且小于1000)");
scanf("%d",&speed);
printf("请按任意键继续");
stop=getch();
system("cls");
size=4;
sleeptime=1000/speed;
full=0;
        for(l=1;l<=size;l++)
        map[sx[l]][sy[l]]=11;
   do{
     srand((unsigned)time(NULL));
     xf=rand()%29;
     yf=rand()%31;   
         }
while(map[xf][yf]!=10);
     map[xf][yf]=12;
while(sx[1]!=0&&sy[1]!=0&&sx[1]!=H-1&&sy[1]!=W-1)
        {   if(kbhit())
                key=getch();
        switch(key)
                {
        case'a':if(direction==3)direction=direction+9;
                else direction=direction-3;break;
        case'd':if(direction==12)direction=direction-9;
                else direction=direction+3;break;
        case' ':stop=getch();break;
        default:break;
        }
     switch(direction)
                {
        case 3:sy[0]=sy[1]+1;sx[0]=sx[1];break;
        case 6:sx[0]=sx[1]+1;sy[0]=sy[1];break;
        case 9:sy[0]=sy[1]-1;sx[0]=sx[1];break;
        case 12:sx[0]=sx[1]-1;sy[0]=sy[1];break;
        }
        if(map[sx[0]][sy[0]]==12)
                        {
            full=1;
                        score=score+10;
            do{
                                srand((unsigned)time(NULL));
                                xf=rand()%31;
                                yf=rand()%29;   
                                }
                        while(map[xf][yf]!=10);
               map[xf][yf]=12;
            }
        if(map[sx[0]][sy[0]]==11)
        break;
                for(l=size+1;l>=1;l--)
        {sx[l]=sx[l-1];
         sy[l]=sy[l-1];}
        map[sx[1]][sy[1]]=11;
        map[sx[size+1]][sy[size+1]]=10;
                system("cls");
        for(x=0;x<H;x++)
                {
                for(y=0;y<W;y++)
                        {
                        if(map[x][y]==10)
                                printf("  ");
            else if(map[x][y]==19) printf("■");
            else if(map[x][y]==11) printf("■");
            else if(map[x][y]==12) printf("◆");
            }
            printf("\n");
        }
                Sleep(sleeptime);
                key='w';
                if(full==1)
        size++;
        full=0;
    }
    score=size-4;
    s1=score%10;
    s2=((score-s1)/10)%10;
    s3=((score-s1-s2*10)/100)%10;
    for(x=0;x<H;x++)
                {
        for(y=0;y<W;y++)
                        {
            if(x==0||y==0||x==H-1||y==W-1)
                                {map[x][y]=9;}
            else{map[x][y]=0;}
            map[14][10]=103;
            map[14][11]=97;
            map[14][12]=109;
            map[14][13]=101;
            map[14][16]=111;
            map[14][17]=118;
            map[14][18]=101;
            map[14][19]=114;
            map[16][10]=115;
            map[16][11]=99;
            map[16][12]=111;
            map[16][13]=114;
            map[16][14]=101;
            map[16][17]=s3;
            map[16][18]=s2;
            map[16][19]=s1;
            }
        }
        system("cls");
    for(x=0;x<H;x++)
                {
        for(y=0;y<W;y++)
                        {
                        if(map[x][y]==0)
                                printf("  ");
            else if(map[x][y]==9) printf("■");
            else if(map[x][y]>=97&&map[x][y]<=122)printf("%2c",map[x][y]);
            else if(map[x][y]>=0&&map[x][y]<=9)printf("%2d",map[x][y]);
            }
            printf("\n");
        }
        system("pause");
}


贪吃蛇.c

3.53 KB, 下载次数: 33

10#
 楼主| 发表于 2016-8-13 12:40:00 | 只看该作者
搞定了。。。。。。。

tcs6.PNG (117.2 KB, 下载次数: 9)

tcs6.PNG

tcs7.PNG (117.41 KB, 下载次数: 10)

tcs7.PNG

tcs8.PNG (29.91 KB, 下载次数: 9)

tcs8.PNG
11#
 楼主| 发表于 2016-8-13 12:46:25 | 只看该作者
邀请码 发表于 2016-8-13 11:29
srand在程序最开头,也就是int main()的下方调用一次,而不是每次都调用。

用同一个随机数求余所得的不同数应该也是随机的吧,代码我发了,你看看
12#
 楼主| 发表于 2016-8-13 13:20:16 | 只看该作者
森林木 发表于 2016-8-12 21:37
please发一下源代码

代码发了,你看看还有什么要加的,还有,怎么编辑开始界面与菜单呐,感觉这个好丑

点评

它的头在哪  发表于 2016-8-18 09:06
为什么一蹦一蹦的  发表于 2016-8-17 18:53
13#
发表于 2016-8-20 16:27:16 | 只看该作者
邀请码 发表于 2016-8-12 15:48
图片是蛇蛇大作战。。。

那叫做slither....
14#
发表于 2016-8-20 16:27:39 | 只看该作者
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表