Hejsan! Tulin tänne kysymään, ettei Hello World! menisi aivan ongelmanratkaisun puolelle, mutta tuskin tämä sentään omaa topickiaan tarvitsee...
Ongelmana on se, että kun ohjelma käännetään, ja se ajetaan, niin se suoriutuu mainiosti, ja menee "alkuruutuun". Tämän jälkeen, alkuruudusta painaessani näppäimistön näppäintä, jolloin ohjelman pitäisi siirtyä peliruutuun, ilmestyykin virheilmoitus: "Error! Memory access violation". Ok:ta painamalla ohjelma sulkeutuu. Mistä tämä johtuu? Täysin käsittämätöntä, sillä otin koodin hiukan muuntelemalla ensin learning centerin Ammukset 2:sta, ja sitten suoraan copypastella pelini koodiin. Laitan pelin tuohon aiheeseen kuuluvan koodin tuohon pastettuna, niin voitte tutkia sitä, ja kokeilla, ilmeneekö sama ongelma teidän tietokoneillanne. Koodi on kommentoitua minua itseäni varten, tuskin varmaan haittaa teitäkään
Code: Select all
'Alkuvalmistelut
SCREEN 400, 300
FrameLimit 30
'Ns. menu
Text 100,120, "Paina ENTER aloittaaksesi"
Text 10,10, "Avaruuslentelypeli alpha"
Text 10,280, "(c) Veikko 'Wee' Vauhkonen 2008"
DrawScreen
WaitKey
ClearText
'Objecktien & kentän valmistelut
Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
Field obj 'yksi kenttä nimeltään 'obj'
End Type
ShowObject pati,OFF
ClsColor CbGreen
pikkukivi = LoadImage("pikkukivi.png")
puska = LoadImage("puska.png")
alus = LoadObject("ship.png", 36)
pati = LoadObject("pati.png", 36)
TurnObject alus, 90
PositionObject alus, -160, 30
'Itse pelisilmukka
Repeat
'Kentän taustakuvat & muu tilpehööri
DrawImage puska,100,95
DrawImage pikkukivi,110,97
DrawImage pikkukivi,230,169
DrawImage puska,140,300
'Tekstinsyötötökokeilut ylös, ja alaspäin vas. ylänurkka
If UpKey() Then
ClearText
Text 2,2, "Painat nuolta ylöspäin"
EndIf
If DownKey() Then
ClearText
Text 2,2, "Painat nuolta alaspäin"
EndIf
'Päiväys alareunaan
Text 1,280, "Tänään on"
Text 80,280,Date()
Text 177,280,Time()
'Piirretään ylä-ja alaviivat kentälle
Line 0,26,400,26
Line 0,260,400,260
'Aluksen liikkuminen
If UpKey() Then MoveObject alus, 2
If DownKey() Then MoveObject alus, -2
'Aluksen pelikentän rajaaminen
If ObjectX(alus)>200 Then PositionObject alus, 200,ObjectY(alus)
If ObjectX(alus)<-200 Then PositionObject alus, -200,ObjectY(alus)
If ObjectY(alus)>115 Then PositionObject alus, ObjectX(alus),115
If ObjectY(alus)<-100 Then PositionObject alus, ObjectX(alus),-100
'Ampuminen oikealle
If KeyDown(cbkeyspace) And aselataus=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,alus
aselataus=5
EndIf
If aselataus>0 Then aselataus=aselataus-1
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,6
If ObjectX(luoti\obj)<-180 Or ObjectX(luoti\obj)>180 Or ObjectY(luoti\obj)<-130 Or ObjectY(luoti\obj)>130 Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
'Se unohtumaton
DrawScreen
Forever
Btw, tietenkin jos koodissa on muuten jotain huomautettavaa, nokankoputtamista, yms. niin kaikki otetaan vapaasti vastaan =)