C语言贪吃蛇(起初阶段)

该程序设置了物体移动区域,并通过按键wsad对物体的移动进行控制,但未实现物体朝一个方向的自动移动(后续会进行完善)。本代码的最终目的是写出游戏贪吃蛇,代码未进行简化,后续有时间会进行改良简化。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#define M 10
#define N 20
int main()
{
    int i,j;//背景数组下标
    int a,b;//前置数组随机下标
    int count=0;//移动计数
    char back[M][N],front[3]= {"[]"};
    int input;//接收指令
    int k=1;//控制输入
    int c,d;//目标随机下标 
	
	//设置背景
    for(i=0; i<M; i++)
    {
        for(j=0; j<N; j++)
        {
        	//边界设为 * 
        	if(i==0||j==0||i==M-1||j==N-1)
            {
            	back[i][j]='*';
			}
			//可移动区域设为空格 
			else
			{
				back[i][j]=' ';
			}
        }
    }
    
	
	//随机初始化物体在边界内的位置
    srand(time(NULL));
    a=rand()%(M-2)+1;//物体左半部分所在行 
    b=rand()%(N-3)+1;//物体左半部分所在列 
    back[a][b]=front[0],back[a][b+1]=front[1];
    
	
	//打印初始状态
    for(i=0; i<M; i++)
    {
        for(j=0; j<N; j++)
        {
            printf("%c",back[i][j]);

        }
        printf("\n");
    }
    
	
	//对输入指令做出移动,并打印已移动次数
	do{
	
	do{
		srand(time(NULL));
    	c=rand()%(M-2)+1;//目标左半部分所在行 
    	d=rand()%(N-3)+1;//目标左半部分所在列 
    }while(d==b||d==b+1);
    back[c][d]='~';

    while(a!=c||(b!=d&&b+1!=d))
    {		
    	printf("得分:%d",count);
    	printf("\n");
    	back[a][b]=' ',back[a][b+1]=' ';
		//输入指令进行移动 
		input=getch();
		switch(input)
        {
        	case 'w':
        	case 'W':
				a-=1;
            	if(a>=1)
            	    back[a][b]=front[0],back[a][b+1]=front[1];
				else k=0;
            	break;
        	case 'a':
    		case 'A':
            	b-=1;
            	if(b>=1)
                	back[a][b]=front[0],back[a][b+1]=front[1];
            	else k=0;
            	break;
        	case 'd':
        	case 'D':
            	b+=1;
            	if(b<N-2)
            	    back[a][b]=front[0],back[a][b+1]=front[1];
            	else k=0;
            	break;
        	case 's':
        	case 'S':
            	a+=1;
            	if(a<M-1)
            	    back[a][b]=front[0],back[a][b+1]=front[1];
            	else k=0;
            	break;
        	default:
        	{
        	    printf("错误输入!");
        	    exit(0);
        	}
        }
		if(k==0) break;
        
    
		//是否触及边界
    	if(k)
    	{
    		system("cls");
    	    for(i=0; i<M; i++)
    	    {
    	    	for(j=0; j<N; j++)
    	    	{
    	    		printf("%c",back[i][j]);
	
    	    	}
    	    	printf("\n");
			}
			if(a==c)
    		{
    			if(b==d||b+1==d)
    			{
    				count++;
				}
			}
		}
    }
}while(k);
	printf("触及边界!");
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值