DOS简易版C语言贪吃蛇
本文实例为大家分享了C语言实现贪吃蛇的具体代码,供大家参考,具体内容如下
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define WALL_LENGTH 22
#define LEFT 0x4b
#define RIGHT 0x4d
#define DOWN 0x50
#define UP 0x48
struct Snakes{
int x;
int y;
struct Snakes *prev;
struct Snakes *next;
};
struct Food{
int x;
int y;
};
struct Snakes *header;
struct Snakes *tailer;
struct Food *food;
int wall[WALL_LENGTH][WALL_LENGTH];
int direction = RIGHT;
/**/
void init();
void draw();
void move();
void doMove(int x1, int y1);
void eat();
void keydown();
void foods();
int isOver();
int isDrawSnake(int x, int y);
int isDrawFood(int x, int y);
int main(){
init();
while(1){
if(isOver()){
break;
}
move();
eat();
draw();
_sleep( 100 );
keydown();
}
printf("GAME OVER!");
system("pause");
}
void init(){
int y, x;
for(y=0; y < WALL_LENGTH; y++){
for(x=0; x < WALL_LENGTH; x++){
if(y == 0 || y == WALL_LENGTH - 1 || x == 0 || x == WALL_LENGTH - 1){
wall[y][x] = 1;
}
}
}
header=(struct Snakes *)malloc(sizeof(struct Snakes));
header->x=10;
header->y=10;
header->prev=NULL;
tailer=(struct Snakes *)malloc(sizeof(struct Snakes));
tailer->x=9;
tailer->y=10;
tailer->next=NULL;
tailer->prev=header;
header->next=tailer;
foods();
}
void draw(){
int y, x;
system("cls");
for(y=0; y < WALL_LENGTH; y++){
for(x=0; x < WALL_LENGTH; x++){
if(wall[y][x] == 1){
printf("[]");
}else if(isDrawSnake(x, y)){
printf("[]");
}else if(isDrawFood(x, y)){
printf("()");
}else{
printf(" ");
}
}
printf("\n");
}
}
void move(){
switch(direction){
case LEFT :
doMove(-1, 0);
break;
case RIGHT :
doMove(1, 0);
break;
case UP :
doMove(0, -1);
break;
case DOWN :
doMove(0, 1);
break;
}
}
void doMove(int x1, int y1){
struct Snakes *temp_tailer = tailer->prev;
tailer->x=header->x + x1;
tailer->y=header->y + y1;
tailer->next=header;
tailer->prev->next = NULL;
tailer->prev = NULL;
header->prev=tailer;
header = tailer;
tailer = temp_tailer;
}
void eat(){
if(header->x == food->x && header->y == food->y){
int x1=0, y1 =0;
struct Snakes *temp_tailer = tailer;
tailer=(struct Snakes *)malloc(sizeof(struct Snakes));
switch(direction){
case LEFT :
x1 = -1;
y1 = 0;
break;
case RIGHT :
x1 = 1;
y1 = 0;
break;
case UP :
x1 = 0;
y1 = -1;
break;
case DOWN :
x1 = 0;
y1 = 1;
break;
}
tailer->x=temp_tailer->x + x1;
tailer->y=temp_tailer->y + y1;
tailer->next=NULL;
tailer->prev=temp_tailer;
temp_tailer->next = tailer;
foods();
}
}
void foods(){
int y,x;
struct Snakes *temp = header;
_sleep(20);
srand((unsigned)time(NULL));
y=rand()%WALL_LENGTH;
x=rand()%WALL_LENGTH;
if(y == 0 || y == WALL_LENGTH - 1 || x == 0 || x == WALL_LENGTH - 1 ){
return foods();
}
do{
if(temp->x == x && temp->y == y){
return foods();
}
temp = temp->next;
}while(temp != NULL);
if(food == NULL){
food=(struct Food *)malloc(sizeof(struct Food));
}
food->x = x;
food->y = y;
}
void keydown(){
char keycode;
if(_kbhit()&&(keycode =_getch())) {
switch(keycode) {
case LEFT:
if(RIGHT!=direction) {
direction=LEFT;
// move();
// draw();
}
break;
case RIGHT:
if(LEFT!=direction) {
direction=RIGHT;
// move();
// draw();
}
break;
case UP:
if(DOWN!=direction) {
direction=UP;
// move();
// draw();
}
break;
case DOWN:
if(UP!=direction){
direction=DOWN;
// move();
// draw();
}
break;
}
}
}
int isDrawSnake(int x, int y){
struct Snakes *temp = header;
do{
if(temp->x == x && temp->y == y){
return 1;
}
temp = temp->next;
}while(temp != NULL);
return 0;
}
int isDrawFood(int x, int y){
if(food->x == x && food->y == y){
return 1;
}
return 0;
}
int isOver(){
int x1=0, y1 =0;
switch(direction){
case LEFT :
x1 = -1;
y1 = 0;
break;
case RIGHT :
x1 = 1;
y1 = 0;
break;
case UP :
x1 = 0;
y1 = -1;
break;
case DOWN :
x1 = 0;
y1 = 1;
break;
}
if(header->x + x1 <= 0 || header->x + x1 >= WALL_LENGTH - 1
|| header->y + y1 <= 0 || header->y + y1 >= WALL_LENGTH - 1){
return 1;
}
return 0;
}
好久没写过C语言了,随便写个贪吃蛇玩一玩,BUG不少,当记录了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
以上是 DOS简易版C语言贪吃蛇 的全部内容, 来源链接: utcz.com/p/244615.html