Anasayfa
> Yazılımlar > Yılan Oyunu LPC1768+GLCD
Yılan Oyunu LPC1768+GLCD
Tekrar Merhaba yılan oyununu bilmeyen yoktur. Yılan yürür, yemi yer boyu uzar. Duvarlara, engellere yada kuyruğunuza çarpmamanız gerekir.
Düşündümde bu oyunun algoritmasını çıkartmak çok zor değil deyip sıvadım kolları ilk oyunumu yazdım. Eylenceli bir iş çıktı ortaya.
Oyunu 3 seviyeli tasarladım. Resimlerdede görüldüğü gibi ayrıca Skor Board ekledim multiplayer oynamak isteyenleri de düşünerek 🙂
1. Seviye duvarlardan geçemezsiniz kuyruğa ve duvarlara çarpınca oyun biter.
2. Seviye duvarlardan geçebilirsiniz. Sadece kuyuğa çarpınca oyun biter.
3. Seviye duvarlardan geçersiniz ancak engellere ve kuyruğa çarpınca oyun biter.
Keil Vusion-4 ortamında derlenmiş proje dosyasını indirmek için tıklayınız.
main.c
/* Coşkun ERGAN Yılan Oyunu */ #include <LPC17xx.h> #include <stdio.h> #include "delay.h" #include "ks0108.h" /******************************************************************************/ #define Esc (!((LPC_GPIO1 -> FIOPIN>>10)&1)) #define Ent (!((LPC_GPIO1 -> FIOPIN>>9)&1)) #define Yuk (!((LPC_GPIO1 -> FIOPIN>>0)&1)) #define Asa (!((LPC_GPIO1 -> FIOPIN>>8)&1)) #define Sag (!((LPC_GPIO1 -> FIOPIN>>4)&1)) #define Sol (!((LPC_GPIO1 -> FIOPIN>>1)&1)) #define sag 1 #define sol 2 #define asa 3 #define yuk 4 #define ent 5 unsigned char yilan_harita[251]; unsigned char duvar[33]={80,55,56,57,58,155,180,181,182,183,71,70,69,68,96,171,196,195,194,193}; unsigned char ekran_p[16]; unsigned char ekran_s[16]; unsigned char kordinat,yon,yon_h,pause=0; unsigned char random=10,boy=3; unsigned char x,y,t,i,i_h,yem; unsigned int puan=0,kont,kont2,seviye=1; unsigned int puan_A=0,puan_B=0,puan_C=0,puan_D=0; unsigned char sev_A=0,sev_B=0,sev_C=0,sev_D=0; void Hakkinda(void); void Skor_Board(void); void Seviye(void); void Oyun(void); void Giris_Sayfasi(void); void noktala(unsigned char kordinat,unsigned char dolu); char Yilan_Sur(void); void Yem_Ekle(unsigned char random); /*******************************************************************************/ /*******************************************************************************/ /*******************************************************************************/ int main(void) { SystemInit (); SysTick_Config(12000000/1000); ks0108_init(); LPC_GPIO0->FIODIR = 0xFFFFFFFF; LPC_GPIO1->FIODIR = 0xFFFF0000; LPC_GPIO2->FIODIR = 0xFFFFFFFF; LPC_GPIO3->FIODIR = 0xFFFFFFFF; while (1) // main dongusu { ks0108_fill(0); ks0108_text(33,2,"YIlan Oyunu",1,1); ks0108_line(0,10,127,10,1); ks0108_line(0,60,127,60,1); ks0108_text(37,15,"Yeni Oyun",1,1); ks0108_text(45,26,"Seviye",1,1); ks0108_text(35,37,"Skor Board",1,1); ks0108_text(40,48,"HakkInda",1,1); i=0;i_h=4; while(1){ Giris_Sayfasi(); if(Ent){ if(i==0){Oyun();break;} if(i==1){Seviye();break;} if(i==2){Skor_Board();break;} if(i==3){Hakkinda();break;} } } } } /*******************************************************************************/ /*******************************************************************************/ /*******************************************************************************/ void Hakkinda(void) { ks0108_fill(0); ks0108_text(33,2,"YIlan Oyunu",1,1); ks0108_line(0,10,127,10,1); ks0108_line(0,60,127,60,1); ks0108_text(5,15,"ExpKits EX33DS Board",1,1); ks0108_text(35,26,"LPC176x MCU",1,1); ks0108_text(53,37,"X-Fi",1,1); ks0108_text(30,48,"Versiyon:1.2",1,1); while(!Esc); } /*******************************************************************************/ void Skor_Board(void) { ks0108_fill(0); ks0108_text(33,2,"Skor Board",1,1); ks0108_line(0,10,127,10,1); ks0108_line(0,60,127,60,1); if(!sev_A)sprintf(ekran_p,"1. -- -----",puan_A,sev_A); else sprintf(ekran_p,"1. %2d Sev-%1d",puan_A,sev_A); ks0108_text(20,15,ekran_p,1,1); if(!sev_B)sprintf(ekran_p,"2. -- -----",puan_B,sev_B); else sprintf(ekran_p,"2. %2d Sev-%1d",puan_B,sev_B); ks0108_text(20,26,ekran_p,1,1); if(!sev_C)sprintf(ekran_p,"3. -- -----",puan_C,sev_C); else sprintf(ekran_p,"3. %2d Sev-%1d",puan_C,sev_C); ks0108_text(20,37,ekran_p,1,1); if(!sev_D)sprintf(ekran_p,"4. -- -----",puan_D,sev_D); else sprintf(ekran_p,"4. %2d Sev-%1d",puan_D,sev_D); ks0108_text(20,48,ekran_p,1,1); while(!Esc); } /*******************************************************************************/ void Seviye(void) { ks0108_fill(0); ks0108_text(30,2,"Seviye AyarI",1,1); ks0108_line(0,10,127,10,1); ks0108_line(0,60,127,60,1); ks0108_text(35,20,"1. Seviye",1,1); ks0108_text(35,31,"2. Seviye",1,1); ks0108_text(35,42,"3. Seviye",1,1); i=seviye-1;i_h=4; while(1) { if(seviye==1)ks0108_circle(20,23,3,1,1); else {ks0108_circle(20,23,3,1,0);ks0108_circle(20,23,3,0,1);} if(seviye==2)ks0108_circle(20,34,3,1,1); else { ks0108_circle(20,34,3,1,0); ks0108_circle(20,34,3,0,1);} if(seviye==3)ks0108_circle(20,45,3,1,1); else {ks0108_circle(20,45,3,1,0); ks0108_circle(20,45,3,0,1);} if(i_h==0) { ks0108_rect(30,19,98,27,1,0); ks0108_text(35,20,"1. Seviye",1,1); } if(i==0){ ks0108_rect(30,19,98,27,1,1); ks0108_text(35,20,"1. Seviye",1,0); } if(i_h==1){ ks0108_rect(30,30,98,38,1,0); ks0108_text(35,31,"2. Seviye",1,1); } if(i==1){ ks0108_rect(30,30,98,38,1,1); ks0108_text(35,31,"2. Seviye",1,0); } if(i_h==2){ ks0108_rect(30,41,98,49,1,0); ks0108_text(35,42,"3. Seviye",1,1); } if(i==2){ ks0108_rect(30,41,98,49,1,1); ks0108_text(35,42,"3. Seviye",1,0); } while(Sag); while(Sol); while(Asa); while(Yuk); DelayMs(10); while(1){ i_h=i; if(Sag){i++;break;} if(Sol){i--;break;} if(Asa){i++;break;} if(Yuk){i--;break;} if(Ent){seviye=i+1;break;} if(Esc)break; } if(Esc)break; if(i==3)i=0; if(i==255)i=2; } } /*******************************************************************************/ void Oyun(void) { ks0108_fill(0); if(seviye==1)ks0108_rect(0,0,127,63, 0,1); else ks0108_rect(0,52,127,63, 0,1); ks0108_line(0,52,127,52,1); if(seviye==3){ ks0108_rect(22,12,40,15,1,1); ks0108_rect(22,12,25,20,1,1); ks0108_rect(22,37,40,40,1,1); ks0108_rect(22,32,25,38,1,1); ks0108_rect(87,37,105,40,1,1); ks0108_rect(102,32,105,38,1,1); ks0108_rect(87,12,105,15,1,1); ks0108_rect(102,12,105,20,1,1); } puan=0; sprintf(ekran_p,"Puan: %2d",puan); ks0108_text(4,55,ekran_p,1,1); sprintf(ekran_s,"Seviye:%1d",seviye); ks0108_text(77,55,ekran_s,1,1); for(i=0; i<251; i++)yilan_harita[i]=0; yilan_harita[0]=130; yilan_harita[1]=131; yilan_harita[2]=132; yilan_harita[3]=133; noktala(yilan_harita[0],1); noktala(yilan_harita[1],1); noktala(yilan_harita[2],1); noktala(yilan_harita[3],1); boy=3; kont=133; kont2=130; yon_h=yon=sag; Yem_Ekle(random); while(1){ // oyun döngüsü t=150; while(--t){ if(Sag)yon=sag; else if(Sol)yon=sol; else if(Yuk)yon=yuk; else if(Asa)yon=asa; else if(Esc)pause=1; else random++; DelayMs(1); } if(!pause){ if(!Yilan_Sur()){ DelayMs(200); ks0108_rect(2,2,125,50, 1,1); ks0108_text(33,23,"Oyun Bitti",1,0); if(puan){ if(puan_A<=puan){ puan_A=puan; sev_A=seviye; }else{ if(puan_B<=puan){ puan_B=puan; sev_B=seviye; }else{ if(puan_C<=puan){ puan_C=puan; sev_C=seviye; }else{ if(puan_D<=puan){ puan_D=puan; sev_D=seviye; } } } } } while(!Esc); DelayMs(10); while(Esc); break; } }else { ks0108_text(77,55,ekran_s,1,0); ks0108_text(4,55,ekran_p,1,0); sprintf(ekran_p," Pause"); ks0108_text(4,55,ekran_p,1,1); while(Esc); DelayMs(10); while(1){ if(Esc){pause=0;return;} if(Ent)break; } ks0108_text(4,55,ekran_p,1,0); sprintf(ekran_p,"Puan: %2d",puan); ks0108_text(4,55,ekran_p,1,1); ks0108_text(77,55,ekran_s,1,1); pause=0; while(Esc); DelayMs(10); } } } /*******************************************************************************/ void Giris_Sayfasi(void) { if(i==0){ ks0108_rect(30,14,98,22,1,1); ks0108_text(37,15,"Yeni Oyun",1,0); } if(i_h==0) { ks0108_rect(30,14,98,22,1,0); ks0108_text(37,15,"Yeni Oyun",1,1); } if(i==1){ ks0108_rect(30,25,98,33,1,1); ks0108_text(45,26,"Seviye",1,0); } if(i_h==1){ ks0108_rect(30,25,98,33,1,0); ks0108_text(45,26,"Seviye",1,1); } if(i==2){ ks0108_rect(30,36,98,44,1,1); ks0108_text(35,37,"Skor Board",1,0); } if(i_h==2){ ks0108_rect(30,36,98,44,1,0); ks0108_text(35,37,"Skor Board",1,1); } if(i==3){ ks0108_rect(30,47,98,55,1,1); ks0108_text(40,48,"HakkInda",1,0); } if(i_h==3){ ks0108_rect(30,47,98,55,1,0); ks0108_text(40,48,"HakkInda",1,1); } while(Sag); while(Sol); while(Asa); while(Yuk); DelayMs(10); while(1){ i_h=i; if(Sag){i++;break;} if(Sol){i--;break;} if(Asa){i++;break;} if(Yuk){i--;break;} if(Ent)break; } if(i==4)i=0; if(i==255)i=3; } /*******************************************************************************/ void noktala(unsigned char kordinat,unsigned char dolu) { y=x=2; kordinat--; while(kordinat>=25){kordinat-=25;y+=5;} x+=kordinat*5; ks0108_rect(x,y,x+3,y+3,1,dolu); } /*******************************************************************************/ void Yem_Ekle(unsigned char random) { unsigned char f; if((random>250)|(random==0))random=1; yem=random; for(i=0; i<=boy; i++){ if((yilan_harita[i]==yem)|(kont2==yem)){ yem++; if(yem>250)yem=1; i=0; } if(seviye==3){ for(f=0; f<32; f++) if(duvar[f]==yem){i=f=0;yem++;if(yem>250)yem=1;} } } noktala(yem,1); ks0108_pixel(x,y,0); ks0108_pixel(x+3,y,0); ks0108_pixel(x,y+3,0); ks0108_pixel(x+3,y+3,0); } /*******************************************************************************/ char Yilan_Sur(void) { /* Kuyruk belirlenir */ kont2=yilan_harita[0]; /* yilan ilerletilir */ i=1; while(1){ kont=yilan_harita[i]; yilan_harita[i-1]=kont; i++; if(yilan_harita[i]=='\0')break; } /* Yon belirlenir */ kont=yilan_harita[boy]; if(yon==sag){if(yon_h!=sol){kont++;yon_h=sag;}else kont--;} if(yon==sol){if(yon_h!=sag){kont--;yon_h=sol;}else kont++;} if(yon==asa){if(yon_h!=yuk){kont+=25;yon_h=asa;}else kont-=25;} if(yon==yuk){if(yon_h!=asa){kont-=25;yon_h=yuk;}else kont+=25;} /* Duvar sınır ihlali kontrol edilir */ if(seviye==1){ if(yon_h==sag){ for(i=1; i<=226;){ i+=25; if(kont==i)return 0; } } if(yon_h==sol){ for(i=0; i<=225;){ i+=25; if(kont==i)return 0; } } if(!kont)return 0; if(kont>=251)return 0; } else if(seviye==2){ if(yon_h==sag){ for(i=1; i<=226;){ i+=25; if(kont==i){kont-=25;break;} } } if(yon_h==sol){ for(i=0; i<=225;){ if(kont==i){kont+=25;break;} i+=25; } } if((kont>250)&&(kont<276))kont-=250; if(kont>276)kont+=250; if(!kont)kont+=250; } else if(seviye==3){ if(yon_h==sag){ for(i=1; i<=226;){ i+=25; if(kont==i){kont-=25;break;} } } if(yon_h==sol){ for(i=0; i<=225;){ if(kont==i){kont+=25;break;} i+=25; } } if((kont>250)&&(kont<276))kont-=250; if(kont>276)kont+=250; if(!kont)kont+=250; for(i=0; i<32; i++)if(duvar[i]==kont)return 0; } /* kuyruga carpma ihlali kontrol edilir */ for(i=0; i<boy; i++)if(yilan_harita[i]==kont)return 0; /* yilan sürülür */ noktala(kont2,0); // kuyruk sil noktala(kont,1); // boy uzat /* Yem yutulduysa puan arttırılır yeni yem eklenir */ if(kont==yem){ puan+=10; boy++; yilan_harita[boy]=kont; ks0108_text(4,55,ekran_p,1,0); sprintf(ekran_p,"Puan: %2d",puan); ks0108_text(4,55,ekran_p,1,1); Yem_Ekle(random); }else yilan_harita[boy]=kont; return 1; } /*******************************************************************************/
Oyun Videosu
no images were found
Hocam ellerinize sağlık eğlenceli bir çalışma olmuş 🙂 🙂
Hocam çok süper bir çalışma olmuş. Ellerinize Sağlık. Başka oyun çalışmalarınızıda beklerim.
merhaba hocam tşk.
Yeni oyunlar ortaya çıkabilir zamanla kesin bişey yok ancak elime bir accelerometer geçerse yine eğlenceli bişeyler yapmayı düşünürüm. 🙂
İyi çalışmalar.
Güzel geçerli bir çalışma tebrik ederim. Coşkun Bey. 🙂
Tebrik ederim hocam güzel bir çalışma olmuş
çok güzel bir çalışma ama java runtime yüklü bir işlemci kullansaydınız donanım sabit, oyunlar flaş hazıfa ile oynanabilir olsaydı daha ileri düzey olmaz mıy dı ?
Olabilir hocam o zamanki tecrübeyle bukadar yapılabildi şuan farklı kollara yönelmiş durumdayım pek zaman ayıramıyorum bu tarz işlere.
kolay gelsin.