[C++]°­ÁÂ(20)<--Ŭ·¡½º ¹è¿­ ¹× Æ÷ÀÎÅÍ





brick.cpp¿¡¼­ ¿ì¼± ÁÖ¸ñÇÒ °ÍÀº ¼±µÎÀÇ extern ¼±¾ðÀÌ´Ù. º®µ¹ÀÇ ¸ð¾çÀ» Á¤ÀÇ
ÇÑ pat ¹è¿­°ú brickpatnum ¹è¿­Àº shtet2.cpp¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç, °ÔÀÓ È­¸é
ÀÇ °¢ °ÝÀÚ »óŸ¦ º¸°üÇÏ´Â tet ¹è¿­µµ shtet2.cpp¿¡ Á¤ÀǵǾî ÀÖ´Ù.
¿ÜºÎ module¿¡ ÀÖ´Â º¯¼ö¸¦ ÂüÁ¶Çϱâ À§Çؼ­´Â ¹Ýµå½Ã extern ¼±¾ðÀ¸·Î ±× º¯
¼ö°¡ ¿ÜºÎ¿¡ ÀÖÀ½À» ¾Ë·Á¾ß ÇÑ´Ù. ÇÔ¼ö´Â ±â¾ïºÎ·ù°¡ ¿ø·¡ externÀ̱⠶§¹®¿¡
º°µµÀÇ Á¶Ä¡¸¦ ÃëÇÏÁö ¾Ê´õ¶óµµ ¿ÜºÎ ¸ðµâ·Î ¾Ë·ÁÁö°í »óÈ£ È£ÃâÀÌ °¡´ÉÇÏÁö¸¸
º¯¼ö´Â extern ¼±¾ð¿¡ ÀÇÇØ ±× º¯¼ö°¡ ¿ÜºÎ¿¡ Á¤ÀǵǾî ÀÖÀ½À» ¾Ë·Á ÁÖ¾î¾ß ¸µ
Å©½Ã¿¡ ÀÌ»ó¾øÀÌ ¿¬°áµÈ´Ù.
brick.cpp¿¡¼­ Á¤ÀÇÇÑ brick Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼öµéÀº ´ëºÎºÐ shtet1.c¿¡ ºñÇØ
Å©°Ô ¹Ù²îÁö ¾Ê¾ÒÁö¸¸ isfull ÇÔ¼ö´Â ´Ù¼Ò ¸¹ÀÌ º¯°æµÇ¾ú´Ù. ¿ì¼± VGA¸¦ ÀǽÄ
ÇÏ¿© º®µ¹ÀÌ ¾Ë·Ï´Þ·ÏÇÑ »ö»óÀ» °¡Áú ¼ö ÀÖµµ·Ï ¹Ù²î¾ú±â ¶§¹®¿¡ È­¸éÀ» °»½Å
ÇÏ´Â °úÁ¤ÀÌ ¹Ù²î¾ú´Ù. º®µ¹ÀÌ ¸ðµÎ °°Àº »ö»óÀÏ °æ¿ì´Â ¹è¿­ÀÇ µ¥ÀÌÅ͸¸ Á¶ÀÛ
ÇÑ ÈÄ ÇѲ¨¹ø¿¡ º®µ¹À» ´Ù½Ã ±×·ÈÁö¸¸ °¢ º®µ¹ÀÌ »ö»óÀ» °¡Áö°í ÀÖÀ» °æ¿ì´Â
¹è¿­ ³»¿¡ »ö»ó¿¡ °üÇÑ Á¤º¸¸¦ º¸°üÇÏÁö ¾Ê±â ¶§¹®¿¡ ¹è¿­À» ÂüÁ¶ÇÏ¿© ´Ù½Ã ±×
¸± ¼ö ¾ø´Ù.
±×·¡¼­ ÇÑ ÁÙÀÌ »èÁ¦µÉ ¶§¸¶´Ù È­¸éÀ» ±×´ë·Î Àо ÇÑ ÁÙÀ» ³»¸®µµ·Ï º¯°æ
µÇ¾ú´Ù. ¿©±â¿¡ »ç¿ëµÇ´Â ÇÔ¼ö´Â movetext ÇÔ¼öÀ̸ç Àß ¾Ë¾ÆµÎ¸é ÅؽºÆ® ¸ðµå
ÇÁ·Î±×·¡¹Ö½Ã¿¡ À¯¿ëÇÏ°Ô ¾µ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö¿¡ °üÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº ·¹ÆÛ·±½º
¸¦ ÂüÁ¶Çϵµ·Ï Ç϶ó.
°ÔÀÓ¿¡ Á¡¼ö äÁ¡ ±â´ÉÀÌ Ãß°¡µÊÀ¸·Î½á isfull ÇÔ¼ö¿¡¼­ »èÁ¦ÇÑ ÁÙ ¼ö¿¡ ºñ·Ê
ÇÏ¿© Á¡¼ö¸¦ Áõ°¡½ÃÅ°°í ÀÖ´Ù. ƯÈ÷ 4ÁÙÀÌ ÇѲ¨¹ø¿¡ ¾ø¾îÁú °æ¿ì´Â(ÀÌ °æ¿ì¸¦
tetris¶ó°í ÇÔ) Á¡¼ö¸¦ ³ô°Ô ÁÜ°ú µ¿½Ã¿¡ sound¸¦ »ö´Ù¸£°Ô Ãâ·ÂÇÏ°í È­¸é»ó¿¡
tetris ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù.
°ÔÀÓ¿¡ ÀÌ·± °íµæÁ¡ ¿ä¼Ò¸¦ ¸¸µé¾î µÎ´Â °ÍÀº °ÔÀÓÀ» ´õ¿í Àç¹ÌÀÖ°Ô ¸¸µå´Â
¿ä¼Ò°¡ µÈ´Ù. ½ÇÁ¦·Î °ÔÀÓÀ» Çغ¸¸é ¾Ë°ÚÁö¸¸ 4ÁÙÀ» ÇѲ¨¹ø¿¡ ¾ø¾Ö±â¶õ ½±Áö°¡
¾ÊÀ¸¸ç Á¡¼ö¸¦ ³ô°Ô ¾ò±â À§Çؼ­´Â tetris¸¦ ³ë¸± ¼ö¹Û¿¡ ¾ø´Ù. tetris¸¦ ³ë¸®
´Ù º¸¸é °ÔÀÓÀÌ ¶æ´ë·Î µÇÁö ¾Ê°Ô µÇ°í ±×·¡¼­ °ÔÀÓÀ» ÀÚ²Ù ÇÏ°Ô µÈ´Ù. ´Ü¼øÈ÷
º®µ¹À» ¾ø¾Ö±â¸¸ ÇÏ´Â °ÔÀÓÀº Àç¹Ì°¡ ¾ø´Ù.
shtet2¿¡´Â Á¡¼ö¸¦ ±â·ÏÇÏ´Â ±â´ÉÀÌ Ãß°¡µÇ¾úÀ¸¸ç Á¡¼öÀÇ ±â·ÏÀº Score Ŭ·¡
½º¿¡¼­ ó¸®ÇÑ´Ù. ¸¶Âù°¡Áö·Î Ŭ·¡½ºÀÇ Á¤ÀÇ´Â Çì´õ ÆÄÀÏ¿¡ µÎ°í ¸â¹ö ÇÔ¼öÀÇ
Á¤ÀÇ´Â CPP ÆÄÀÏ¿¡ µÐ´Ù.

// SCORE.H
// Á¡¼ö classÀÇ ¼±¾ð
// Score´Â Á¡¼ö¿Í »ç¶÷ÀÇ À̸§ ¹®ÀÚ¿­À» ÀúÀåÇϸç ÆÄÀÏ·Î Á¡¼ö ÆÄÀÏÀ» º¸°ü
// Çϸç Àоî¿Ã ¼ö ÀÖ´Â ¸â¹ö ÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù.
struct scorestruct   // Á¡¼ö¿Í »ç¶÷ À̸§À» º¸°üÇϱâ
 {                  // À§ÇÑ ±¸Á¶Ã¼ÀÇ Á¤ÀÇ
 int score;
 char name[20];
 };
class Score
 {
 public:
   scorestruct record[10];   // 10¸íÀÇ Á¡¼ö¸¦ º¸°ü
   char path[128];
   Score();
   void load();
   void save();
   void out();
   int soonwi(int);
   void insert(int,char *);
 };
                    <<score.h>>

Á¡¼ö¸¦ º¸°üÇϱâ À§ÇØ scorestruct¶ó´Â ±¸Á¶Ã¼¸¦ »ç¿ëÇϸç ÀÌ ±¸Á¶Ã¼¿¡´Â µæ
Á¡ÇÑ Á¡¼ö¿Í °ÔÀÓÀ» ÇÑ »ç¶÷ÀÇ À̸§À» ´ãÀ» ¼ö ÀÖ´Â µ¥ÀÌÅÍ ¸â¹ö°¡ ÀÖ´Ù. Score
Ŭ·¡½º¿¡¼­´Â Å©±â°¡ 10ÀÎ scorestruct ±¸Á¶Ã¼ ¹è¿­À» µ¥ÀÌÅÍ ¸â¹ö·Î °¡ÁüÀ¸·Î
½á 10¸íÀÇ Á¡¼ö¸¦ °ü¸®ÇÑ´Ù. ¹è¿­ÀÇ Å©±â¸¦ Å©°Ô ÇØÁÖ¸é ´õ ¸¹Àº ¼öÀÇ Á¡¼ö¸¦
º¸°üÇÒ ¼öµµ ÀÖ´Ù. Á¡¼öÀÇ º¸°üÀº ´ÙÀ½¿¡ ´Ù½Ã gameÀ» ÇÏ´õ¶óµµ °ú°ÅÀÇ ±â·ÏÀÌ
°è¼Ó À¯ÁöµÉ ¼ö ÀÖµµ·Ï µð½ºÅ©¿¡ ÆÄÀÏÀÇ ÇüÅ·ΠÀúÀåÇϴµ¥ Score Ŭ·¡½º¿¡¼­
´Â shtet2.exe°¡ ÀÖ´Â µð·ºÅ丮¿¡ shtet2.sco¶ó´Â µ¥ÀÌÅÍ ÆÄÀÏÀ» µÎ¾î Á¡¼ö¸¦
º¸°üÇÑ´Ù. Score Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö¸¦ º¸ÀÚ.

// SCORE.CPP Score classÀÇ ¸â¹ö ÇÔ¼ö Á¤ÀÇ
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <io.h>
#include <string.h>
#include <dir.h>
#include "score.h"
// »ý¼ºÀÚ: shtet2.sco°¡ ÀÖ´ÂÁö º¸°í ¾øÀ¸¸é ¸¸µç´Ù.
// À̶§ shtet2.sco´Â ¹Ýµå½Ã shtet2.exe¿Í °°Àº
// directory¿¡ µÒÀ¸·Î½á pathÁöÁ¤¿¡ ÀÇÇØ shtet2.exe
// ¸¦ ½ÇÇà½ÃÅ°´õ¶óµµ data ÆÄÀÏÀ» ÀÌ»ó¾øÀÌ Ã£¾Æ³½´Ù.
Score::Score()
{
strcpy(path,searchpath("shtet2.exe"));// ½ÇÇà ÆÄÀÏÀÇ À§Ä¡ ãÀ½
path[strlen(path)-10]=0; // path¿¡¼­ ½ÇÇà ÆÄÀÏÀÇ À̸§Àº ¹ö¸²
strcat(path,"shtet2.sco");        // ½ÇÇà ÆÄÀÏ´ë½Å¿¡  
data ÆÄÀÏÀÇ À̸§
if (access(path,0)==0) return;  // data ÆÄÀÏÀÌ ÀÖÀ¸¸é return
ofstream scofile;
scofile.open(path,ios::binary);        // data ÆÄÀÏÀ» ¸¸µç´Ù.
for (int i=0;i<10;i++)                 // default Á¡¼ö
 {
 record[i].score=100;
 strcpy(record[i].name,"KIM SANG HYUNG");
 }
scofile.write((unsigned char *)record,220);
scofile.close();
}
// data ÆÄÀÏÀ» Àоî¿Â´Ù. »ý¼ºÀÚ¿¡¼­ data°¡ ¾øÀ» °æ¿ì
// ¶óµµ ¸¸µé¾îÁֱ⠶§¹®¿¡ ¸øÀÐÀ» °æ¿ì°¡ ¾ø´Ù.
void Score::load()
{
ifstream scofile(path);
scofile.read((unsigned char *)record,220);
scofile.close();
}
// data ÆÄÀÏÀ» disk¿¡ º¸°üÇÑ´Ù.
void Score::save()
{
ofstream scofile(path);
scofile.write((unsigned char *)record,220);
scofile.close();
}
// »õ·Î¿î score¸¦ ÀÛ¼ºÇÑ´Ù. sco´Â °»½ÅµÈ Á¡¼ö
// nameÀº °»½ÅÇÑ »ç¶÷ÀÇ À̸§ÀÌ´Ù.
void Score::insert(int sco,char *name)
{
int j=0;
int sw=soonwi(sco);
if (sw>10) return;              // 10µî ¹ÛÀÌ¸é »ðÀÔÇÏÁö ¾ÊÀ½
for (int i=0;i<10;i++)          // µî·ÏµÈ ÃÖÇÏ Á¡¼ö¸¦ ã¾Æ³¿
 if (record[j].score > record[i].score) j=i;
record[j].score=sco;            // ±× ÀÚ¸®¿¡ µ¤¾î ¾¸
strcpy(record[j].name,name);
}
// ¼øÀ§¸¦ ¸Å±ä´Ù. sco´Â ¼øÀ§¸¦ ¸Å±æ Á¡¼öÀÌ´Ù.
int Score::soonwi(int sco)
{
int j=1;
for (int i=0;i<10;i++)
 if (record[i].score > sco) j++;
return j;
}
// Á¡¼öÀÇ Ãâ·Â. Ãâ·ÂÇϱâ Àü¿¡ Á¡¼ö¸¦ ³»¸²Â÷¼øÀ¸·Î Á¤·Ä
// ÇÑ´Ù. sort¿¡ »ç¿ëµÈ ¾Ù°Å¸®µëÀº bubble Á¤·ÄÀÌ´Ù.
void Score::out()
{
int imsiscore;
char imsiname[20];
clrscr();
int i=9,j;
while (i!=0)    // ÀÌ ·çÇÁ°¡ bubble sort
 {
 for (j=0;j<=i-1;j++)
   if (record[j].score < record[j+1].score)
     {
     imsiscore=record[j].score;
     record[j].score=record[j+1].score;
     record[j+1].score=imsiscore;
     strcpy(imsiname,record[j].name);
     strcpy(record[j].name,record[j+1].name);
     strcpy(record[j+1].name,imsiname);
     }
 i--;
 }
gotoxy(25,2);   // Á¤·ÄµÈ Á¡¼ö¸¦ ¼ø¼­´ë·Î Ãâ·Â
cout << "No  score    name";
for (i=0;i<10;i++)
 {
 gotoxy(25,i*2+4);
 cout << i+1 << " :  " << record[i].score << "     "
      << record[i].name << endl;
 }
}
                    <<score.cpp>>

°¢ ¸â¹ö ÇÔ¼öº°·Î ¼³¸íÇ쵂 ¼Ò½º¿¡ ±â·ÏµÇ¾î ÀÖ´Â ÁÖ¼®¹®°ú ÇÔ²² ÂüÁ¶Çϱ⠹Ù
¶õ´Ù.


À̾ °è¼ÓµË´Ï´Ù. ==============>>>>>>>


--------------------------------------------------------------------------------

    

 ´ÙÀ½