BASIC4MCU | 질문게시판 | 답변 : codevision atmega128 endif 오류
페이지 정보
작성자 master 작성일2022-12-01 19:41 조회371회 댓글0건본문
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
#include <stdlib.h>
#include <alcd.h>
//
typedef unsigned char byte;
//
byte key; //스위치
byte shif1=15,shif2=0; //화살표이동 좌우 //똥1 //세로
byte shif3=15,shif4=0; //똥2
byte shif5=15,shif6=0; //똥3
byte led=0x07; //led 에너지 게이지
byte life=3; //생명
byte add=0,add1=0; //똥2 추가 //똥3 추가
byte ture=0; //초기시작
byte time[16]; //타이머 기능
byte se=0,mi=0; //초 //분
byte del=500; //속도 증가 감소.
//
byte font0[8]={0x11,0x11,0x0a,0x11,0x04,0x0e,0x1f,0x1f}; //똥 1
byte font1[8]={0x11,0x11,0x0a,0x11,0x04,0x0e,0x1f,0x1f}; //똥 2
byte font2[8]={0x11,0x11,0x0a,0x11,0x04,0x0e,0x1f,0x1f}; //똥 3
byte font3[8]={0x06,0x06,0x04,0x0F,0x14,0x04,0x0a,0x12}; //사람
//
void define_char(byte *pc,byte char_code){
byte i,a;
a=(char_code<<3)|0x40;
for(i=0;i<8;i++)lcd_write_byte(a++,*pc++);
}
//
interrupt [EXT_INT0] void ext_int0_isr(void){ key=1; }
interrupt [EXT_INT1] void ext_int1_isr(void){ key=2; }
interrupt [EXT_INT2] void ext_int2_isr(void){ key=3; }
//
void main(void){
PORTA=led; DDRA=0x07;
lcd_init(16);
lcd_gotoxy(0,0); lcd_putchar(3); //캐릭터 초기화
lcd_clear();
define_char(font0,0); //똥
define_char(font1,1); //똥2
define_char(font2,2); //똥3
define_char(font3,3); // 사람
shif6=rand()%((1-0)+1)+0;
shif4=rand()%((1-0)+1)+0;
shif2=rand()%((1-0)+1)+0;
EICRA=0xAA; EIFR=0x07; EIMSK=0x07; // Falling Edge
#asm("sei")
//shif1=15 좌우
while(1){
lcd_gotoxy(2,0); lcd_putsf("start game?");
lcd_gotoxy(0,1); lcd_putsf("push the botton"); //맨 처음 초기상태
if(key==1){ //key 1을 누르면 게임이 시작
ture=1;
while(1){ //shif2 라인.
if(++se>=60){ se=0; mi++; }
PORTA=led;
if(shif1==0){ shif2=rand()%((1-0)+1)+0; shif1=15; } //똥1 이동이 왼쪽으로 끝까지 갔을 때 초기화
if(shif3==0){ shif4=rand()%((1-0)+1)+0; shif3=15; } //똥2 이동이 왼쪽으로 끝까지
if(shif5==0){ shif6=rand()%((1-0)+1)+0; shif5=15; } //똥3 이동이 왼쪽으로 끝까지
if(key==2){ //스위치 두번쨰를 눌럿을때.
lcd_gotoxy(0,0); lcd_putchar(3); //1번 라인 이동
if(shif1==1&&shif2==0){ led=led>>1; PORTA=led; life--; } //캐릭터와 똥1이 충돌 일으킬 경우 shif1 1,shif2=0 일떄 충돌. //led 감소 //생명 감소
if(shif3==1&&shif4==0){ led=led>>1; PORTA=led; life--; } //똥2 와 캐릭터 충돌 //shif1 좌우 //led 감소 //shif2 위아래.
if(shif5==1&&shif6==0){ led=led>>1; PORTA=led; life--; } //똥 3 과 캐릭터 충돌
}
if(key==3){ //스위치 3번째것을 눌렀을 때.
lcd_gotoxy(0,1); lcd_putchar(3); //사람
if(shif1==1&&shif2==1){ led=led>>1; PORTA=led; life--; } //shif1 1,shif2=1 //똥1과 캐릭터가 충돌했을경우.
if(shif3==1&&shif4==1){ led=led>>1; PORTA=led; life--; } //똥2과 캐릭터가 충돌했을경우.
if(shif5==1&&shif6==1){ led=led>>1; PORTA=led; life--; } //똥3과 캐릭터가 충돌했을경우.
}
if(life==0){ //생명이 0일때.
lcd_gotoxy(0,0); lcd_putsf(" Game Over !!"); //게임 끝 표시
lcd_gotoxy(0,1); lcd_putsf(" One more time? ");
led=0x07; //led 초기화
delay_ms(3000);
lcd_clear();
life=3; //생명 초기화
lcd_gotoxy(3,0); lcd_putsf("play time");
sprintf(time," %i : %i ",mi,se); //타이머로 플레이 시간을 나타냄
lcd_gotoxy(3,1); lcd_puts(time);
delay_ms(3000);
mi=0;se=0;
ture=0; //while 문 빠저나와서 맨처음 초기상태로 돌아감
}
shif1--; //왼쪽으로 한칸씩 이동.
lcd_gotoxy(shif1,shif2); lcd_putchar(0); //x=15,y=0; //똥1
if(shif1==10) add=1; //똥2를 나타내기 위한 변수
if(add==1){
lcd_gotoxy(shif3,shif4); lcd_putchar(1); //x=15,y=0; //똥2
shif3--;
if(shif3==9){ add1=1; } //똥 2번째가 왼쪽 9번째일때 추가
if(add1==1){
lcd_gotoxy(shif5,shif6); lcd_putchar(2); //똥3
shif5--;
if(shif3==0)add=0; //똥2가 좌표 0일떄
if(shif5==0)add1=0; //똥3가 좌표 0일떄
}
delay_ms(del); //3ms 마다 한칸씩 이동
lcd_clear();
del=del-2; //시간이 갈수록 빨라짐
if(del<70){ del=500; } // 70보다 작을 때 다시 500ms로 초기화
}
}
}
}
}
들여쓰기를 잘 해야지 쓸데없는 데 시간을 허비하지 않습니다.
댓글 0
조회수 371등록된 댓글이 없습니다.