zoukankan      html  css  js  c++  java
  • 贪吃蛇

    开通博客有些日子了,突然想贴上自己大一上做的小项目了,纯c语言写的,用的数组。

    用devc直接运行的话呢,会有些闪屏,但是用vs稍微处理下就好了。

    直接贴代码啦。

    #include<stdio.h>    
    #include<conio.h>    //方向键输入的读取函数头文件 
    #include<stdlib.h>   //随机函数的头文件 
    #include<time.h>  
    #include<string.h>
    const int m=20;  //行数, 欲阻止一个变量被改变,可以使用const关键字
    const int n=60;   //列,定义长宽 
    const char head='@';
    const char body='#';
    const char food='$';
    char map[m][n];  
    struct snack
    {
    	int x,y;
    	int now;
    }snack[m*n];
    int key;
    int dx[]={0,0,-1,1};
    int dy[]={-1,1,0,0};
    int sum=1,over=0;
    void button();
    void appear();
    void fappear();
    void move();
    void show();
    void eat(int x,int y);
    int main()
    {
        appear();
        show();
        return 0;
    }
    void button()   //游戏过程输入方向的判断 
    {
    	if(kbhit()!=0)//在执行时,检测是否有按键按下,有按下返回非0值,一般是1,没有按下返回0;是非阻塞函数
    	{
    		while(kbhit()!=0)
    	    key=getch();//取出所有的按键 
    	     switch(key)
    	    {
    		case 75: snack[0].now=0; break;  //left  //75,77,72,80 is ascll值 
    		case 77: snack[0].now=1; break;//right
    		case 72: snack[0].now=2; break;//up
    		case 80: snack[0].now=3; break;//down
    	    }
    	}
    }  
    void appear()
    {
    	int sx,sy,i,j;
    	sx=3;
    	sy=5;
    	snack[0].x=sx;       //***  must initialize
    	snack[0].y=sy;
    	snack[0].now=1 ;
    	system("title  贪吃蛇"); 
    	memset(map, ' ', sizeof(map));  //以‘ ’清零 
    	system("cls");  //qing屏 
    	printf("                   c语言  贪吃蛇
    ");
    	map[sx][sy]=head;
    	fappear();
    	for(i=0;i<m;i++)   //地图 
    	{
    		for(j=0;j<n;j++)
            {
            	if(i==0||j==0||i==m-1||j==n-1)map[i][j]='*';
            	printf("%c",map[i][j]);//头和食物已经包含进去了 
            }
            printf("
    ");
    	}
    //	getch();// 在执行时,检测按下什么键,如果不按键该函数不返回;是阻塞函数
    	button();
    }
    void fappear()
    {
    	int fx,fy;
    	while(1)
    	{	srand(time(0));  //种子 
    		fx=rand()%(m-2)+1;
            fy=rand()%(n-2)+1;
    	    if(map[fx][fy]==' ')
    	    {
    		   map[fx][fy]=food;
    		   break;
    	    }
    	}
    }
    void show()
    {
    	int i,j;
    	while(1) 
    	{	
    		_sleep(100);
    	    button();
    		move();
    		if(over)
    		{
    			printf("                   gameover >_<");
    			getchar();
    			break;
    		} 
    		system("cls");
    		printf("                   c语言  贪吃蛇
    ");
    		for(i=0;i<m;i++)   //刷新后地图 
    	  {
    		for(j=0;j<n;j++)
            {
            	if(i==0||j==0||i==m-1||j==n-1)map[i][j]='*';
            	printf("%c",map[i][j]);
            }
            printf("
    ");
    	  }
    	}
    	//getch();
    	button();
    }
    void move()    
    {
    	int x,y,i;
    	x=snack[0].x;   y=snack[0].y;//保存蛇头dang前位置 ,后来变成脖子的位置 
    	map[x][y]=' ';
    	snack[0].x=snack[0].x+dx[snack[0].now];
    	snack[0].y=snack[0].y+dy[snack[0].now];//蛇头先移动 
    	if(map[snack[0].x][snack[0].y]=='$')
    	     eat(x,y);//吃到食物,及处理
    	if(map[snack[0].x][snack[0].y]=='*'||map[snack[0].x][snack[0].y]=='#')
    	     over=1;
    	if(map[snack[0].x][snack[0].y]==' ')
    	   {
    	   	map[snack[0].x][snack[0].y]='@';
    		for(i=1;i<sum;i++)
    	      {
    	      	if(i==1)  //i=1是尾巴,让尾巴为‘ ’ 
    	      	{
    	      		map[snack[i].x][snack[i].y]=' ';
    	      	}
    	      	if(i==sum-1)  //蛇头紧跟着的那一节,即脖子 
    	      	{
    	      	snack[i].x=x;
         	    snack[i].y=y;
         	    snack[i].now=snack[0].now;
         	    }
    	      	else
    	      	{
                snack[i].x=snack[i+1].x;
                snack[i].y=snack[i+1].y;
    		    snack[i].now=snack[i+1].now;
    		   	}
    		  map[snack[i].x][snack[i].y]=body;
    	     }
    	   }  
    }
    void eat(int x,int y)
    {
    	sum++;
    	map[snack[0].x][snack[0].y]='@';
    	snack[sum-1].x= x;
    	snack[sum-1].y= y;
    	snack[sum-1].now=snack[0].now;
    	map[snack[sum-1].x][snack[sum-1].y]='#';
    	fappear();
    }
    

      

  • 相关阅读:
    eval()一个有意思的PHP函数
    PHP error_reporting() 函数
    网络编程基础--协程--greenlet切换---gevent自动识别 IO ---
    网络编程基础--多线程---concurrent.futures 模块---事件Event---信号量Semaphore---定时器Timer---死锁现象 递归锁----线程队列queue
    rpm -qa 查找文件
    Linux Gvim shell 创建第一个shell脚本
    centos7修改网卡名称为eth0-技术流ken
    pxe+kickstart自动化批量安装系统详解-技术流ken
    cobbler单台服务器实现批量自动化安装不同版本系统-技术流ken
    cobbler批量安装系统使用详解-技术流ken
  • 原文地址:https://www.cnblogs.com/tt-t/p/5022533.html
Copyright © 2011-2022 走看看