2011년5월25일_두더지게임 업그레이드 기획 (시작화면, 메뉴, 문자그림, 보너스두더지), ATmega128 내부EEPROM에 순위데이터저장

 

 

시작 화면과 메뉴

 

image

오프닝화면을 열심히 그렸으나…
하이퍼터미널은 이미지를 그릴 수 없었다. OTL

그래서 다음과 같이,

 

image

 

문자를 이용하여 그림을 그렸다.

이 화면을 출력하고 난 다음의 커서의 위치가 EXIT의 T다음에 있으므로 위에 두더지가 랜덤하게 올라왔다 내려가는 모습과,
메뉴선택시 왼쪽 점이 움직이는 것을 구현하려면,
① 전체화면을 지우고 다시 그린다.
② 변경된 부분만 수정한다.

이런 방법이 있겠으나 커서를 위로 가게 하는 제어문자를 알아 내지 못 하여 화면전환 0x0C 제어문자를 이용하여,
하면을 초기화하고 전체화면을 다시 그리는 법을 택하기로 하였다.

 

 

보너스 두더지

 

image

일반적인 두더지는 약1초간 LED가 계속 ON상태를 유지하는 것을 말하며,
상기의 보너스두더지란 약1초간 LED가 켜지는데 0.1초간 ON, 0.1초간 OFF를 반복하여 깜빡이는 것을 말함.

보너스두더지를 잡으면 +10점이 되나 총 100점을 초과할 수 없으므로 이 부분에 대한 조건을 추가해야 할 것이다.

 

 

ATmega128 내부EEPROM에 순위 데이터 저장

 

   1:  //점수를 정렬하며 EEPROM에 기록
   2:          
   3:  eeprom_write(6, ucScore);           //맨 밑에 점수를 일단 집어넣고,
   4:          
   5:  for(cRep = 6 ; 1 < cRep ; --cRep)          //맨 밑에서 부터 바로 위에 데이터와 비교시작
   6:  {
   7:      if(eeprom_read(cRep) > eeprom_read(cRep - 1))         //대소 비교 후 크면
   8:      {
   9:          cTemp = eeprom_read(cRep - 1);                    //위에 데이터와 교체
  10:          eeprom_write(cRep - 1, eeprom_read(cRep));
  11:          eeprom_write(cRep, cTemp);
  12:      }
  13:  }

 

상기의 eeprom_write부분이 6번 반복하는 반복문내에 있어 항상 10회 쓰기를 수행할 것이다.
1회 수행시간이 보통 수ms에서 최대 10ms이니 최대 120ms의 시간이 소요된다.
이를 해결하려면 EEPROM의 데이터를 읽어와 SRAM에 로드한 다음에,
점수정렬을 하고 한 번에 5번만 쓰는 것이다.

이렇게 하면 게임을 100회하였다고 하였을 때,
1Byte쓰기방식의 경우 (10번 + 1번) * 100회 = 1100번 쓰기를 수행한다.
블록단위쓰기방식의 경우 (5번) * 100회 = 500번 쓰기로,
1Byte씩 읽고 쓰기를 수행하는 방식보다 많이 빠르고 EEPROM수명에도 좋다.