一个小白写的控制台的贪吃蛇

我已经一个学期没编程了,这日心血来潮,编了一个贪吃蛇,我的代码质量不高,不过应有的还是有的,

下面我把代码贴出来给大家瞧瞧哦。

#include<iostream>
#include <conio.h>
#include<windows.h>
#include<time.h> 
#include<stdlib.h>
#include<stdio.h>
struct snake
{
int x;
int y;
};
void showboard(char a[30][30]); //展示棋盘动态信息 
void putboard(char a[30][30]);//   生成棋盘
int getdir(int d) ; //   获取方向
int ifdead(snake queue[100],int *length); //    判断蛇是否死了
snake move(int d,snake s,int *f,int *mm,int *nn,int *length);  // 使蛇头移动
void creatfood(char a[30][30],int *f,int *mm,int *nn);//产生食物 
using namespace std; 
int main()
{
char a[30][30];
snake s[100];int x,y;int over=1;
int d=2;int f=0;int mm=10;int nn=10,length=4; 
s[0].x=5;s[0].y=4;
s[1].x=6;s[1].y=4;
s[2].x=7;s[2].y=4;
s[3].x=8;s[3].y=4; 
while(true)
{
x=s[0].x;y=s[0].y;
putboard(a);
creatfood(a,&f,&mm,&nn);
   d=getdir(d);
   s[0]=move(d,s[0],&f,&mm,&nn,&length);
   for(int z=length-1;z>1;z--)
   {
    s[z].x=s[z-1].x;s[z].y=s[z-1].y;
   }
   s[1].x=x;s[1].y=y; 
for(int k=0;k<length;k++)
{
a[s[k].x][s[k].y]='#';
}
    for(int i=0;i<15;i++)
   {
   for(int k=0;k<25;k++)
  {
  cout<<a[i][k];
  }
      cout<<endl;
    }
   over=ifdead(s,&length);
   if(over==0)
   {
    cout<<"GAME OVER";
    break;
   }
   Sleep(500);
   system("cls");
   }
   return 0;

void putboard(char a[30][30])
{
for(int i=0;i<30;i++)
{
for(int k=0;k<30;k++)
{
a[i][k]=' ';
}
}
for(int i=0;i<15;i++)a[i][0]='*';
for(int i=0;i<15;i++)a[i][24]='*';
for(int k=0;k<25;k++)a[0][k]='*';
for(int k=0;k<25;k++)a[14][k]='*';//产生墙壁 
 
}
void creatfood(char a[30][30],int *f,int *mm,int *nn)//f用来标记是否该食物是否被吃了 
{
int x=*mm;int y=*nn;
if(*f==0)
{
srand((unsigned)time(NULL));
x=rand()%13+1;
y=rand()%23+1;//产生食物 
     }
     a[x][y]='$';
     *f=1;
     *mm=x;*nn=y;
}
int getdir(int d)
{
char c;int dir=d;
if(_kbhit()) //kbhit判断是否有键盘输入 
{
c=getchar();
if(c=='s'&&d!=2){dir=1;} 
else if(c=='w'&&d!=1){dir=2;} 
else if(c=='d'&&d!=4){dir=3;}//经典W A S D 操作 
else if(c=='a'&&d!=3){dir=4;}
    }
    return dir;

snake move(int d,snake s,int *f,int *mm,int *nn,int *length)
{
    switch(d)
    {
    case 1:
    s.x++;
    break;
    case 2:
    s.x--;
    break;
    case 3:
    s.y++;
    break;
    case 4:
    s.y--;
    break;
    }
    if(s.x==*mm&&s.y==*nn)
    {
    *f=0;
    *length=*length+1;
    }
    return s;
}
int ifdead(snake queue[100],int *length)
{
if(queue[0].x==0||queue[0].x==14||queue[0].y==0||queue[0].y==24){return 0;}
for(int k=1;k<*length;k++)
{
if(queue[0].x==queue[k].x&&queue[0].y==queue[k].y){return 0;}
}
return 1;
}




自己吃到自己了








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值