DOS 간이 판 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("
");
}
}
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 언어 를 써 서 뱀 을 잡 아 먹고 놀 았 는데 버그 가 많아 서 기록 으로 삼 았 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.