aikaisemminkin täällä oli ohjelmointi kisa julistetaampa uusi kisa ratkeaa jouluna xD tasan kuukauden päästä siis
itse tuhlasin tähän pieneen ohjelmointi probleemaan vähintään 3-4 päivää ja osaan jopa tarvitsin ulkoista apua xD
kuulostaa helpolta mutta osotautui tosi pähkinäksi.
suurinosa omaa sohlausta oli myös mukana mutta silti hermomeinasi mennä monet kerrat
eli julistan kilpailun luvassa respektiä ja palvonntaa ;)
ohjelmoi Top Heroes lista !
niin että se upottaa juuri pelatun tuloksen listaan ja siirtää huonoimpia alemmas
ja samoin tunnistaa milloin pelaaja ei ole päässyt 10 parhaan joukkoon
tämän jälkeen antaa mahdollisuuden pelaajalle kirjoittaa nimensä listaan joikalla tai näppiksellä molemmatkin käy
nimen kirjoitus pitää osua listassa uuden tuloksen kohdalle listassa mihin se sitten jää
lista siis 1-10 nimi osio 7 tavua tulos osa 99999999 asti
odotan mielen kiinnolla tuloksia. ohjelmointi kieli vapaa
kisan ratkettua julkaisen oman harakan pesäni voitte sitä sitten nauraa porukalla joulun iloksi xD
---- 01 mie 10000000 ----
---- 02 mie tas 09991290 ----
ja niin edelleen
Tekis mieli kyl osallistuu mut en osaa koodata sitten yhtään mitään ihmeellistä. Vain joitain yksinkertaisia juttuja basicillä :D
Ja tästä tuli mieleen että eikö me voitaisiin kanssa tehdä semmoinen kilpailu missä ohjelmoidaan jokin Joulu aiheinen juttu. Tälläiseen kisaan minäki pystyisin osallistua :)
Askartelin BASICilla jonkinlaisen :). Eniten ärräpäitä aiheutti luultavasti emulaattorin ja lievästi epäyhteensopivan isäntäkoneen kanssa taistelu (käytän Win-VICEä Winen kautta Ubuntu-alustalla koneessa, jossa on huonosti tuettu vanha näytönohjain - näppäimistöasetuksia pitää vaihtaa vähän väliä, kun siinä näppiksessä, jossa on miinusmerkki, ei ole plusmerkkiä jne... eli haasteita piisaa ::) ).
Vaan mitenkäs oli ajateltu, tarkoitus on kai julkistaa listaus tässä? Levykuvanako vai pitäisikö näpytellä tekstinä? Screenshotteinahan tuon helpoimmin saisi emulaattorista nettiin kaikkien hämmästeltäväksi.
Varmasti d64 formaatti olisi kätevin kunhan sen zip pakka ensin
Itse listaukset voin itse lisäillä jos taidot eivät siihen riitä
Ps. Miksi ihmeessä käytät windows versiota?
Linukalle on ihanoma versio.
Lainaus käyttäjältä: virgo - joulukuu 06, 2012, 10:40
Varmasti d64 formaatti olisi kätevin kunhan sen zip pakka ensin
Itse listaukset voin itse lisäillä jos taidot eivät siihen riitä
Tässäpä tämä nyt sitten olisi. Toivottavasti ymmärsin tehtävänasettelun oikein. Joka tapauksessa tuossa luodaan ensin kuvitteellinen kymmenen kärjessä -lista, jonka jälkeen uusia tuloksia saa syöttää ohjelmaan näppäimistöllä. Vilkkuvan kursorin puute häiritsee nimenkirjoituksessa, mutta siihen en yhtäkkiä keksinyt konstia (minähän en siis ole tehnyt BASICilla juuri koskaan mitään ja Kuusnepalla en senkään vertaa :-[ - mutta tärkeintähän on osanotto vai miten se nyt meni).
Lainaus käyttäjältä: virgo - joulukuu 06, 2012, 10:40
Ps. Miksi ihmeessä käytät windows versiota?
Linukalle on ihanoma versio.
Pitäähän elämässä haasteita olla! ;) Eipä vaiskaan. Tässä pöytäkoneessa ei Linux-VICE toimi senkään vertaa kuin Winen päällä ajettu Win-VICE. Syynä lienee iänkaikkisen vanha Radeon, joka tulostaa näytölle jos jonkinlaista roskaa. Läppärillä Linux-VICE toimii kuin junan vessa, mutta tuli aloitettua tuo joulutehtävän turaaminen tällä koneella.
no niin ja tässä sama txt muodossa ;)
10 rem joulukilpailu by nimimerkki
20 gosub 1000 :rem alustukset
30 gosub 2000 :rem tulostus
40 u=0 :rem uudet pisteet
50 input "pisteesi (0=lopetus)"; u
60 if u=0 then print "kiitos, hei..." : end
70 if u>99999999 then goto 40
80 gosub 3000 :rem tark. sijoitus
90 gosub 4000 :rem listan paivitys
100 gosub 2000 :rem tulostus
110 if s<=9 then print u; "pistetta antaa sijan"; s+1 : print "kirjoita nimesi!"
120 if s<=9 then gosub 5000 :rem nimen kirjoitus
130 if s>9 then print u; "pisteella ei paase listoille!"
140 goto 40
999 end
1000 rem taulukoiden luonti ja alustus
1010 dim n$(9) :rem nimet
1020 dim p(9) :rem pisteet
1030 for i = 0 to 9
1040 n$(i) = chr$(65+i)
1050 p(i) = int(1024 / (i+1))
1060 next i
1070 return
2000 rem tulostus
2005 print "{clr}" :rem clear screen
2010 print "sija", "pisteet", "nimi" : print
2020 for i=0 to 9
2030 print i+1, p(i), n$(i)
2040 next i
2045 print
2050 print
2060 return
3000 rem tarkistetaan sijoitus
3010 s=10 :rem sijoitus
3020 for i=0 to 9
3030 if u > p(i) then s=i
3040 if u > p(i) then return
3050 next i
3060 return
4000 rem listan paivitys
4005 if s > 9 then return
4010 if s > 9 then return
4020 for i=8 to s step -1
4030 p(i+1) = p(i)
4040 n$(i+1) = n$(i)
4050 next i
4060 p(s) = u
4070 n$(s) = ""
4080 return
5000 rem nimen kirjoitus
5010 print "{home}" :rem home
5020 for i=0 to (s+1)
5030 print "{down}"; :rem kursori alas
5040 next i
5050 print, : print,
5060 print ".......";
5070 print "{left}{left}{left}{left}{left}{left}{left}"; :rem kursori vas.
5080 for i=0 to 6
5090 get u$ : if u$="" goto 5090
5100 if u$ = chr$(13) goto 5140
5110 print u$;
5120 n$(s) = n$(s)+u$
5130 next i
5140 gosub 2000 :rem tulostus
5150 return
hirveesti ei nämä kisat porukkaa vedä ???
no lupaukset pitää pitää joten tässä viikonlopun aikana pitänee oma rustaus laittaa jakon
tosi se on jo kokenut sen verran muutoksia että on pakko näyttää siitä vain osia
miten tietyt osa alueet on tehty
palaan asiaan ko tuo sorsa on on lähettyvillä
kiitoksia osallistuneille ;)
ps. etsin monta minuuttia tätä postaustani ennen kuin huomasin että joku oli sen nostanut yläkertaan xD
Lainaus käyttäjältä: virgo - joulukuu 29, 2012, 16:34
hirveesti ei nämä kisat porukkaa vedä ???
no lupaukset pitää pitää joten tässä viikonlopun aikana pitänee oma rustaus laittaa jakon
Hiljaista tuntuu palstalla olevan, mutta kyllä ainakin minua kiinnostaa, niin että pistä jakoon vaan!
PS: Miten muuten konversoit tuon minun sorsani tuohon ylle postaamaasi muotoon? Onnistuuko VICEssä vai pitääkö olla joku erillinen apuohjelma?
vicen mukana tulee pikku apusofta mukana millä tuo onnistuu molempiin suuntiin
enemmän asiasta
http://www.com64.net/foorumi/index.php?topic=563.0 (http://www.com64.net/foorumi/index.php?topic=563.0)
rams mulle vihjas ohjelman olemassa olosta eli tänx !
tässä vain ydinkohta piste vertailu (mikä aiheutti itselleni eniten pään vaivaa)
totesin että koko listauksesta tulisi kerralla
melko vaikeaa nieltävää ja todella pitkä ripsu joten säästän lukijoita siltä
halukkaat saavat kyllä koko listauksen jos haluavat postia vain minulle !
Muokattu monta kertaa kehveli kun pitää vielä tässäkin vaiheessa alkaa koodia
optimoimaan xD
itse Hero lista tässä
Muistettavaa: piste laskussa käytämme siis Desimaali lukuja ei hexsoja 0-99 ei siis 0-$ff
se ei suoraan tässä näy mutta 6502 prossassa on lippu
joka siirtää akun laskenta prosesseista osan Desimaali laskentaan
mikä voi olla todella hämäävää jos kyseinen lippu unohtuu kytkeä pois xD
;--------------------------
score .byte 1,8,0,0 pelaajan pisteet pelissä
;--------------------------
gamer .asc "!!!!!!!" pelaajan nimi
;--------------------------
tophero sijoitus
.asc "1 1" ;1 asc pelaajan nimi
.byte 2,0,0,1 pelaajan pisteet, tässä yhteydessä emme käytä
hexsa lukja vaan normaalia kymmen järjestelmää
yksi tavu pystyy esittämään numerot 0-99
maxsimi tulos on siis 99999999 kunnes
laskuri menee ylikierroksille
.asc "2 2" ;2
.byte 1,9,0,2
.asc "3 3" ;3
.byte 1,8,0,3
.asc "4 4" ;4
.byte 1,7,0,4
.asc "5 5" ;5
.byte 1,6,0,5
.asc "6 6" ;6
.byte 1,5,0,6
.asc "7 7" ;7
.byte 1,4,0,7
.asc "8 8" ;8
.byte 1,3,0,8
.asc "9 9" ;9
.byte 1,2,0,9
.asc "10 10" ;10
.byte 1,1,0,0
.asc " " ;11 täysin ylimääräinen ihan varmuuden vuoksi
.byte 0,0,0,0
;-------------------------------
; Seartching Heroes
;-------------------------------
looking_for
ldy #7 Y=7 koska pitää hypätä nimen yli
että pääsemme tuloksia mittaamaan
not_jet sec asetamme C lipun
lda tophero+3,y aloitemme vertailun pohjalta 0-99
sbc score+3 verraten pelaajan tulokseen
lda tophero+2,y 100-99xx
sbc score+2 seuraava tavu
lda tophero+1,y 10000-99xxxx
sbc score+1 seuraava tavu
lda tophero,y 100000-99xxxxxx
sbc score ylin tavu
bmi hero2 jos tulos miinus ylittävä tulos löytyi
tya siirretään Y rekisteri A rekisteriin
clc nollataan C lippu ettei laskenta sekoa
adc #11 lisätään 11 eli hypätään nimen ylitse
ja seuraavan tuloksen alkuun
tay palautetaan tulos Y rekisteriin
cpy #11*10 tarkistamme Yyn arvon 11*10=110
bcc not_jet jos tulos alle tuon 110 palaamme etsimään
seuraavaa listan ehdokasta vasten
lda #0
sta 10
rts
;------------------------
Hero2 Y rekisteri kertoo melkein suoraan paikan mistä alamme siirtämään muiden tuloksia alas päin
sty 10 tallennamme Y rekisterin tuloksen myöhempää käyttöä varten
jsr make_room tehdään uudelle sankarille tilaa listassa
jsr set_new_name sijoitetaan uusi pelaajan nimi paikalleen
jsr new_score ja uusi tulos perään
rts
;-------------------------------
tem1 .byte 0
;-------------------------------
make_room
tya Y rekisteri A rekisteriin
sec asetamme C rekisterin päälle miinustaessa
( asiat tehdään päin vastoin kuin yhteen laskussa )
sbc #$07 vähennämme 7 koska se on nimen pituus näin pääsemme listalla
oikeaan kohtaan
sta tem1 tallennamme väliaikaisesti
ldy #99 siirto on tapaperoinen eli aloitamme alhaalta ylös päin
t1 lda tophero,y nykyisen sijainnin paikka
sta tophero+11,y uusi sijainti 7+4=11 nimi ja tulos enemmän eli listalla
pykälä alas päin kuten on tarkoitus
dey vähennämme Y rekisteri yhdellä
cpy tem1 vertailemme alkuperäisen tallenteen kanssa olemmeko jo siirtäneet tarpeeksi
bpl t1 ei vielä siirrämme lisää
rts valmista paluu takaisin
;------------------------
set_new_name Uuden sankarin minen lisäys oikeaan paikkan
ldy tem1 otamme valmiiksi lasketun (-7) lukeman
lda 10 palautamme 10 tä
sta tem1 miinustamattoman arvon väliaikaiseen talteen
ldx #0
t2 lda gamer,x siirrämme nimen
sta tophero,y oikealle paikalleen
inx X +1
iny Y +1
cpy tem1 tarkistamme joko on siiretty kaikki
bcc t2 ei vielä
rts kaikki tehty paluu takaisin
;-------------------------------
new_score tuloksen siirto samoin menetelmin
ldy 10 hmm.. jos listalla tulokset olisivat samoin päin
tya voitaisiin tämä siirto tehdä edellisellä rutiinilla
clc samalla kertaan ups....
adc #4
sta tem1
ldx #0
t3 lda score,x
sta tophero,y
inx
iny
cpy tem1
bcc t3
rts
;-------------------------------