2일차
처음 시작 화면 메뉴를 화살표로 선택 진입
#include< stdio.h>
#include< conio.h>
#include< windows.h>
#include< stdlib.h>
#include< time.h>
#define UP 72
#define LEFT 75
#define RIGHT 77
#define DOWN 80
#define ENTER 13
void textcolor(int color_number) //텍스트 칼라를 바꿔주는 함수
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_number);
}
gotoxy(int x,int y)
{
COORD pos = ;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
//게임 시작 화면의 문구를 원하는 위치에 출력하고, 선택하기 위해 좌표 값을 지정해주는
//gotoxy함수를 사용했다.
void interface01()
{
int updown=1;
int x=10,y=5;
gotoxy(x,y);
system("cls");
fflush(stdin);
system("mode con: cols=150 lines=41"); //창 화면 크기
system("color 0b"); //색 변경
int i;
system("cls");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");
for(i=1; i<39; i++)
{
printf("■ ■");
}
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");
// 게임 시작 화면 테두리
textcolor(15);
gotoxy(64,10);
printf(" SNAKE GAME\n");
gotoxy(67,13);
printf(" MEUN\n");
gotoxy(64,16);
printf(" GAME START \n");
gotoxy(67,17);
printf(" EXIT \n");
gotoxy(59,16);
printf("▶");
// 게임 시작 화면 인터페이스
while(1)
{
switch(getch())
{
case UP:
updown=1;
gotoxy(59,17);
printf(" ");
gotoxy(59,16);
printf("▶");
break;
case DOWN:
updown=2;
gotoxy(59,16);
printf(" ");
gotoxy(59,17);
printf("▶");
break;
// game start , exit 선택
// scanf를 제외하고 enter를 입력받아 화면을 이동하도록 설정
case ENTER:
if(updown==1)
{
system("cls");
}
else
{
system("cls");
gotoxy(59,17);
printf("안녕히 가세요\n");
exit(0);
}
int i;
system("cls");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");
for(i=1; i<39; i++)
{
printf("■ ■");
}
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");
//게임시작
//게임 실행 코드가 삽입될 부분
//////////////////////////////////////////////////
뱀 먹이 만들기
void play()
{
int direction = UP;
int X = 19;
int Y = 38;
int FX, FY;
int eat= 0 ; //시작하자마자의 상태를 나타내주는 변수인데 이름이 부적절한 것 같다.
int length = 1; //현재 뱀의 길이를 나타내주는 변수. 아직은 머리만 구현중이기에 쓸데는 없다.
int SnakeNStar[40][40] = { 0 };
//먹이와 뱀의 위치를 저장해놓는 배열이다.
//먹이와 뱀이 곂치지 않게 해주는 역할.
//0이 공백, 1이 뱀, 2가 먹이이다.
SnakeNStar[X][Y/2] = 1;
gotoxy(Y, X);
printf("■");
while (1)
{
if (eat == 0)
{
srand((unsigned)time(NULL));
FX = rand() % 38 + 1;
FY = (rand() % 38 + 1) * 2;
SnakeNStar[FX][FY / 2] = 2;
gotoxy(FY, FX);
printf("★");
eat++;
}
//게임 시작 직후에 별을 하나 생성한다.
if (kbhit())
{
direction = getch();
}
switch (direction)
{
case UP:
if (SnakeNStar[X-1][Y / 2] == 2) // 만약 다음에 움직일 칸이 먹이라면
{
SnakeNStar[X][Y / 2] = 0; // 일단 현재칸을 0으로 만들고
gotoxy(Y, X); // 커서를 현재칸에 옮긴 뒤
printf(" "); // 공백을 채워준다.
SnakeNStar[--X][Y / 2] = 1; // 그리고 움직일 칸에 이동해서 1
gotoxy(Y, X); // 커서를 움직일 칸에 이동 후
printf("■"); // Snake를 그려줌
FX = rand() % 38 + 1; // 세로 랜덤값을 만들고
FY = (rand() % 38 + 1) * 2; // 가로 랜덤값을 만듬
while (1) // 먹이가 생성될 때 까지 무한반복
{
if (SnakeNStar[FX][FY / 2] != 1) // 먹이가 생성될 자리가 공백이면
{
SnakeNStar[FX][FY / 2] = 2; // 먹이값을 채워준다.
gotoxy(FY, FX); // 먹이 포인터를 이동한 후
printf("★"); // 먹이를 그림
break;
}
else // 먹이가 생성될 자리가 공백이 아니면
{
FX = rand() % 38 + 1; // 랜덤함수를 계속 돌린다.
FY = (rand() % 38 + 1) * 2;
}
}
}
else // 다음에 움직이는 칸이 공백이면
{
SnakeNStar[X][Y / 2] = 0; // 현재칸을 공백값으로 만들고
gotoxy(Y, X); // 커서를 현재칸으로 이동
printf(" "); // 공백을 채워줌
SnakeNStar[--X][Y / 2] = 1; // 다음에 움직이는 칸에 뱀값을 집어넣고
gotoxy(Y, X); // 커서를 다음칸으로 이동
printf("■"); // 뱀을 그려준다.
break;
}
case DOWN:
if (SnakeNStar[X + 1][Y / 2] == 2)
{
SnakeNStar[X][Y / 2] = 0;
gotoxy(Y, X);
printf(" ");
SnakeNStar[++X][Y / 2] = 1;
gotoxy(Y, X);
printf("■");
FX = rand() % 38 + 1;
FY = (rand() % 38 + 1) * 2;
while (1)
{
if (SnakeNStar[FX][FY / 2] != 1)
{
SnakeNStar[FX][FY / 2] = 2;
gotoxy(FY, FX);
printf("★");
break;
}
else
{
FX = rand() % 38 + 1;
FY = (rand() % 38 + 1) * 2;
}
}
}
else
{
SnakeNStar[X][Y / 2] = 0;
gotoxy(Y, X);
printf(" ");
SnakeNStar[++X][Y / 2] = 1;
gotoxy(Y, X);
printf("■");
break;
}
case LEFE:
if (SnakeNStar[X][(Y - 2) / 2] == 2)
{
SnakeNStar[X][Y / 2] = 0;
gotoxy(Y, X);
printf(" ");
SnakeNStar[X][(Y-=2) / 2] = 1;
gotoxy(Y, X);
printf("■");
FX = rand() % 38 + 1;
FY = (rand() % 38 + 1) * 2;
while (1)
{
if (SnakeNStar[FX][FY / 2] != 1)
{
SnakeNStar[FX][FY / 2] = 2;
gotoxy(FY, FX);
printf("★");
break;
}
else
{
FX = rand() % 38 + 1;
FY = (rand() % 38 + 1) * 2;
}
}
}
else
{
SnakeNStar[X][Y / 2] = 0;
gotoxy(Y, X);
printf(" ");
SnakeNStar[X][(Y-=2) / 2] = 1;
gotoxy(Y, X);
printf("■");
break;
}
case RIGHT:
if (SnakeNStar[X][(Y + 2) / 2] == 2)
{
SnakeNStar[X][Y / 2] = 0;
gotoxy(Y, X);
printf(" ");
SnakeNStar[X][(Y+=2) / 2] = 1;
gotoxy(Y, X);
printf("■");
FX = rand() % 38 + 1;
FY = (rand() % 38 + 1) * 2;
while (1)
{
if (SnakeNStar[FX][FY / 2] != 1)
{
SnakeNStar[FX][FY / 2] = 2;
gotoxy(FY, FX);
printf("★");
break;
}
else
{
FX = rand() % 38 + 1;
FY = (rand() % 38 + 1) * 2;
}
}
}
else
{
SnakeNStar[X][Y / 2] = 0;
gotoxy(Y, X);
printf(" ");
SnakeNStar[X][(Y+=2) / 2] = 1;
gotoxy(Y, X);
printf("■");
}
}
Sleep(70);
}
}
void main()
{
system("mode con: cols=150 lines=41");
interface01();
play();
}
수정해야 될 부분
- 화살표 부분 커서 제거
- 먹이를 완전히 먹지않고 닿기만 해도 먹이가 없어짐 => 왼쪽에서 먹으면 그렇지 않은데 case LEFT의 코드를 분석해야 함.
위에서 내려오며 먹이를 먹으면 왼쪽으로 한칸 이동함 => 코드를 잘 못 입력한 것 같다.
먹이가 이전 먹이와 가깝게 생기면 다음 먹이가 나오지 않음 => 먹이 생성 코드 수정.
1일차의 대부분의 문제점
다음 목표
- 게임 실행 부분 코드 삽입
- 뱀이 벽에 닿으면 죽음
- 엔딩 화면 제작
'C언어' 카테고리의 다른 글
C언어 로또 프로그램 만들기 (0) | 2015.08.26 |
---|---|
C언어 게임 만들기(5일차) (0) | 2015.08.26 |
C언어 게임 만들기(4일차) (0) | 2015.08.26 |
C언어 게임 만들기(3일차) (0) | 2015.08.26 |
C언어 게임 만들기(1일차) (0) | 2015.08.26 |