『Lena's by ☆볶기!!』: Restart !!

Rorolena
슈팅게임 (시스탬 프로그래밍)
 
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define PLAYER_BULLET_MAX 20
typedef struct _bullet
{
 int x;
 int y;
 bool fire;
} BULLET;
char bg[25][80];
int playerX;
int playerY;
int enemyX;
int enemyY;
int delaytime;
BULLET playerBullet[PLAYER_BULLET_MAX];
void PrintfScreen(void);
void ClearScreen(void);
void GameMain(void);
void KeyControl(void);
void BulletDraw(void);
void PlayerDraw(void);
void EnemyDraw(void);
void EnemyMove(void);
void ClashEenmyAndBullet(void);
void main(void)
{
 playerX = 0;
 playerY = 12;
 enemyX = 77;
 enemyY = 12;
 for(int i=0; i<PLAYER_BULLET_MAX; i++)
 {
  playerBullet[i].x = 0;
  playerBullet[i].y = 0;
  playerBullet[i].fire = false;
 }
 for(;;)
 {
  ClearScreen();
  GameMain();

  PrintfScreen();
 }
}
void PrintfScreen(void)
{
 bg[24][79] = 0;
 printf("%s", bg);
}
void ClearScreen(void)
{
 system("cls");
 for(int y=0; y<25; y++)
 {
  for(int x=0; x<80; x++)
  {
   bg[y][x] = ' ';
  }
 }
}
void GameMain(void)
{
 KeyControl();
 BulletDraw();
 PlayerDraw();
 EnemyMove();
 EnemyDraw();
 ClashEenmyAndBullet();
}
void KeyControl(void)
{
 char pressKey;
 if(kbhit())
 {
  pressKey = getch();
  switch(pressKey)
  {
  case 72:
   playerY--;
   if(playerY < 1)
     playerY=1;
   break;
  case 75:
   playerX--;
   if(playerX<0)
    playerX=0;
   break;
  case 77:
   playerX++;
   if(playerX>75)
    playerX=75;
   break;
  case 80:
   playerY++;
   if(playerY>23)
    playerY=23;
  case 32:
  {
   for(int i=0; i<PLAYER_BULLET_MAX; i++)
   {
    if(playerBullet[i].fire == false)
    {
     playerBullet[i].fire = true;
     playerBullet[i].x = playerX + 5;
     playerBullet[i].y = playerY;
     break;
    }
   }
   break;
  }
  case 27:
   exit(0);
  return;
  }
 }
}
void BulletDraw(void)
{
 for(int i=0; i<PLAYER_BULLET_MAX; i++)
 {
  if(playerBullet[i].fire == true)
  {
   bg[playerBullet[i].y][playerBullet[i].x - 1]='-';
   bg[playerBullet[i].y][playerBullet[i].x + 0]='>';
   playerBullet[i].x++;
   if(playerBullet[i].x > 79)
   {
    playerBullet[i].fire = false;
   }
  }
 }
}
void PlayerDraw(void)
{
 bg[playerY-1][playerX+0]='-';
 bg[playerY-1][playerX+1]='>';
 bg[playerY+0][playerX+1]='>';
 bg[playerY+0][playerX+2]='>';
 bg[playerY+0][playerX+3]='>';
 bg[playerY+1][playerX+0]='-';
 bg[playerY+1][playerX+1]='>';
}
void EnemyDraw(void)
{
 bg[enemyY-0][enemyX-2]='<';
 bg[enemyY+0][enemyX-1]='-';
 bg[enemyY+0][enemyX+0]='0';
 bg[enemyY+0][enemyX+1]='-';
 bg[enemyY+0][enemyX+2]='>';
}
void EnemyMove(void)
{
 if(delaytime >5)
 {
  delaytime =0;
  enemyX--;
 }
 delaytime++;
 enemyX--;
 if(enemyX<2)
 {
  enemyX = 77;
  enemyY = (rand()%20) + 2;
 }
}
void ClashEenmyAndBullet(void)
{
 for(int i=0; i<PLAYER_BULLET_MAX; i++)
 {
  if(playerBullet[i].fire == true)
  {
   if(playerBullet[i].y == enemyY)
   {
    if((playerBullet[i].x >= (enemyX-1)) && (playerBullet[i].x <= (enemyX+1)))
    {
     enemyX = 77;
     enemyY = (rand()%20) + 2;
     playerBullet[i].fire = false;
    }
   }
  }
 }
}

'보관소 ▦ ━━ > 작업 기록' 카테고리의 다른 글

1-5 프로그램 흐름을 조절하는 법  (0) 2008.06.19
[프롤로그]  (0) 2008.06.14
1-4 정보를 가공하는 법  (0) 2008.06.14
1-3 정보의 종류  (0) 2008.06.14