//숙제 코드, 수정 필요
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
int px=10 ;
int py=10 ;
int score=1;
int a=0; // 이동방향
void gotoxy(int x, int y)
{
COORD Pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
void map(int r1, int r2)
{
gotoxy(px,py);
printf ("*");
gotoxy(r1,r2);
printf ("@");
}
void init() //초기상태
{
for (int x=0; x<31; x++){
for (int y=0; y<31; y++){
gotoxy(x, y);
if (x==0||y==0||x==30||y==30){
printf (".");
}
}
}
gotoxy(45,2);
printf("점수 : %d", score);
}
int main()
{
char c;
int e, e2;
//추가된 변수
int x, y;
int n, i;
srand(time(NULL)); //랜덤 시드 설정 (최초 한 번만!)
int random = rand()%29+1;
int random2=rand()%29+1;
for (;;){
e=px;
e2=py;
if (_kbhit()) { //키보드 입력 확인 (true / false)
c = _getch();
if(c=='q')
{
gotoxy (0,31);
printf ("정말로 종료 하시겠습니까?\n예:a 아니요:b");
c=_getch();
if (c=='a'){
return 0;
}
else{
system("cls");
}
}
if (c == -32) { // -32로 입력되면
c = _getch(); // 새로 입력값을 판별하여 상하좌우 출력
switch (c) {
case LEFT:
if (a==3||a==4)
x=px;
y=py;
n=a;
if (a==2&&score!=1){
break;
}
a=1;
break;
case RIGHT:
if (a==3||a==4)
x=px;
y=py;
n=a;
if (a==1&&score!=1){
break;
}
a=2;
break;
case UP:
if (a==1||a==2)
x=px;
y=py;
n=a;
if (a==4&&score!=1){
break;
}
a=3;
break;
case DOWN:
if (a==1||a==2)
x=px;
y=py;
n=a;
if (a==3&&score!=1){
break;
}
a=4;
break;
}
}
}
switch (a){
case 1:
px--;
break;
case 2:
px++;
break;
case 3:
py--;
break;
case 4:
py++;
break;
}
//추가된 것
if (n==1||n==3){
for (i=1; i<score; i++){
if (n==1){
gotoxy (e+i-1, e2);
}
else {
gotoxy (e, e2+i-1);
}
if (i==score-1){
n=0;
}
}
}
else if (n==2||n==4){
for (i=score-1; i>0; i--){
if (n==2){
gotoxy (e+i+1, e2);
}
else {
gotoxy (e, e2+i+1);
}
if (i==1){
n=0;
}
}
}
if(px==0||px==31||py==0||py==31){
system ("cls");
printf ("\n점수 : %d\n", score);
return 0;
}
map(random, random2);
if(a==1){ // left
gotoxy (e+score-1, e2 );
}
else if(a==2){
gotoxy (e-score+1, e2);
}
else if(a==3){
gotoxy (e, e2+score-1);
}
else{
gotoxy (e, e2-score+1);
}
printf (" ");
if (px==random&&py==random2){
printf(" ");
gotoxy (random, random2);
printf (" ");
random=rand()%29+1;
random2=rand()%29+1;
gotoxy(random, random2);
printf ("@");
score++;
}
init();
Sleep(70);
}
}
/*
*********게임 기능 정리 *********
1. 누른 방향키 방향대로 직진함
2. 벽에 닿으면 게임이 끝남
3. 아이템 @를 먹으면 몸이 1칸씩 늘어남+점수가 늘어남
**************************/