mirror of
https://github.com/jie65535/Snake.git
synced 2024-07-27 19:15:13 +08:00
提交源码
编译环境 windows MinGW gcc
This commit is contained in:
393
tanchishe.c
Normal file
393
tanchishe.c
Normal file
@@ -0,0 +1,393 @@
|
||||
#include "tanchishe.h"
|
||||
|
||||
// <20><><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ȶ<CDB5><C8B6><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Head_Tail* initgame(Head_Tail *snake)
|
||||
{
|
||||
hout = GetStdHandle(STD_OUTPUT_HANDLE); // <20><><EFBFBD>ñ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
CONSOLE_CURSOR_INFO cursor_info = {1,0}; // <20><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int x=0, y=0, i=0;
|
||||
Fraction = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
Snake_body *temp =NULL, *p1=NULL;
|
||||
system ("title ̰ <20><> <20><>");
|
||||
system ("cls");
|
||||
SetConsoleCursorInfo(hout, &cursor_info); // <20><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>
|
||||
snake = (Head_Tail*)malloc(sizeof(Head_Tail));
|
||||
if (snake == NULL)
|
||||
{
|
||||
fprintf (stderr, "<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>");
|
||||
exit(1);
|
||||
}
|
||||
snake->head = (Snake_body*)malloc(sizeof(Snake_body));
|
||||
if (snake->head == NULL)
|
||||
{
|
||||
fprintf (stderr, "<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>");
|
||||
exit(1);
|
||||
}
|
||||
snake->head->up = NULL;
|
||||
temp = snake->head;
|
||||
for (y=STARTED_Y, x=STARTED_X; x > STARTED_X - INIT_LENGTH; x--) // X<>ı<EFBFBD><C4B1><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp->x = x; // <20><><EFBFBD><EFBFBD><EFBFBD>긳ֵ
|
||||
temp->y = y;
|
||||
p1 = (Snake_body*)malloc(sizeof(Snake_body)); // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (p1 == NULL)
|
||||
{
|
||||
fprintf (stderr, "<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>");
|
||||
exit(1);
|
||||
}
|
||||
p1->up = temp;
|
||||
p1->next = NULL;
|
||||
temp->next = p1;
|
||||
temp = temp->next;
|
||||
p1 = NULL;
|
||||
}
|
||||
temp->x=x,temp->y=y;
|
||||
snake->tail = temp; // <20><>β
|
||||
snake->direction = (Direction*)malloc(sizeof(Direction)); // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (snake->head == NULL)
|
||||
{
|
||||
fprintf (stderr, "<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>");
|
||||
exit(1);
|
||||
}
|
||||
snake->direction->x = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xΪ1<CEAA><31>ʾ<EFBFBD><CABE><EFBFBD>ң<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE>ת
|
||||
snake->direction->y = 0;
|
||||
food = (Coordinate*)malloc(sizeof(Coordinate)); // Ϊ<><CEAA><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
|
||||
switch (hard) {
|
||||
case 0: // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD>
|
||||
bian_x = SIMPLE_MAP_X; // <20><>ͼ<EFBFBD>ı߽<C4B1>x
|
||||
bian_y = SIMPLE_MAP_Y; // <20><>ͼ<EFBFBD>ı߽<C4B1>y
|
||||
snake->speed = SIMPLE_SPEED; // <20>ٶ<EFBFBD>
|
||||
sleep_max = INIT_SIMPLE_SPEED; // <20>ٶȵ<D9B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
break;
|
||||
case 2: // <20><><EFBFBD><EFBFBD>
|
||||
bian_x = DIFFICULT_MAP_X; // <20><>ͼ<EFBFBD>ı߽<C4B1>x
|
||||
bian_y = DIFFICULT_MAP_Y; // <20><>ͼ<EFBFBD>ı߽<C4B1>y
|
||||
snake->speed = DIFFICULT_SPEED; // <20>ٶ<EFBFBD>
|
||||
sleep_max = INIT_DIFFICULT_SPEED;// <20>ٶȵ<D9B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
break;
|
||||
default: // <20><>ͨ<EFBFBD>Ѷȣ<D1B6>Ĭ<EFBFBD>ϣ<EFBFBD>
|
||||
bian_x = ORDINARY_MAP_X; // <20><>ͼ<EFBFBD>ı߽<C4B1>x
|
||||
bian_y = ORDINARY_MAP_Y; // <20><>ͼ<EFBFBD>ı߽<C4B1>y
|
||||
snake->speed = ORDINARY_SPEED; // <20>ٶ<EFBFBD>
|
||||
sleep_max = INIT_ORDINARY_SPEED; // <20>ٶȵ<D9B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
huagame(snake);
|
||||
return snake;
|
||||
}
|
||||
|
||||
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD><EFBFBD>
|
||||
void Location(int x, int y)
|
||||
{
|
||||
COORD coord;
|
||||
coord.X=x;
|
||||
coord.Y=y;
|
||||
SetConsoleCursorPosition(hout,coord);
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
||||
void huagame(Head_Tail *snake)
|
||||
{
|
||||
int x, y;
|
||||
Snake_body *temp =NULL;
|
||||
Location(0, 0); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
for (y=0; y<bian_y; y++) {
|
||||
for (x=0; x<bian_x; x++) {
|
||||
if (x == 0 || x == bian_x-1 || y == 0 || y == bian_y-1)
|
||||
{
|
||||
map[y][x] = WALL; // <20><><EFBFBD><EFBFBD><EFBFBD>DZ߽<C7B1><DFBD><EFBFBD>ֵΪǽ
|
||||
putchar(WALL_T); // <20><>ǽ
|
||||
} else {
|
||||
map[y][x] = AIR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD>
|
||||
putchar(AIR_T); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
for (temp = snake->head; temp != NULL; temp = temp->next)
|
||||
{
|
||||
y=temp->y, x=temp->x;
|
||||
map[y][x] = SNAKE_BODY; // <20><><EFBFBD><EFBFBD>
|
||||
Location(x, y);
|
||||
putchar(SNAKE_BODY_T); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
Location(snake->head->x, snake->head->y);
|
||||
putchar(SNAKE_HEAD_T); // <20><><EFBFBD><EFBFBD>ͷ
|
||||
Location(food->x, food->y); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
putchar(produce_food[food->x % FOOD_MAX]); // <20><>ʳ<EFBFBD><CAB3>
|
||||
}
|
||||
|
||||
|
||||
|
||||
// <20><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷβ<CDB7>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
void Mobile(Head_Tail *snake, int i)
|
||||
{
|
||||
int x=0, y=0, mode=0;
|
||||
x = snake->head->x + snake->direction->x; // <20>߽<EFBFBD>Ҫ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
y = snake->head->y + snake->direction->y; // <20>ߵ<EFBFBD>ǰλ<C7B0>ü<EFBFBD>Ҫ<EFBFBD>ƶ<EFBFBD><C6B6>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
Snake_body *temp = NULL, *p1 = NULL;
|
||||
unsigned int oldheadx = snake->head->x;
|
||||
unsigned int oldheady = snake->head->y;
|
||||
unsigned int oldtailx = snake->tail->x;
|
||||
unsigned int oldtaily = snake->tail->y;
|
||||
if (x == snake->head->next->x && y == snake->head->next->y) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2B7B4B7><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
|
||||
{
|
||||
snake->direction->x = olddir.x; // <20><><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD>ָ<EFBFBD>
|
||||
snake->direction->y = olddir.y; // <20><><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD>ָ<EFBFBD>
|
||||
return;
|
||||
}
|
||||
if (map[y][x] == WALL || map[y][x] == SNAKE_BODY) { // <20><><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>ǽ<EFBFBD><C7BD><EFBFBD>߳Ե<DFB3><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
||||
snake = Game_Over(snake);
|
||||
return;
|
||||
} else if (i==1) {
|
||||
Fraction += 10;
|
||||
} else if (map[y][x] == AIR) { // <20><><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>
|
||||
Location(oldtailx, oldtaily); // <20><><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>βλ<CEB2><CEBB>
|
||||
putchar(AIR_T); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
map[oldtaily][oldtailx] = AIR; // <20>ڵ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β
|
||||
p1 = snake->tail; // p1ΪҪ<CEAA>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4>Ľڵ㣬<DAB5><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β
|
||||
snake->tail = snake->tail->up; // <20><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>ֵΪ<D6B5><CEAA>β<EFBFBD><CEB2>ǰһ<C7B0><D2BB>
|
||||
snake->tail->next = NULL; // <20><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>β<EFBFBD><CEB2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ֵΪ<D6B5><CEAA>
|
||||
free(p1); // <20>ͷ<EFBFBD><CDB7><EFBFBD>β
|
||||
} else if (map[y][x] == FOOD) { // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3>
|
||||
Fraction++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>һ
|
||||
snake->speed -= FOOD_SPEED; // ͬʱ<CDAC>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
Produce_food(); // ͬʱ<CDAC>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3>
|
||||
}
|
||||
map[y][x] = SNAKE_BODY;
|
||||
temp = (Snake_body*)malloc(sizeof(Snake_body));
|
||||
if (temp == NULL)
|
||||
{
|
||||
fprintf (stderr, "<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>");
|
||||
exit(1);
|
||||
}
|
||||
temp->x = x; // <20>½ڵ<C2BD><DAB5><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD>
|
||||
temp->y = y; // <20>½ڵ<C2BD><DAB5><EFBFBD>y<EFBFBD><79><EFBFBD><EFBFBD>
|
||||
temp->up = NULL; // <20>½ڵ<C2BD><DAB5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ<EFBFBD><CEAA>
|
||||
temp->next = snake->head; // <20>½ڵ<C2BD><DAB5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ<EFBFBD><CEAA>ǰ<EFBFBD><C7B0>ͷ
|
||||
snake->head->up = temp; // <20><>ǰ<EFBFBD><C7B0>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD>½ڵ<C2BD>
|
||||
snake->head = temp; // <20><><EFBFBD>½ڵ<C2BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||
Location(oldheadx, oldheady); // <20><><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>ͷλ<CDB7><CEBB>
|
||||
putchar(SNAKE_BODY_T); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// map[old_head_y][old_head_x] = SNAKE_BODY; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>λ<EFBFBD><CEBB><EFBFBD>ڵ<EFBFBD>ͼ<EFBFBD>ϸı䣨<C4B1><E4A3A8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ʾʱ<CABE><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ʱ<EFBFBD><CAB1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD>͵<EFBFBD><CDB5><EFBFBD>
|
||||
Location(x, y); // <20><><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>ͷλ<CDB7><CEBB>
|
||||
putchar(SNAKE_HEAD_T); // <20><><EFBFBD><EFBFBD>ͷ
|
||||
map[y][x] = SNAKE_BODY; // <20>ڵ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
||||
Head_Tail* Game_Over(Head_Tail *oldsnake)
|
||||
{
|
||||
Head_Tail *snake = NULL;
|
||||
t:
|
||||
system ("cls");
|
||||
printf ("+---------------------------+\n"
|
||||
"| |\n"
|
||||
"| <20><> Ϸ <20><> <20><> |\n"
|
||||
"| |\n"
|
||||
"| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%-6d |\n"
|
||||
"| <20><><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>%-6d |\n"
|
||||
"| |\n"
|
||||
"| <20><>r<EFBFBD><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD> |\n"
|
||||
"| <20><>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD> |\n"
|
||||
"+---------------------------+\n", Fraction, Fraction + 5);
|
||||
memset(map, 0, sizeof(map)); // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>ʼ<EFBFBD><CABC>
|
||||
switch (getch())
|
||||
{
|
||||
case 'z' : Interface(oldsnake);
|
||||
case 'r' : fre_game(oldsnake, 0);
|
||||
snake = initgame(snake);
|
||||
Produce_food(); // <20><><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3>
|
||||
return snake;
|
||||
default : printf ("\n<EFBFBD>Ƿ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>\ny.<2E>˳<EFBFBD>\t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
if (getchar() == 'y')
|
||||
exit(1);
|
||||
else goto t;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3>
|
||||
void Produce_food(void)
|
||||
{
|
||||
int x=0, y=0;
|
||||
srand((unsigned)time(NULL));
|
||||
while (1)
|
||||
{
|
||||
x = rand() % bian_x;
|
||||
y = rand() % bian_y;
|
||||
if (map[y][x] == WALL || map[y][x] == SNAKE_BODY);
|
||||
else
|
||||
{
|
||||
map[y][x] = FOOD; // <20>ڵ<EFBFBD>ͼ<EFBFBD>ϸ<EFBFBD>ֵʳ<D6B5><CAB3>
|
||||
Location(x, y);
|
||||
food->x = x;
|
||||
food->y = y; // <20><><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
putchar(produce_food[x % FOOD_MAX]); // <20><>ʳ<EFBFBD><CAB3>
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ڴ<EFBFBD>
|
||||
void fre_game(Head_Tail *snake, int i)
|
||||
{
|
||||
system("cls");
|
||||
printf ("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>...");
|
||||
free(snake->direction);
|
||||
Snake_body *temp = snake->head, *p1;
|
||||
while (temp != NULL)
|
||||
{
|
||||
p1 = temp;
|
||||
temp = temp->next;
|
||||
free(p1);
|
||||
}
|
||||
snake->head = NULL;
|
||||
snake->tail = NULL;
|
||||
free(snake);
|
||||
snake = NULL;
|
||||
free(food);
|
||||
if (i != 0) // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ҫ<EFBFBD>˳<EFBFBD>
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// <20><>Ϸ<EFBFBD><CFB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
void Interface(Head_Tail *snake)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
system("cls");
|
||||
printf ("+----------------------------+\n"
|
||||
"| |\n"
|
||||
"| ̰ <20><> <20><> |\n"
|
||||
"| |\n"
|
||||
"| 1.<2E><>ʼ<EFBFBD><CABC>Ϸ |\n"
|
||||
"| 2.<2E><> <20><> |\n"
|
||||
"| 3.<2E><> <20><> |\n"
|
||||
"| 4.<2E><> <20><> |\n"
|
||||
"| q.<2E><> <20><> |\n"
|
||||
"+----------------------------+\n");
|
||||
switch(getch()) {
|
||||
case '1': return;
|
||||
case '2': banzhu(); break;
|
||||
case '3': set(); break;
|
||||
case '4': guanyu(); break;
|
||||
case 'q':
|
||||
if (snake == NULL) exit(1);
|
||||
else fre_game(snake, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void banzhu(void)
|
||||
{
|
||||
system("cls");
|
||||
printf ("+----------------------------+\n"
|
||||
"| |\n"
|
||||
"| <20><> Ϸ <20><> <20><> |\n"
|
||||
"| w |\n"
|
||||
"| a s d Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |\n"
|
||||
"|p<><70>Ϊ<EFBFBD><CEAA>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |\n"
|
||||
"|q<><71><EFBFBD>˳<EFBFBD>(<28>벻Ҫǿ<D2AA><C7BF><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|\n"
|
||||
"|<7C><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>) |\n"
|
||||
"| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |\n"
|
||||
"+----------------------------+\n");
|
||||
getch();
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>
|
||||
void guanyu(void)
|
||||
{
|
||||
system("cls");
|
||||
printf ("+----------------------------+\n"
|
||||
"| |\n"
|
||||
"| <20><> <20><> |\n"
|
||||
"| |\n"
|
||||
"| <20><><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD> |\n"
|
||||
"| <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣺5Сʱ |\n"
|
||||
"| <20>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> |\n"
|
||||
"| <20><><EFBFBD><EFBFBD>QQ<51><51>840465812 |\n"
|
||||
"| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |\n"
|
||||
"+----------------------------+\n");
|
||||
getch();
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
void set(void)
|
||||
{
|
||||
char haedstr[3][5] = {"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\0", "<EFBFBD><EFBFBD>ͨ\0", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\0"};
|
||||
while (1)
|
||||
{
|
||||
system("cls");
|
||||
printf ("+----------------------------+\n"
|
||||
"| |\n"
|
||||
"| <20><> <20><> |\n"
|
||||
"| |\n"
|
||||
"| <20>Ѷȣ<D1B6>%4s |\n"
|
||||
"| 1.<2E><><EFBFBD><EFBFBD> |\n"
|
||||
"| 2.<2E><>ͨ |\n"
|
||||
"| 3.<2E><><EFBFBD><EFBFBD> |\n"
|
||||
"| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |\n"
|
||||
"+----------------------------+\n", haedstr[hard]);
|
||||
switch (getch())
|
||||
{
|
||||
case '1': hard = 0; break;
|
||||
case '2': hard = 1; break;
|
||||
case '3': hard = 2; break;
|
||||
default : return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Head_Tail *snake = NULL;
|
||||
int i=0;
|
||||
Interface(snake);
|
||||
snake = initgame(snake);
|
||||
Produce_food(); // <20><><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3>
|
||||
while(1)
|
||||
{
|
||||
olddir.x = snake->direction->x; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵķ<DAB5><C4B7>ɷ<F2B5BDBE><C9B7><EFBFBD>
|
||||
olddir.y = snake->direction->y;
|
||||
if (kbhit())
|
||||
{
|
||||
switch(getch())
|
||||
{
|
||||
case 'w': snake->direction->y = -1, snake->direction->x = 0; break;
|
||||
case 's': snake->direction->y = 1, snake->direction->x = 0; break;
|
||||
case 'a': snake->direction->y = 0, snake->direction->x = -1; break;
|
||||
case 'd': snake->direction->y = 0, snake->direction->x = 1; break;
|
||||
case 'q': snake = Game_Over(snake); break;
|
||||
case 'p': zantin(snake); break;
|
||||
case 'b': i=1; break;
|
||||
}
|
||||
}
|
||||
Mobile(snake, i);
|
||||
i=0;
|
||||
if (snake->speed > sleep_max)
|
||||
Sleep(snake->speed -= SPEED_JIAN);
|
||||
else Sleep(snake->speed);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
|
||||
void zantin(Head_Tail *snake)
|
||||
{
|
||||
system ("cls");
|
||||
printf ("+----------------------------+\n"
|
||||
"| |\n"
|
||||
"| <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> |\n"
|
||||
"| |\n"
|
||||
"| <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%-6d |\n"
|
||||
"| <20><>ǰ<EFBFBD>߳<EFBFBD><DFB3><EFBFBD>%-6d |\n"
|
||||
"| |\n"
|
||||
"| |\n"
|
||||
"| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |\n"
|
||||
"+----------------------------+\n", Fraction, Fraction+5);
|
||||
getch();
|
||||
system("cls");
|
||||
huagame(snake);
|
||||
}
|
113
tanchishe.h
Normal file
113
tanchishe.h
Normal file
@@ -0,0 +1,113 @@
|
||||
// <20><>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ̰<CEAA><CCB0><EFBFBD>ߵĺ궨<C4BA><EAB6A8><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#ifndef _tanchishe_h_
|
||||
#define _tanchishe_h_
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <conio.h>
|
||||
#include <malloc.h>
|
||||
#include <windows.h>
|
||||
#include <time.h>
|
||||
|
||||
#define SIMPLE_MAP_X 50 // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵĵ<C8B5>ͼX<CDBC><58><EFBFBD><EFBFBD>
|
||||
#define SIMPLE_MAP_Y 24 // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵĵ<C8B5>ͼY<CDBC><59><EFBFBD><EFBFBD>
|
||||
#define ORDINARY_MAP_X 30 // <20><>ͨ<EFBFBD>Ѷȵĵ<C8B5>ͼX<CDBC><58><EFBFBD><EFBFBD>
|
||||
#define ORDINARY_MAP_Y 15 // <20><>ͨ<EFBFBD>Ѷȵĵ<C8B5>ͼY<CDBC><59><EFBFBD><EFBFBD>
|
||||
#define DIFFICULT_MAP_X 22 // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵĵ<C8B5>ͼX<CDBC><58><EFBFBD><EFBFBD>
|
||||
#define DIFFICULT_MAP_Y 12 // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵĵ<C8B5>ͼY<CDBC><59><EFBFBD><EFBFBD>
|
||||
#define STARTED_X 11 // <20><>ͷ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>Xλ<58><CEBB>
|
||||
#define STARTED_Y 6 // <20><>ͷ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>yλ<79><CEBB>
|
||||
#define INIT_LENGTH 5 // <20>ߵij<DFB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define INIT_SIMPLE_SPEED 250 // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵ<D1B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
#define INIT_ORDINARY_SPEED 200 // <20><>ͨ<EFBFBD>Ѷȵ<D1B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
#define INIT_DIFFICULT_SPEED 150// <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵ<D1B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
#define SIMPLE_SPEED 500 // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵ<D1B6><C8B5>߳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ٶ<EFBFBD>
|
||||
#define ORDINARY_SPEED 400 // <20><>ͨ<EFBFBD>Ѷȵ<D1B6><C8B5>߳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ٶ<EFBFBD>
|
||||
#define DIFFICULT_SPEED 300 // <20><><EFBFBD><EFBFBD><EFBFBD>Ѷȵ<D1B6><C8B5>߳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ٶ<EFBFBD>
|
||||
#define FOOD_SPEED 2 // ÿ<><C3BF>һ<EFBFBD><D2BB>ʳ<EFBFBD><CAB3><EFBFBD>ͼ<EFBFBD><CDBC>٣<EFBFBD><D9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
||||
#define SPEED_JIAN 2 // ÿ<>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͼ<EFBFBD><CDBC>٣<EFBFBD><D9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
||||
#define AIR 0 // <20><><EFBFBD><EFBFBD>
|
||||
#define WALL 2 // ǽ
|
||||
#define SNAKE_BODY 1 // <20><><EFBFBD><EFBFBD>
|
||||
#define FOOD 3 // ʳ<><CAB3>
|
||||
#define FOOD_MAX 8 // ʳ<><CAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SNAKE_HEAD_T 1 // <20><>ͷ<EFBFBD><CDB7>ͼ<EFBFBD><CDBC>
|
||||
#define SNAKE_BODY_T 4 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
#define WALL_T 22 // ǽ<><C7BD>ͼ<EFBFBD><CDBC>
|
||||
#define AIR_T ' ' // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct snake_body {
|
||||
int x;
|
||||
int y;
|
||||
struct snake_body *up;
|
||||
struct snake_body *next;
|
||||
} Snake_body;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct {
|
||||
int x;
|
||||
int y;
|
||||
} Coordinate;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef Coordinate Direction;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>β<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
typedef struct head_tail {
|
||||
Snake_body *head;
|
||||
Snake_body *tail;
|
||||
Direction *direction;
|
||||
unsigned int speed;
|
||||
} Head_Tail;
|
||||
|
||||
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
HANDLE hout; // <20><><EFBFBD>ñ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
int map[SIMPLE_MAP_Y][SIMPLE_MAP_X] = {0}; // <20><>ͼ
|
||||
int bian_x=0, bian_y=0; // <20><>ͼ<EFBFBD>߽磨<DFBD><E7A3A8><EFBFBD>Ѷȱ仯<C8B1><E4BBAF><EFBFBD>仯<EFBFBD><E4BBAF>
|
||||
char produce_food[FOOD_MAX] = {3, 5, 6, 35, 36, 37, 38, 15}; // ʳ<><CAB3><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ASCII<49><49><EFBFBD>е<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
||||
unsigned int Fraction = 0; // <20><><EFBFBD><EFBFBD>
|
||||
int hard = 1; // <20>Ѷȣ<D1B6>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>ͨ<EFBFBD><CDA8>
|
||||
Direction olddir = {0,0}; // <20>ɵķ<C9B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Իָ<D4BB><D6B8><EFBFBD>
|
||||
Coordinate *food; // ʳ<><CAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int sleep_max = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Head_Tail* initgame(Head_Tail*);
|
||||
|
||||
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD><EFBFBD>
|
||||
void Location(int x, int y);
|
||||
|
||||
// <20><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷβ<CDB7>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
void Mobile(Head_Tail*, int);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
||||
Head_Tail* Game_Over(Head_Tail*);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ʳ<EFBFBD><CAB3>
|
||||
void Produce_food(void);
|
||||
|
||||
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Ϸ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
void fre_game(Head_Tail*, int);
|
||||
|
||||
// <20><>Ϸ<EFBFBD><CFB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
void Interface(Head_Tail*);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void banzhu(void);
|
||||
|
||||
// <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>
|
||||
void guanyu(void);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
void set(void);
|
||||
|
||||
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
|
||||
void zantin(Head_Tail*);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
||||
void huagame(Head_Tail*);
|
||||
|
||||
#endif
|
BIN
贪吃蛇设计文档.doc
Normal file
BIN
贪吃蛇设计文档.doc
Normal file
Binary file not shown.
Reference in New Issue
Block a user