Bir Oyun Tasarımı BiR yardım (:

Başlatan byburak, 23 Aralık 2011, 20:16:28

byburak


Merhabalar Balıkesir üniversitesi elektronik haberleşme teknolojisi bölümünden Burak sistem analizi isimli bir dersim var hoca proje ödevi  verdi sene sonuna kadar derse gelmeyin dedi yani geçmemiz bu projeye bağlı,  derdime gelince 16f877 ile sayı bulmaca oyunu yapacağım ilk başta devreye bir  değer girilecek 4 basamaklı bunu pic hafızasına yazdırdıkdan sonra oyuncu tahminlerini girecek keypad den misal sayı 1234 girilen tahmin sayısı 0030 ekranda 3 tane eksi 1 tane + olacak bir rakamı tuttuğuı için ve bir sonraki denemeye geçecek doğru tahminde ise tebrikler yazılıp ekrana oyun sıfırlanacak olay bu benim yaptığım ise programda bir yerde takıldım programı pice yüklediğim zaman ekranda herhangi bir işlem yaptıramıyorum ve de keypadı çalıştıramıyorum sinyal gitmiyormu acab bir fikrinizi alabilirmiyim
tahmin edilecek sayılar random olacaktır.


trisa=%00000000
trisb=%00001110
@ device pic16f877
tus var byte
sayi var word
bir var word
onl var word
yuz var word
binl var word
bira var byte
onla var byte
yuza var byte
binla var byte
carpan var word
tutma var word
hesap var word
adim var word
durum var byte
x var word
y var byte
z var byte
Define LCD_DREG PORTB
Define LCD_DBIT 0
Define LCD_RSREG PORTB
Define LCD_RSBIT 4
Define LCD_EREG PORTB
Define LCD_EBIT 6
Define LCD_BITS 4
Define LCD_LINES 2
Symbol YATAY_A= PORTD.4
Symbol YATAY_B= PORTD.5
Symbol YATAY_C= PORTD.6
Symbol YATAY_D= PORTD.7
Symbol DIKEY_1= PORTD.1
Symbol DIKEY_2= PORTD.2
Symbol DIKEY_3= PORTD.3
Pause 200
Lcdout $fe, 1
BASLA:
random sayi ' pic girilen sayıyı hafızaya alıyor       
pause 5000 
random carpan
tutma=sayi*carpan
hesap=(tutma/10)
if hesap<1233 then basla
if hesap>9999 then basla
Tus=0
adim=0
y=0
start:
gosub tuskontrol
if tus=11 then oyun ' * basılıca tutulan sayı oyun baslıyor
goto start
tuskontrol:
PORTB =254
YATAY_A=0
If DIKEY_1=0THEN
Tus=1
While DIKEY_1=0
Wend
Endif
If DIKEY_2=0 Then
Tus=2
While DIKEY_2=0
Wend
Endif
If DIKEY_3=0 Then
Tus=3
While DIKEY_3=0
Wend
Endif
High YATAY_A
YATAY_B=0
If DIKEY_1=0 Then
Tus=4
While DIKEY_1=0
Wend
Endif
If DIKEY_2=0 Then
Tus=5
While DIKEY_2=0
Wend
Endif
If DIKEY_3=0 Then
Tus=6
While DIKEY_3=0
Wend
Endif
High YATAY_B
YATAY_C=0
If DIKEY_1=0 Then
Tus=7
While DIKEY_1=0
Wend
Endif
If DIKEY_2=0 Then
Tus=8
While DIKEY_2=0
Wend
Endif
If DIKEY_3=0 Then
Tus=9
While DIKEY_3=0
Wend
Endif
High YATAY_C
YATAY_D=0
If DIKEY_1=0 Then
Tus=11
While DIKEY_1=0
Wend
Endif
If DIKEY_2=0 Then
Tus=0
While DIKEY_2=0
Wend
Endif
If DIKEY_3=0 Then
Tus=12
While DIKEY_3=0
Wend
Endif
High YATAY_D
pause 10
return
oyun:
y=y+1
if hesap>1233 then gosub tuthesapla
if hesap<9999 then gosub tuthesapla
lcdout $fe,1,"TAHMIN GIRINIZ"
pause 300
lcdout $fe,1
goto basla1

basla1:
 tus=0
 tekrar:
  gosub tuskontrol
  if dikey_1=0 then
  write adim,tus
 else
goto tekrar
pause 500
goto yaz
tuthesapla:  ' sayının rakkamlarının aynı olmaması saglanıyor
bir=hesap-((hesap/10)*10)
onl=((hesap-((hesap/100)*100))-bir)/10
yuz=(((hesap-(hesap/1000)*1000)-(onl*10))-bir)/100
binl=(hesap-((yuz*100)+(onl*10)+bir))/1000
if bir=onl then basla
if bir=yuz then basla
if bir=binl then basla
if onl=yuz then basla
if onl=binl then basla
if yuz=binl then basla
goto yaz
yaz:
lcdout $fe,1,#binl," ",#yuz," ",#onl," ",#bir
lcdout $fe,$c0,#hesap
pause 200
goto basla
end

Seckin ALAN

#1
ilk baş LCD merhaba dünya yazdır, bunu geçtikten sonra keypaddan okuduğun sayıları ekrana yazdır.

Bulunacak sayı random olarak mı üretilecek ? yoksa keypaddan mi girilecek ?

yukarıda sayıları neden basamaklarına ayırdın buna gerek var mı ? Yanlış ayırma olmuş hesap-((hesap/10)*10) = daima sıfırdır yanlış hesaplama yapmamdan dolayı hesaplama türü doğrudur.
Alıntı yapılan: ErsinErce - 24 Aralık 2011, 00:01:34
her zaman birler basamağını verir, daima sıfır değildir. aman dikkat
Teşekkürler ErsinErce.

hepsini birden yapamaman doğal  adım adım gitmeni tavsiye ederim.

<konu dışı> şuan balıkesiri yazmayıp ıspartayı yazdığım için kendime teşekkür ettim :) Allahtan bizde böyle hocalar yok :)
Kar taneleri ne güzel anlatıyor, birbirlerine zarar vermeden de yol almanın mümkün olduğunu.. Mevlana

homer380

arkadaşım tüm kodu incelemedim ama basamak değerlerini  bulurken
"dig" komutunu kullanman daha mantıklı

birler = sayınız dig 0
onlar = sayınız dig 1
yüzler = sayınız dig 2
binler = sayınız dig 3

matematik kısmından kurtulursun daha basit

ErsinErce

Alıntı yapılan: Seçkin ALAN - 23 Aralık 2011, 21:58:48
hesap-((hesap/10)*10) = daima sıfırdır
her zaman birler basamağını verir, daima sıfır değildir. aman dikkat

Seckin ALAN

#4
Alıntı yapılan: ErsinErce - 24 Aralık 2011, 00:01:34
her zaman birler basamağını verir, daima sıfır değildir. aman dikkat
Teşekkürler hocam düzelttim. Sağolun.
int tipinde değilde double tipinde hesaplama yaptıydım :)
Kar taneleri ne güzel anlatıyor, birbirlerine zarar vermeden de yol almanın mümkün olduğunu.. Mevlana

The Gariban

Kodları derledinizmi? Kodlarınızda sözdizim hataları var ,muhtemelen mantık hatalarıda var (Derlenirken hata veriyor)
IF karşılaştırmalarına dikkat edin,bu şekilde girintisiz yazarsanız daha çok zorlanırsınız
Hatasız derlendikten sonrada LCD de birşey görülmüyorsa da bu programa dokunmayın .Ayrı küçük bir LCD için program yazın onu çalıştırdıktan sonra LCD  kısmını eskisinin üzerine güncelleyin

Ayrıca bu program bu iş için çok uzun.Homer 380 nin anlattığı gibi DIG komutunu kullanırsanız çok daha kolay yazarsınız.

kullanımı  :

               B0=123      ' Set B0 to 123
   B1=B0 DIG 1   ' Sets B1 to 2 (digit 1 of 123)
yani hanelerin direk değerlerini karşılaştırabilirsiniz.
http://melabs.com/resources/pbpmanual/4_0.htm
(4.17.7) de izah ediliyor

byburak

Alıntı yapılan: homer380 - 23 Aralık 2011, 22:25:59
arkadaşım tüm kodu incelemedim ama basamak değerlerini  bulurken
"dig" komutunu kullanman daha mantıklı

birler = sayınız dig 0
onlar = sayınız dig 1
yüzler = sayınız dig 2
binler = sayınız dig 3

matematik kısmından kurtulursun daha basit


yani
bir var word
onl var word
yuz var word
binl var word
bira var byte
onla var byte
yuza var byte

bunları kullanmadan yukarıda kullandıığınız dig halini mi kullanayım kusura bakmayın yeniyim direk kavrayamıyorum bazı terimleri

homer380

arkadaşım yine değişken kullanacan ama daha az ve matematik kısmı gereksiz yere başını ağrıtmayacak.

birler var word
onlar var word
yüzler var word
binler var word
sayı var word
.
.
.
birler = sayı dig 1
...

şeklinde. kolay gelsin.