티스토리 뷰

반응형

개발자의 C언어 독학 기초 # 간단한 게임을 만들어 보자

모든 강의 자료 : www.codingnow.co.kr/

이번시간에는 C언어 기본 문법을 사용하여 재미있는 게임을 만들어 보았다.

W

A S D

버튼을 눌러 ★을 이동하는 게임이다.

system("mode con:cols=100 lines=25"); //콜솔크기

이것은 콘솔의 크기를 조정하는 consol 창 명령이다.

GetKey( ) 함수에서 눌려진 키 값을 가져온다.

int GetKey(void)
{
  if(_kbhit() != 0)
  {
  	return _getch();
  }
  return 0;
}

GotoXY는 consol창 내에서의 커서 위치를 지정하는 기능을한다.

원하는 위치에 커서를 이동하고 그 위치에 원하는 값을 출력하는 목적이다.

void GotoXY(int x, int y)
{
  COORD Pos;
  Pos.X = 2*x;
  Pos.Y = y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);
}

입력 받은 키 값에 따라 ★ 의 위치를 지정하는 부분이다.

switch(key)
{
  case 'a'://left
  {
    if(x > 1) x-=1;
    break;
  }
  case 'd'://right
  {
    if(x < (X_MAX-2)) x+=1;
    break;
  }
  case 'w'://up
  {
    if(y > 1) y--;
    break;
  }
  case 's'://down
  {
    if(y < Y_MAX-2) y++;
    break;
  }
}

외곽을 그리는 부분이다.

------

|     |

------

for(int i=0; i<Y_MAX; i++)
{
  for(int k=0; k<X_MAX; k++)
  {
    if(i==0 || i==(Y_MAX-1))
    {
      GotoXY(k,i);
      printf("-",i);
    }
    if((i>0 && i < (Y_MAX-1)) && (k==0 || k==(X_MAX-1)))
    {
      GotoXY(k,i);
      printf("|",i);
    }
  }
}

지정된 위치에 ★ 을 출력한다.

GotoXY(x,y);
printf("★");

전체 화면을 그리고 80ms 동안 나타낸 다음 다시 그리기 위해 지운다.("cls")

Sleep(80);
system("cls"); //화면지움

전체 소스 코드이다.

#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해
#include <conio.h>


int GetKey(void)
{
  if(_kbhit() != 0)
  {
  	return _getch();
  }
  return 0;
}

void GotoXY(int x, int y)
{
  COORD Pos;
  Pos.X = 2*x;
  Pos.Y = y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);
}

#define X_MAX 20
#define Y_MAX 20

void main(void)
{
  system("chcp 65001"); //gcc 한글 깨짐
  system("cls"); //화면지움

  system("mode con:cols=100 lines=25"); //콜솔크기

  int key;
  int x=X_MAX/2,y=Y_MAX/2;

  while(1)
  {
    key = GetKey();

    switch(key)
    {
      case 'a'://left
      {
        if(x > 1) x-=1;
        break;
      }
      case 'd'://right
      {
        if(x < (X_MAX-2)) x+=1;
        break;
      }
      case 'w'://up
      {
        if(y > 1) y--;
        break;
      }
      case 's'://down
      {
        if(y < Y_MAX-2) y++;
        break;
      }
    }

    for(int i=0; i<Y_MAX; i++)
    {
      for(int k=0; k<X_MAX; k++)
      {
        if(i==0 || i==(Y_MAX-1))
        {
          GotoXY(k,i);
          printf("-",i);
        }
        if((i>0 && i < (Y_MAX-1)) && (k==0 || k==(X_MAX-1)))
        {
          GotoXY(k,i);
          printf("|",i);
        }
      }
    }

    GotoXY(x,y);
    printf("★");

    GotoXY(0,Y_MAX+1);
    printf("x = %d, y = %d\n",x,y);
    printf("A : Left, D : Right, W : Up, D : Down\n",x,y);

    Sleep(80);
    system("cls"); //화면지움

  }
	
  return;
}

 

반응형