• Joulun ohjelmointi kisa 5 0 5 2

Joulun ohjelmointi kisa

Aloittaja virgo, marraskuu 23, 2012, 20:47

« edellinen - seuraava »

virgo

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
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

Jarskimo

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  :)

NimimErkki

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.

virgo

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.
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

NimimErkki

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.

virgo

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

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

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

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

NimimErkki

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?

virgo

vicen mukana tulee pikku apusofta mukana millä tuo onnistuu molempiin suuntiin

enemmän asiasta
http://www.com64.net/foorumi/index.php?topic=563.0
rams mulle vihjas ohjelman olemassa olosta eli tänx !
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

#9
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
;-------------------------------
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500