写了一天写出个这玩意 好为难啊白瞎学了一个月

来源:互联网 发布:linux maven 打包war 编辑:程序博客网 时间:2024/05/17 01:05
#include <stdio.h>
#include <Windows.h>
#include <conio.h>
#include <time.h>


void food();
void add();
void food();
void print();
void move();
void right();
void left();
void up();
void down();




int a,b,a3,b3;
int a1,b1;
int len = 1;
bool over = false;
bool eat = false;
bool inter = false;
int ctimes = 500;
int map[15][25] = 
{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};
struct Snake
{
int a2;
int b2;
Snake* next;
};
Snake m_head = {0,0,0};
//吃掉或者撞墙碰到自己
void Judge(Snake* obj)
{


Snake* p = obj;
if(p->a2 == a3&&p->b2== b3)
{
eat = true;
len++;
}
else
{
p = p->next;
for(int i=0;i<(len -2);i++)
{
if((p->a2 == a)&&(p->b2 ==b))
{
over = true;
break;
}
p++;
}
}
}
//把这个点带入到
void add(Snake* obj)
 {
  obj->next = m_head.next;
  m_head.next = obj;
Judge(obj);
 }
//申请一个位置
void Spaces()
{
Snake* obj1 = (Snake*)malloc (sizeof(Snake));
obj1->a2 = a;
obj1->b2 = b;
add(obj1);
if(!eat)
{
Snake* p= &m_head;
for(int i = 0;i<len;i++)
{
p = p->next;
}
map[p->a2][p->b2] = 0;
free(p);
}
else
{
eat = false;
food();
while (inter)food();
inter = false;
ctimes-=20;
}


}
//生成一个豆子
void food()
{
bool inter = false;
srand(time(NULL));
a3 = 1 + (rand() % 13);
b3 = 1 + ((rand() *11) % 23);
map[a3][b3] = 2;
Snake *p = m_head.next;
for(int i = 0;i<len;i++)
{
if((a3 == p->a2)&&(b3 == p->b2))
inter = true;
}
}
//打印地图
void print()
{
printf("* Copyright (c) 2016,12,22\n* All rights  \n* 作    者:ministory  \n* 完成日期:2016 年 12 月 22 日\n* 版 本 号:v1.0   \n* 问题描述:编程序,输出一个贪吃蛇程序 \n*问题很多,求大神指教!\n");
for(int x = 0;x < 15;x++)
{
for(int y = 0;y < 25;y++)
{
if(map[x][y] == 0)printf(" %c ",46);
if(map[x][y] == 2)printf(" %c ",4);
if(map[x][y] == 1)printf(" %c ",'#');
}
printf("\n");
}
}
//控制向上走
void up()  
{  
if(1!=map[a-1][b])  
{  
a1=a;  
b1=b;  
a=a-1; 
map[a][b] = 2;

else over = true;
}  
//控制向下走  
void down()  
{  
if(1!=map[a+1][b])  
{  
a1=a;  
b1=b;  
a=a+1; 
map[a][b] = 2;

else over = true;
}  
//控制向左走  
void left()  
{  
if(1!=map[a][b-1])  
{  
a1=a;  
b1=b;  
b=b-1;
map[a][b] = 2;

else over = true;
}  
//控制向右走  
void right()  
{  
if(1!=map[a][b+1])  
{  
a1=a;  
b1=b;  
b=b+1;
map[a][b] = 2;

else over = true;
}  
//移动蛇的方向
void move()
{
char ch = 's';
char ch1 = ch;
while(!over)
{
while(kbhit()!=0) 
{
ch = getch();
if(isascii(ch))continue;
ch = getch();
}
if (ch == 'w'||ch == 72||ch == 's'||ch == 80||ch == 'a'||ch == 75||ch == 'd'||ch == 77) ch1 = ch;
if(ch1 == 'w'||ch1 == 72)up();
if(ch1 == 's'||ch1 == 80)down();
if(ch1 == 'a'||ch1 == 75)left();
if(ch1 == 'd'||ch1 == 77)right();
system("cls");
print();
Spaces();
Sleep(ctimes);
}
}
//整个蛇身坐标


int main()
{


a = b = 1;
Spaces();
food();
print();
move();

return 0;
}
0 0
原创粉丝点击