生活随笔
收集整理的這篇文章主要介紹了
简易贪吃蛇游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡易貪吃蛇游戲
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<windows.h>
#include <conio.h>
#define MAPWIDTH 60
#define MAPHEIGHT 30
#define SNAKESIZE 100
struct
{int x
;int y
;
}food
;struct
{int x
[SNAKESIZE
]; int y
[SNAKESIZE
];int length
; int speed
;
}snake
;
int changeflag
= 0;
char key
= 's';
void DrawMap();
void CreateFood();
void KeyDown();
int SnakeStatus();
void gotoxy(int x
, int y
);int main(void)
{DrawMap();while (1){CreateFood();gotoxy(MAPWIDTH
+ 2, MAPHEIGHT
/ 2);printf("score: %d", snake
.length
- 3);Sleep(snake
.speed
); KeyDown();if (!SnakeStatus())break;}gotoxy(MAPWIDTH
/ 2 - 10, MAPHEIGHT
/ 2);printf("Game Over!");system("pause");return 0;
}
void DrawMap()
{gotoxy(MAPWIDTH
+ 2, MAPHEIGHT
/ 2 - 3);printf("Tab 'a','d','s','w' to move.");srand((unsigned int)time(NULL)); for (int i
= 0; i
<= MAPHEIGHT
; i
++){gotoxy(0, i
); printf("█");gotoxy(MAPWIDTH
, i
);printf("█");}for (int i
= 0; i
<= MAPWIDTH
; i
+= 2) {gotoxy(i
, 0);printf("█");gotoxy(i
, MAPHEIGHT
);printf("█");}snake
.length
= 3;snake
.speed
= 300;snake
.x
[0] = MAPWIDTH
/ 2;snake
.y
[0] = MAPHEIGHT
/ 2;gotoxy(snake
.x
[0], snake
.y
[0]);printf("@");for (int i
= 1; i
< snake
.length
; i
++){snake
.x
[i
] = snake
.x
[i
- 1] + 1;snake
.y
[i
] = snake
.y
[i
- 1];gotoxy(snake
.x
[i
], snake
.y
[i
]);printf("*");}food
.x
= rand() % (MAPWIDTH
- 4) + 2; food
.y
= rand() % (MAPHEIGHT
- 2) + 1; gotoxy(food
.x
, food
.y
);printf("#");
}
void CreateFood()
{if (snake
.x
[0] == food
.x
&& snake
.y
[0] == food
.y
){srand((unsigned int)time(NULL));while (1){int flag
= 1;food
.x
= rand() % (MAPWIDTH
- 4) + 2; food
.y
= rand() % (MAPHEIGHT
- 2) + 1; for (int k
= 0; k
< snake
.length
; k
++){if (snake
.x
[k
] == food
.x
&& snake
.y
[k
] == food
.y
) {flag
= 0;break; }}if (flag
== 1) {break;}}gotoxy(food
.x
, food
.y
);printf("#");snake
.length
++;snake
.speed
-= 10;changeflag
= 1;}
}
void KeyDown()
{char temp
;if (_kbhit()) {fflush(stdin); key
= _getch();}if (!changeflag
){gotoxy(snake
.x
[snake
.length
- 1], snake
.y
[snake
.length
- 1]);printf(" ");}for (int i
= snake
.length
- 1; i
> 0; i
--){snake
.x
[i
] = snake
.x
[i
- 1];snake
.y
[i
] = snake
.y
[i
- 1];gotoxy(snake
.x
[i
], snake
.y
[i
]);printf("*");}switch (key
){case 'w':snake
.y
[0]--;break;case 's':snake
.y
[0]++;break;case 'a':snake
.x
[0] = snake
.x
[0] - 1; break;case 'd':snake
.x
[0] = snake
.x
[0] + 1;break;default:break;}gotoxy(snake
.x
[0], snake
.y
[0]);printf("@"); changeflag
= 0;gotoxy(MAPWIDTH
+ 2, 0); }
int SnakeStatus()
{if (snake
.x
[0] == 0 || snake
.x
[0] == MAPWIDTH
- 1 || snake
.y
[0] == 0 || snake
.y
[0] == MAPHEIGHT
)return 0;for (int i
= 1; i
< snake
.length
; i
++){if (snake
.x
[0] == snake
.x
[i
] && snake
.y
[0] == snake
.y
[i
])return 0;}return 1;
}
void gotoxy(int x
, int y
)
{HANDLE handle
= GetStdHandle(STD_OUTPUT_HANDLE
);COORD coord
;coord
.X
= x
;coord
.Y
= y
;SetConsoleCursorPosition(handle
, coord
);
}
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的简易贪吃蛇游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。