Tyhmät kysymykset (I/2012)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 3:48 pm
Location: Turku

Re: Tyhmät kysymykset (I/2011)

Post by skorpioni-cb »

Laitoin tämän saman koodin SideX-projektini ketjuun, ongelma on:
Kun vihollinen tuhoutuu, tulee aina Object Assec Violation, enkä saa tätä korjattua, koodi tässä(BTW. ladatkaa sidex ja saatte mediat sieltä):

Code: Select all

Type Enemy
	Field object
	Field hp
EndType

Type BULLET
	Field object
EndType

Function color3ToPutPixel(r As Integer, g As Integer, b As Integer)
	Return (r Shl 16) + (g Shl 8) + b
EndFunction 
//Energia-hassutus, käynnistyykö serveri vai client
If GetWord(CommandLine(),1="-mode")Then
    //Internet not implemented yet
Else 
	Repeat
		If button(0,0,100,100,"Start game") Then
			Gosub mainGame
		EndIf 
		DrawScreen
	Until KeyHit(cbkeyreturn)
EndIf

Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
	If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
		If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
		If MouseUp(1) Then Return True
	Else
	Color 220,220,220
	EndIf
	Box x+s,y,w-(s*2),h
	Box x,y+s,w,h-(s*2)
	Circle x,y,s*2
	Circle x+w-s*2,y,s*2
	Circle x+w-s*2,y+h-s*2,s*2
	Circle x,y+h-s*2,s*2
	Color cbblack
	CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
EndFunction 
mainGame:
	SAFEEXIT OFF
	Randomize Timer()
	FrameLimit 100
	SCREEN 640,360
	SSvalue =0
	Smooth2D ON   
	gameFont = LoadFont("Media/font.ttf",18)
	SetFont gamefont
	godmode=0
	velX=0
	velY=0
	points=0
	r As Integer = 250
	g As Integer = 0
	b As Integer = 0
	sparkle = LoadImage("Media/sparkle.png")
	godSparkle = MakeEmitter(sparkle,10)
	ShowObject godSparkle,OFF
	masterBullet = LoadObject("Media/bullet.png")
	ShowObject masterBullet,OFF 
	redOrb = LoadObjectWithMask("Media/Energyorb.png",177,177,177,255,0,0)
	ShowObject redOrb,OFF
	player = LoadObjectWithMask("Media/ship.png",177,177,177,255,0,0)
	masterenemy = LoadObjectWithMask("Media/ship_enemy.png",177,177,177,255,0,255)
	ShowObject masterenemy,OFF
	PositionObject player,-250,0
	bgIMG = LoadImage("Media/backround.png")
	backround = MakeObjectFloor()
	PositionObject backround,0,0,-100
	PaintObject backround,bgIMG
	hp#=250.0
	sound = PlaySound ("Media/music.ogg")
	Repeat
		CloneObjectPosition godSparkle,player
		ParticleMovement godSparkle,-5,0,0.97
		ParticleEmission godSparkle,1,0,180
		Gosub moving
		Gosub createEnemy
		Gosub updateWorld
		If godMode Then
			GhostObject player,50
			ParticleEmission godSparkle,1,50,180
		Else
			GhostObject player,100
		EndIf 
		Color 255,255,255
		DrawGame 
		Text 0,0,"HP: "+hp+" Points: "+points
		If KeyHit(59) Then 
			ScreenShot "ScreenShot/SCREEN-"+SSvalue+".bmp"
		EndIf
		DrawScreen
	Forever
Return

Function changeImageColor(img,oldr,oldg,oldb,newr,newg,newb)
	Lock Image(img)
	DrawToImage img
		For x=0 To ImageWidth(img)
			For y=0 To ImageHeight(img)
				PickImageColor2 img,x,y
				If getRGB(RED)=oldr And getRGB(GREEN)=oldg And getRGB(BLUE)=oldb Then
					PutPixel2 x,y,color3ToPutPixel(newr, newg, newb),Image(img)
				EndIf
			Next y
		Next x
	DrawToScreen
	Unlock Image(img)
EndFunction  
Function LoadObjectWithMask(fileName As String, maskR, maskG, maskB, vR, vG, vB)
	tempIMG = LoadImage(filename)
	temp = MakeObject()
	changeImageColor(tempIMG,maskR,maskG,maskB,vR,vG,vB)
	PaintObject temp,-tempIMG
	Return temp
EndFunction
Function laskeProsentit#(määrä#,maxMäärä#)
	Return määrä*100/maxMäärä
EndFunction 

moving:
	If LeftKey() Or KeyDown(cbkeya) Then velX=velX-10
	If RightKey() Or KeyDown(cbkeyd) Then velX=velX+10
	If UpKey() Or KeyDown(cbkeyw) Then velY=velY+10
	If DownKey() Or KeyDown(cbkeys) Then velY=velY-10
	If KeyHit(cbkeyspace) Then Gosub createBullet
	//If KeyHit(cbkeyg) Then godMode = Not Godmode

	TranslateObject player,velX,velY
	velX=0
	velY=0
Return

createEnemy:
	If(Rand(100)<1) Then
		newEnemy.Enemy = New(Enemy)
		newEnemy\object = CloneObject(masterEnemy)
		PositionObject newEnemy\object,250,Rnd(-190,190) 
		ObjectInteger newEnemy\object,ConvertToInteger(newEnemy)
		newEnemy\hp = 100
	EndIf
Return 
updateWorld:
	For EnemyUnit.Enemy = Each Enemy
		MoveObject EnemyUnit\object,-5
		If ObjectsOverlap(EnemyUnit\object,player,1) Then
			DeleteObject EnemyUnit\object
			Delete EnemyUnit
			If Not godmode Then hp=hp-10
		EndIf

		If ObjectX(EnemyUnit\object) = -250 Then
			points=points-10
			EnemyUnit\hp = 0
		EndIf
		For ammo.BULLET = Each BULLET
			MoveObject ammo\object,5
			If ObjectsOverlap(ammo\object,EnemyUnit\object,2) Then
				EnemyUnit\hp=EnemyUnit\hp-100
				points = points + 10
				DeleteObject ammo\object
				Delete ammo
			EndIf
		If(EnemyUnit\hp <=0) Then
			DeleteObject EnemyUnit\object
			Delete EnemyUnit
		EndIf
		Next ammo
	Next EnemyUnit
Return  
En tiedä, mitä tiedän, mutta tiedän ettei se ole mitään kaunista.

I know not what I know, but I do know that it's not beautiful.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by axu »

skorpioni-cb wrote:Laitoin tämän saman koodin SideX-projektini ketjuun, ongelma on:
Vastasin tuonne projektiketjuun, eli käytät tyyppikokoelman jäsentä ja objektia niiden poistamisen jälkeen. Klassinen :d
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 3:48 pm
Location: Turku

Re: Tyhmät kysymykset (I/2011)

Post by skorpioni-cb »

Tyylikkäästi ollaan edittaamatta tota ekaa viestiä, mutta kumminkin:
Nyt kaikki toimii kuten pitääkin, paitsi että kun mä yritän saada musiikin looppaamaan, siitä tulee ekalla kerralla siedettävää, mutta tokalla kertaa tulee ihan kauheeta ear-rapea, mikäköhän on vikana, mediat löytyy taas SideX-viestiketjusta:

Code: Select all

Type Enemy
	Field object
	Field hp
EndType

Type BULLET
	Field object
EndType

Function color3ToPutPixel(r As Integer, g As Integer, b As Integer)
	Return (r Shl 16) + (g Shl 8) + b
EndFunction 
//Energia-hassutus, käynnistyykö serveri vai client
If GetWord(CommandLine(),1="-mode")Then
    //Internet not implemented yet
Else 
	Repeat
		If button(0,0,100,100,"Start game") Then
			Gosub mainGame
		EndIf 
		DrawScreen
	Until KeyHit(cbkeyreturn)
EndIf

Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
	If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
		If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
		If MouseUp(1) Then Return True
	Else
	Color 220,220,220
	EndIf
	Box x+s,y,w-(s*2),h
	Box x,y+s,w,h-(s*2)
	Circle x,y,s*2
	Circle x+w-s*2,y,s*2
	Circle x+w-s*2,y+h-s*2,s*2
	Circle x,y+h-s*2,s*2
	Color cbblack
	CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
EndFunction 
mainGame:
	SAFEEXIT OFF
	Randomize Timer()
	FrameLimit 100
	SCREEN 640,360
	SSvalue =0
	level=0
	Smooth2D ON   
	gameFont = LoadFont("Media/font.ttf",18)
	SetFont gamefont
	godmode=0
	velX=0
	velY=0
	points=0
	r As Integer = 250
	g As Integer = 0
	b As Integer = 0
	sparkle = LoadImage("Media/sparkle.png")
	godSparkle = MakeEmitter(sparkle,10)
	ShowObject godSparkle,OFF
	masterBullet = LoadObject("Media/bullet.png")
	ShowObject masterBullet,OFF 
	redOrb = LoadObjectWithMask("Media/Energyorb.png",177,177,177,255,0,0)
	ShowObject redOrb,OFF
	player = LoadObjectWithMask("Media/ship.png",177,177,177,255,0,0)
	masterenemy = LoadObjectWithMask("Media/ship_enemy.png",177,177,177,255,0,255)
	ShowObject masterenemy,OFF
	PositionObject player,-250,0
	bgIMG = LoadImage("Media/backround.png")
	backround = MakeObjectFloor()
	PositionObject backround,0,0,-100
	PaintObject backround,bgIMG
	hp#=250.0
	soundChanel = PlaySound ("Media/music.ogg")
	Repeat
		If Not SoundPlaying(soundChanel) Then PlaySound "Media/music.ogg"
		CloneObjectPosition godSparkle,player
		ParticleMovement godSparkle,-5,0,0.97
		ParticleEmission godSparkle,1,0,180
		Gosub moving
		Gosub createEnemy
		Gosub updateWorld
		If godMode Then
			GhostObject player,50
			ParticleEmission godSparkle,1,50,180
		Else
			GhostObject player,100
		EndIf 
		Color 255,255,255
		DrawGame 
		Text 0,0,"HP: "+hp+" Points: "+points+" Level: "+level
		MoveObject backround,-20-level
		level = points/100
		If points/100 > 50 Then level = 50
		If KeyHit(59) Then 
			ScreenShot "ScreenShot/SCREEN-"+SSvalue+".bmp"
		EndIf
		DrawScreen
	Forever
Return

Function changeImageColor(img,oldr,oldg,oldb,newr,newg,newb)
	Lock Image(img)
	DrawToImage img
		For x=0 To ImageWidth(img)
			For y=0 To ImageHeight(img)
				PickImageColor2 img,x,y
				If getRGB(RED)=oldr And getRGB(GREEN)=oldg And getRGB(BLUE)=oldb Then
					PutPixel2 x,y,color3ToPutPixel(newr, newg, newb),Image(img)
				EndIf
			Next y
		Next x
	DrawToScreen
	Unlock Image(img)
EndFunction  
Function LoadObjectWithMask(fileName As String, maskR, maskG, maskB, vR, vG, vB)
	tempIMG = LoadImage(filename)
	temp = MakeObject()
	changeImageColor(tempIMG,maskR,maskG,maskB,vR,vG,vB)
	PaintObject temp,-tempIMG
	DeleteImage tempIMG
	Return temp
EndFunction
Function laskeProsentit#(määrä#,maxMäärä#)
	Return määrä*100/maxMäärä
EndFunction 

moving:
	If LeftKey() Or KeyDown(cbkeya) Then velX=velX-10
	If RightKey() Or KeyDown(cbkeyd) Then velX=velX+10
	If UpKey() Or KeyDown(cbkeyw) Then velY=velY+10
	If DownKey() Or KeyDown(cbkeys) Then velY=velY-10
	If KeyDown(cbkeyspace) Then Gosub createBullet
	If KeyHit(cbkeyg) Then godMode = Not Godmode

	TranslateObject player,velX,velY
	velX=0
	velY=0
Return

createEnemy:
	If(Rand(100)<1+level) Then
		newEnemy.Enemy = New(Enemy)
		newEnemy\object = CloneObject(masterEnemy)
		PositionObject newEnemy\object,250,Rnd(-190,190) 
		ObjectInteger newEnemy\object,ConvertToInteger(newEnemy)
		newEnemy\hp = 100
		SetupCollision newEnemy\object,player,2,2,2
	EndIf
Return 
updateWorld:
	For EnemyUnit.Enemy = Each Enemy
		If EnemyUnit\hp > 0 Then
			MoveObject EnemyUnit\object,-5
			If ObjectsOverlap(EnemyUnit\object,player,1) Then
				EnemyUnit\hp = 0
				If Not godmode Then hp=hp-10
			EndIf
	
			If ObjectX(EnemyUnit\object) = -250 Then
				points=points-10
				EnemyUnit\hp = 0
			EndIf
			For ammo.BULLET = Each BULLET
				If ObjectsOverlap(ammo\object,EnemyUnit\object,2) Then
					EnemyUnit\hp=EnemyUnit\hp-100
					points = points + 10
					DeleteObject ammo\object
					Delete ammo
				EndIf
			Next ammo
		Else 
			DeleteObject EnemyUnit\object
			Delete EnemyUnit
		EndIf
	Next EnemyUnit
	For ammo.BULLET = Each BULLET
		MoveObject ammo\object,5
	Next ammo
Return 
createBullet:
	newBullet.BULLET = New(BULLET)
	newBullet\object = CloneObject(masterBullet)
	ObjectInteger newBullet\object,ConvertToInteger(newBullet)
	CloneObjectPosition newBullet\object,player
	MoveObject newBullet\object,40
Return 
En tiedä, mitä tiedän, mutta tiedän ettei se ole mitään kaunista.

I know not what I know, but I do know that it's not beautiful.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

skorpioni-cb wrote:Tyylikkäästi ollaan edittaamatta tota ekaa viestiä, mutta kumminkin:
Nyt kaikki toimii kuten pitääkin, paitsi että kun mä yritän saada musiikin looppaamaan, siitä tulee ekalla kerralla siedettävää, mutta tokalla kertaa tulee ihan kauheeta ear-rapea, mikäköhän on vikana, mediat löytyy taas SideX-viestiketjusta:

Code: Select all

	soundChanel = PlaySound ("Media/music.ogg")
	Repeat
		If Not SoundPlaying(soundChanel) Then PlaySound "Media/music.ogg"
Et aseta "soundChanel" muuttujaan uudelleen mitään arvoa, joten koodinpätkä Not SoundPlaying(soundChanel) palauttaa aina 1 ja "Media/music.ogg" tiedostoa soitetaan aina uudelleen. Voinet käyttää tätä iffiä mielummin:

Code: Select all

If Not SoundPlaying(soundChanel) Then soundChanel = PlaySound("Media/music.ogg")
P.S.
Se kirjoitetaan soundChannel, ei soundChanel. Chanel on muotitalo, channel on kanava.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 3:48 pm
Location: Turku

Re: Tyhmät kysymykset (I/2011)

Post by skorpioni-cb »

VesQ wrote:
skorpioni-cb wrote:Tyylikkäästi ollaan edittaamatta tota ekaa viestiä, mutta kumminkin:
Nyt kaikki toimii kuten pitääkin, paitsi että kun mä yritän saada musiikin looppaamaan, siitä tulee ekalla kerralla siedettävää, mutta tokalla kertaa tulee ihan kauheeta ear-rapea, mikäköhän on vikana, mediat löytyy taas SideX-viestiketjusta:

Code: Select all

	soundChanel = PlaySound ("Media/music.ogg")
	Repeat
		If Not SoundPlaying(soundChanel) Then PlaySound "Media/music.ogg"
Et aseta "soundChanel" muuttujaan uudelleen mitään arvoa, joten koodinpätkä Not SoundPlaying(soundChanel) palauttaa aina 1 ja "Media/music.ogg" tiedostoa soitetaan aina uudelleen. Voinet käyttää tätä iffiä mielummin:

Code: Select all

If Not SoundPlaying(soundChanel) Then soundChanel = PlaySound("Media/music.ogg")
P.S.
Se kirjoitetaan soundChannel, ei soundChanel. Chanel on muotitalo, channel on kanava.
No sori ettei englanti oo mun paras kieleni
En tiedä, mitä tiedän, mutta tiedän ettei se ole mitään kaunista.

I know not what I know, but I do know that it's not beautiful.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

skorpioni-cb wrote:No sori ettei englanti oo mun paras kieleni
Mielestäni en ilkkunut, vaan huomautin vaan. Ei tarvitse heti loukkaantua. Sitäpaitsi kerroin myös virheesi lähteen ja jätit sitten kokonaan siihen vastaamatta? Aikamoista offtopikkia. Palattaisiinko aiheeseen?
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Tyhmät kysymykset (I/2011)

Post by Hene »

Miten saisin auton toimimaan fiksusti risteyksissä (eli niin, että auto valitsee itsestään aina jonkin ajokelpoisen kulkusuunnaan)?

E: Siis auton olisi tarkoitus ajaa itsestään hit-kerroksella suljetun tileset-kaupungin sisällä tottakai. Eli siis aina kun auton eteen avautuu uusia vapaita liikkumisreittejä (tai kun eteen ilmestyy hit-kerros), niin auton tulisi muuttaa suuntaansa.
"Baby," I said. "I'm a genius but nobody knows it but me."
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Helpoin ja konetehojen kannalta ehkä paras ratkaisu on tehdä tielle datakerrokseen checkpointit. Eli auto hakee vaikka lähimmän checkpointin, kääntyy ja ajaa sitä kohti. Kun auto saavuttaa checkpointin (on tarpeeksi lähellä sitä, esim. distance(autox, autoy, checkx, checky) < 5), auto hakee seuraavan checkpointin.
EDIT:

Jos välttämättä haluat että autolla on vapaampi tekoäly (ei checkpointteja), käytä ObjectPick-komentoa. Eli tee oma poiminta-objekti, joka asetetaan tietyin väliajoin (esim. joka sekunti) auton kohdalle. Objekti tekee poiminnan vaikka eteenpäin ja molemmille sivuille 45 asteen kulmassa. Sitten katsotaan etäisyys poimittuihin (kartan) kohteisiin (pickedX(), pickedY(), distance()). Jos etäisyys on korkea, on siinä suunnassa tilaa liikkua. Jos etäisyys on pieni, on siinä suunnassa seinä lähellä.

Mitä useammin suoritat poiminnan, ja mitä enemmän näitä teet (esim. 6 poimintaa joka suuntaan yhteensä), sitä hitaampi yhden hahmon tekoäly on.

-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

Jonez wrote:Jos välttämättä haluat että autolla on vapaampi tekoäly (ei checkpointteja), käytä ObjectPick-komentoa. Eli tee oma poiminta-objekti, joka asetetaan tietyin väliajoin (esim. joka sekunti) auton kohdalle. Objekti tekee poiminnan vaikka eteenpäin ja molemmille sivuille 45 asteen kulmassa. Sitten katsotaan etäisyys poimittuihin (kartan) kohteisiin (pickedX(), pickedY(), distance()). Jos etäisyys on korkea, on siinä suunnassa tilaa liikkua. Jos etäisyys on pieni, on siinä suunnassa seinä lähellä.

Mitä useammin suoritat poiminnan, ja mitä enemmän näitä teet (esim. 6 poimintaa joka suuntaan yhteensä), sitä hitaampi yhden hahmon tekoäly on.
Juuri näin toimii oikeastaan NetMatchin bottien tekoäly. Game.cb, rivi 317 eteenpäin, voinet siitä ottaa esimerkkiä.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Combatti
Active Member
Posts: 101
Joined: Fri Jun 29, 2012 6:23 pm
Location: Kuhmo

Re: Tyhmät kysymykset (I/2011)

Post by Combatti »

Code: Select all

//Pelaajan koordinaatit
x = 130
y = 130
//Maan koordinaatit
x2 = 0
y2 = 250

Repeat 
    //Piirretään maa ja pelaaja
    Box x,y,16,16
    Box x2,y2,400,50
    //Jos maa ja pelaaja ovat osuneet toisiinsa, niin pelaajan y-koordinaattia ei lasketa
    If BoxOverlap(x,y,16,16,x2,y2,400,50) Then 
        y=y
    Else //Ellei näin ole..
        y=y+2 //..Niin sitä lasketaan.
    EndIf 
    
    //Pelaajan kontrollit
    If RightKey() Then x=x+1
    If LeftKey() Then x=x-1
    //Itse kaatumistilanne, ohjelma siis kaatuu, kun tämä ehto on palauttanut toden kaksi kertaa
    If KeyHit(cbkeyspace) Then
    Repeat
    y = y - 1
    yM = yM +1
    Until yM = 32
    
    EndIf 
    
    DrawScreen

Until EscapeKey()
Tämä kaataa ohjelman. Miksi? Image
~Yhteiskuntaan kyllästynyt koodari.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 »

Combatti wrote:

Code: Select all

//Pelaajan koordinaatit
x = 130
y = 130
//Maan koordinaatit
x2 = 0
y2 = 250

Repeat 
    //Piirretään maa ja pelaaja
    Box x,y,16,16
    Box x2,y2,400,50
    //Jos maa ja pelaaja ovat osuneet toisiinsa, niin pelaajan y-koordinaattia ei lasketa
    If BoxOverlap(x,y,16,16,x2,y2,400,50) Then 
        y=y
    Else //Ellei näin ole..
        y=y+2 //..Niin sitä lasketaan.
    EndIf 
    
    //Pelaajan kontrollit
    If RightKey() Then x=x+1
    If LeftKey() Then x=x-1
    //Itse kaatumistilanne, ohjelma siis kaatuu, kun tämä ehto on palauttanut toden kaksi kertaa
    If KeyHit(cbkeyspace) Then
    Repeat
    y = y - 1
    yM = yM +1
    Until yM = 32
    
    EndIf 
    
    DrawScreen

Until EscapeKey()
Tämä kaataa ohjelman. Miksi? Image
Tulee loputon looppi koska yM on edellisen ehdon jälkeen 32. Uudella kierroksella sitten siihen lisätään yksi ennen vertailua jolloin se on 33 eikä näin ole sama kuin 32. Lopputuloksena siis loputon looppi ja ohjelman jäätyminen koska DrawScreeniä ei kutsuta.
User avatar
Combatti
Active Member
Posts: 101
Joined: Fri Jun 29, 2012 6:23 pm
Location: Kuhmo

Re: Tyhmät kysymykset (I/2011)

Post by Combatti »

Latexi95 wrote:
Combatti wrote:

Code: Select all

//Pelaajan koordinaatit
x = 130
y = 130
//Maan koordinaatit
x2 = 0
y2 = 250

Repeat 
    //Piirretään maa ja pelaaja
    Box x,y,16,16
    Box x2,y2,400,50
    //Jos maa ja pelaaja ovat osuneet toisiinsa, niin pelaajan y-koordinaattia ei lasketa
    If BoxOverlap(x,y,16,16,x2,y2,400,50) Then 
        y=y
    Else //Ellei näin ole..
        y=y+2 //..Niin sitä lasketaan.
    EndIf 
    
    //Pelaajan kontrollit
    If RightKey() Then x=x+1
    If LeftKey() Then x=x-1
    //Itse kaatumistilanne, ohjelma siis kaatuu, kun tämä ehto on palauttanut toden kaksi kertaa
    If KeyHit(cbkeyspace) Then
    Repeat
    y = y - 1
    yM = yM +1
    Until yM = 32
    
    EndIf 
    
    DrawScreen

Until EscapeKey()
Tämä kaataa ohjelman. Miksi?
Tulee loputon looppi koska yM on edellisen ehdon jälkeen 32. Uudella kierroksella sitten siihen lisätään yksi ennen vertailua jolloin se on 33 eikä näin ole sama kuin 32. Lopputuloksena siis loputon looppi ja ohjelman jäätyminen koska DrawScreeniä ei kutsuta.
Kun sanon, että ohjelma kaatuu, se myös kaatuu, eli ei vastaa. Mutta korjaanpa tuon.
EDIT:

Juu, nyt ei kaadu. Kiitosta.

P.s. Eikai ketään haittaa nää mun hymiöt, koska en yhtään tykkää foorumin vakiohymiöistä.
Last edited by Combatti on Mon Jul 23, 2012 10:29 am, edited 2 times in total.
~Yhteiskuntaan kyllästynyt koodari.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

Combatti wrote:
EDIT:

Juu, nyt ei kaadu. Kiitosta. Image

P.s. Eikai ketään haittaa nää mun hymiöt, koska en yhtään tykkää foorumin vakiohymiöistä.
Minua ei haittaa, mutta niitä saattaa haitata, jotka ovat estäneet hymiöt asetuksista ja nuo silti näkyvät.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

Combatti wrote:Kun sanon, että ohjelma kaatuu, se myös kaatuu, eli ei vastaa. Mutta korjaanpa tuon.
Yleensä kaatumisella tarkoitetaan sitä että ohjelma sammuu arvaamattomasti, joskus heittäen virheraporttia. Ohjelman jäätyminen puolestaan on juuri tuo kuvaamasi "ei vastaa" -tilanne.
Combatti wrote:P.s. Eikai ketään haittaa nää mun hymiöt, koska en yhtään tykkää foorumin vakiohymiöistä.
Haittaa. Jos foorumin oletushymiöt ovat mielestästi tyhmiä, älä käytä niitä. Ei siinä ole mitään pahaa että tekee viestejä joissa ei ole hymiöitä, päinvastoin.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Tyhmät kysymykset (I/2011)

Post by Hene »

Yritin testimielessä tehdä tekstin salaus- ja salauksen purkuohjelmaa, mutta jostain syystä ohjelma ei onnistu purkamaan salausta kunnolla. Salaamaton lause on "dont you worry babe. im an expert.", mutta kun salausta yrittää purkaa niin ohjelma palauttaa "d1e1dt 2e1e2a 2c1e1h1h2e babe. i1c a1d e2d1fe1ht."

Code: Select all

SCREEN 800,800
mitä_avataan=1 //0=LUO UUSI SALATTU .TXT -TIEDOSTO, 1=AVAA AIEMPI SALATTU .TXT -TIEDOSTO
tiedostonimi$="exa.txt" //MIHIN POLKUUN TIEDOSTO TALLENNETAAN/AVATAAN

//SALAUS
If mitä_avataan=0 Then
theline$="dont you worry babe. im an expert." //TEKSTI JOKA SALATAAN

theline$=Replace(theline$,"a", "1/")
theline$=Replace(theline$,"b", "2/")
theline$=Replace(theline$,"c", "3/")
theline$=Replace(theline$,"d", "4/")
theline$=Replace(theline$,"e", "5/")
theline$=Replace(theline$,"f", "6/")
theline$=Replace(theline$,"g", "7/")
theline$=Replace(theline$,"h", "8/")
theline$=Replace(theline$,"i", "9/")
theline$=Replace(theline$,"j", "10/")
theline$=Replace(theline$,"k", "11/")
theline$=Replace(theline$,"l", "12/")
theline$=Replace(theline$,"m", "13/")
theline$=Replace(theline$,"n", "14/")
theline$=Replace(theline$,"o", "15/")
theline$=Replace(theline$,"p", "16/")
theline$=Replace(theline$,"q", "17/")
theline$=Replace(theline$,"r", "18/")
theline$=Replace(theline$,"s", "19/")
theline$=Replace(theline$,"t", "20/")
theline$=Replace(theline$,"u", "21/")
theline$=Replace(theline$,"v", "22/")
theline$=Replace(theline$,"w", "23/")
theline$=Replace(theline$,"x", "24/")
theline$=Replace(theline$,"y", "25/")
theline$=Replace(theline$,"z", "26/")
theline$=Replace(theline$,"å", "27/")
theline$=Replace(theline$,"ä", "28/")
theline$=Replace(theline$,"ö", "29/")

f=OpenToWrite (tiedostonimi$) //MIHIN POLKUUN SALATTU TIEDOSTO TALLENNETAAN
    WriteLine f,theline$
CloseFile f

AddText "SALATTU TEKSTI: "+theline$+""
AddText "POLKU: "+tiedostonimi$+""
AddText ""
AddText "SALAUS VALMIS."
DrawScreen
WaitKey
EndIf

If mitä_avataan=1 Then
f=OpenToEdit(tiedostonimi$)
    theline$=ReadLine(f)
    alkup_theline$=theline$
CloseFile f

theline$=Replace(theline$,"1/", "a")
theline$=Replace(theline$,"2/", "b")
theline$=Replace(theline$,"3/", "c")
theline$=Replace(theline$,"4/", "d")
theline$=Replace(theline$,"5/", "e")
theline$=Replace(theline$,"6/", "f")
theline$=Replace(theline$,"7/", "g")
theline$=Replace(theline$,"8/", "h")
theline$=Replace(theline$,"9/", "i")
theline$=Replace(theline$,"10/", "j")
theline$=Replace(theline$,"11/", "k")
theline$=Replace(theline$,"12/", "l")
theline$=Replace(theline$,"13/", "m")
theline$=Replace(theline$,"14/", "n")
theline$=Replace(theline$,"15/", "o")
theline$=Replace(theline$,"16/", "p")
theline$=Replace(theline$,"17/", "q")
theline$=Replace(theline$,"18/", "r")
theline$=Replace(theline$,"19/", "s")
theline$=Replace(theline$,"20/", "t")
theline$=Replace(theline$,"21/", "u")
theline$=Replace(theline$,"22/", "v")
theline$=Replace(theline$,"23/", "w")
theline$=Replace(theline$,"24/", "x")
theline$=Replace(theline$,"25/", "y")
theline$=Replace(theline$,"26/", "z")
theline$=Replace(theline$,"27/", "å")
theline$=Replace(theline$,"28/", "ä")
theline$=Replace(theline$,"29/", "ö")

f=OpenToWrite (tiedostonimi$) //MIHIN POLKUUN SALATTU TIEDOSTO TALLENNETAAN
    WriteLine f,theline$
CloseFile f

AddText "SALATTU TEKSTI: "+alkup_theline$+""
AddText "PURETTU TEKSTI: "+theline$+""
AddText "POLKU: "+tiedostonimi$+""
AddText ""
AddText "SALAUKSEN PURKAMINEN VALMIS."
DrawScreen

WaitKey
EndIf
"Baby," I said. "I'm a genius but nobody knows it but me."
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Tyhmät kysymykset (I/2011)

Post by MetalRain »

Hene wrote:Yritin testimielessä tehdä tekstin salaus- ja salauksen purkuohjelmaa, mutta jostain syystä ohjelma ei onnistu purkamaan salausta kunnolla. Salaamaton lause on "dont you worry babe. im an expert.", mutta kun salausta yrittää purkaa niin ohjelma palauttaa "d1e1dt 2e1e2a 2c1e1h1h2e babe. i1c a1d e2d1fe1ht."

Code: Select all

SCREEN 800,800
mitä_avataan=1 //0=LUO UUSI SALATTU .TXT -TIEDOSTO, 1=AVAA AIEMPI SALATTU .TXT -TIEDOSTO
tiedostonimi$="exa.txt" //MIHIN POLKUUN TIEDOSTO TALLENNETAAN/AVATAAN

//SALAUS
If mitä_avataan=0 Then
theline$="dont you worry babe. im an expert." //TEKSTI JOKA SALATAAN

theline$=Replace(theline$,"a", "1/")
theline$=Replace(theline$,"b", "2/")
theline$=Replace(theline$,"c", "3/")
theline$=Replace(theline$,"d", "4/")
theline$=Replace(theline$,"e", "5/")
theline$=Replace(theline$,"f", "6/")
theline$=Replace(theline$,"g", "7/")
theline$=Replace(theline$,"h", "8/")
theline$=Replace(theline$,"i", "9/")
theline$=Replace(theline$,"j", "10/")
theline$=Replace(theline$,"k", "11/")
theline$=Replace(theline$,"l", "12/")
theline$=Replace(theline$,"m", "13/")
theline$=Replace(theline$,"n", "14/")
theline$=Replace(theline$,"o", "15/")
theline$=Replace(theline$,"p", "16/")
theline$=Replace(theline$,"q", "17/")
theline$=Replace(theline$,"r", "18/")
theline$=Replace(theline$,"s", "19/")
theline$=Replace(theline$,"t", "20/")
theline$=Replace(theline$,"u", "21/")
theline$=Replace(theline$,"v", "22/")
theline$=Replace(theline$,"w", "23/")
theline$=Replace(theline$,"x", "24/")
theline$=Replace(theline$,"y", "25/")
theline$=Replace(theline$,"z", "26/")
theline$=Replace(theline$,"å", "27/")
theline$=Replace(theline$,"ä", "28/")
theline$=Replace(theline$,"ö", "29/")

f=OpenToWrite (tiedostonimi$) //MIHIN POLKUUN SALATTU TIEDOSTO TALLENNETAAN
    WriteLine f,theline$
CloseFile f

AddText "SALATTU TEKSTI: "+theline$+""
AddText "POLKU: "+tiedostonimi$+""
AddText ""
AddText "SALAUS VALMIS."
DrawScreen
WaitKey
EndIf

If mitä_avataan=1 Then
f=OpenToEdit(tiedostonimi$)
    theline$=ReadLine(f)
    alkup_theline$=theline$
CloseFile f

theline$=Replace(theline$,"1/", "a")
theline$=Replace(theline$,"2/", "b")
theline$=Replace(theline$,"3/", "c")
theline$=Replace(theline$,"4/", "d")
theline$=Replace(theline$,"5/", "e")
theline$=Replace(theline$,"6/", "f")
theline$=Replace(theline$,"7/", "g")
theline$=Replace(theline$,"8/", "h")
theline$=Replace(theline$,"9/", "i")
theline$=Replace(theline$,"10/", "j")
theline$=Replace(theline$,"11/", "k")
theline$=Replace(theline$,"12/", "l")
theline$=Replace(theline$,"13/", "m")
theline$=Replace(theline$,"14/", "n")
theline$=Replace(theline$,"15/", "o")
theline$=Replace(theline$,"16/", "p")
theline$=Replace(theline$,"17/", "q")
theline$=Replace(theline$,"18/", "r")
theline$=Replace(theline$,"19/", "s")
theline$=Replace(theline$,"20/", "t")
theline$=Replace(theline$,"21/", "u")
theline$=Replace(theline$,"22/", "v")
theline$=Replace(theline$,"23/", "w")
theline$=Replace(theline$,"24/", "x")
theline$=Replace(theline$,"25/", "y")
theline$=Replace(theline$,"26/", "z")
theline$=Replace(theline$,"27/", "å")
theline$=Replace(theline$,"28/", "ä")
theline$=Replace(theline$,"29/", "ö")

f=OpenToWrite (tiedostonimi$) //MIHIN POLKUUN SALATTU TIEDOSTO TALLENNETAAN
    WriteLine f,theline$
CloseFile f

AddText "SALATTU TEKSTI: "+alkup_theline$+""
AddText "PURETTU TEKSTI: "+theline$+""
AddText "POLKU: "+tiedostonimi$+""
AddText ""
AddText "SALAUKSEN PURKAMINEN VALMIS."
DrawScreen

WaitKey
EndIf
Tässä mennään pieleen siinä että esim 1/ täsmää myös merkkijonon 21/ tai 11/ loppuosaan, tämä pätee kaikille yhdeksälle ensimmäiselle. Purkamisessa tulisi joko purkaa ensin pidemmät pätkät ja sitten vasta lyhemmät tai vaihtoehtoisesti on käyttää merkkijonoja jotka eivät ole toistensa osia, esimerkiksi salaamalla joka kirjaimen kaksinumeroisella luvulla. Kolmantena vaihtoehtona voisi vaikka lukea merkkijonoa aina seuraavaan / merkkiin saakka esim countword ja getwordin avulla.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Tyhmät kysymykset (I/2012)

Post by valscion »

Jatketaan perinteikästä linjaa ja pilkotaan jättiketju pienempiin osiin. Sarjan edelliset viestiketjut ovat:
Tyhmät kysymykset (I/2009)
Tyhmät kysymykset (II/2009)
Tyhmät kysymykset (I/2010)
Tyhmät kysymykset (I/2011)

Ylläpito pilkkoo kaikki yli 100-sivuiset aiheet jatkoketjuiksi. Lisäksi aloitetaan uusi ketju vuosittain.

Tyhmät kysymykset - tarkoitus

Törmäsitkö ongelmaan, jonka tiedät olevan oikeasti ihan helppo, mutta ratkaisu ei vain osu silmään? Onko ongelmasi niin vähäpätöinen, ettei sitä varten kannata tehdä uutta ketjua?

Alkuperäisen ketjun johdanto meni näin:
iTKEVAnAKKI wrote:Eli tänne kaikki yksinkertaiset kysymykset johin et ole keksinyt ratkaisua. Mutta muistakaa, että käytätte ensin hakua!
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
LoolPoop

Re: Tyhmät kysymykset (I/2012)

Post by LoolPoop »

Okei tämä ongelma on varmasti ollut muillakin. Mutta ongelma on että aina kun yritän suorittaa minkä tahansa ohjelma joka lataa jotain (esim ukko = LoadObject("Media\guy.bmp", 360)) tulee MAV. Sama toistuu harjoitus ohjelmissa. minulla on vista ja latoin "suorita järjestelmä valvojana".
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2012)

Post by Awaclus »

LoolPoop wrote:Okei tämä ongelma on varmasti ollut muillakin. Mutta ongelma on että aina kun yritän suorittaa minkä tahansa ohjelma joka lataa jotain (esim ukko = LoadObject("Media\guy.bmp", 360)) tulee MAV. Sama toistuu harjoitus ohjelmissa. minulla on vista ja latoin "suorita järjestelmä valvojana".
Kokeile laittaa pienempi numero kuin 360.
LoolPoop

Re: Tyhmät kysymykset (I/2012)

Post by LoolPoop »

ei toiminut ja se vika toistuu kaikissa harjoitus ohjelmissa.
Locked