Tyhmät kysymykset (II/2009)
-
- Advanced Member
- Posts: 364
- Joined: Wed Dec 03, 2008 3:48 pm
- Location: Turku
Re: Tyhmät kysymykset (II/2009)
Miten voi tehdä yksinkertaisen sudoku pelin?
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.
I know not what I know, but I do know that it's not beautiful.
Re: Tyhmät kysymykset (II/2009)
Taulukoilla on helpinta. Ainakin tarkistus.skorpioni-cb wrote:Miten voi tehdä yksinkertaisen sudoku pelin?
[color=#40BF00][u]koodaaja[/u][/color] wrote:Täyden turvan takaamiseksi avain olisi myös kuljetettava offlinenä suoraan tulevien viestien lähettäjältä niiden vastaanottajalle laitakaupungin hämärissä yöneljältä ja varmistettava, ettei kumpaakaan osapuolta seurata. Popliinitakkia suositellaan.
Re: Tyhmät kysymykset (II/2009)
Mites GotoSavedLocationia käytetään?
Kun itse testaan ni ruutu on mustana.
Kun itse testaan ni ruutu on mustana.
- kaneli2000
- Guru
- Posts: 1059
- Joined: Mon Mar 17, 2008 2:40 pm
- Location: Lempäälä
Re: Tyhmät kysymykset (II/2009)
martti wrote:Mites GotoSavedLocationia käytetään?
Kun itse testaan ni ruutu on mustana.
CoolBasicin manuaali wrote:Tämä komento siirtää pelin suorituksen täsmälleen samaan paikkaan, mihin se jäi kun peli tallennettiin. Käytä tätä komentoa LoadProgramin jälkeen. Yleensä vielä senkin jälkeen, kun kaikki kuvat sun muut on ladattu uudelleen.
ESIMERKKICode: Select all
'Save game foo() Print "Program continues..." 'LoadGame LoadProgram "savegame.sav" GotoSavedLocation Print "Program ended" WaitKey Function foo() SaveProgram "savegame.sav" 'will continue from here after loading... Print "Game Saved..." End Function
I see the rainbow rising
Re: Tyhmät kysymykset (II/2009)
Tuon luin oppaasta.kaneli2000 wrote:martti wrote:Mites GotoSavedLocationia käytetään?
Kun itse testaan ni ruutu on mustana.CoolBasicin manuaali wrote:Tämä komento siirtää pelin suorituksen täsmälleen samaan paikkaan, mihin se jäi kun peli tallennettiin. Käytä tätä komentoa LoadProgramin jälkeen. Yleensä vielä senkin jälkeen, kun kaikki kuvat sun muut on ladattu uudelleen.
ESIMERKKICode: Select all
'Save game foo() Print "Program continues..." 'LoadGame LoadProgram "savegame.sav" GotoSavedLocation Print "Program ended" WaitKey Function foo() SaveProgram "savegame.sav" 'will continue from here after loading... Print "Game Saved..." End Function
Ongelma siinä miten ne mediat ladataan.
-
- Advanced Member
- Posts: 308
- Joined: Tue Nov 25, 2008 8:06 pm
- Contact:
Re: Tyhmät kysymykset (II/2009)
Ohjelman suoritus siirtyy tallennuksen jälkeiseen kohtaan, mutta mediat sun muut pitää ladata erikseen. Kuitenkin, oman tallennussysteemin tekoa suositellaan.
a.k.a. Gehock
Re: Tyhmät kysymykset (II/2009)
Viestejä siivottu vähän. Tämän on tarkoitus olla vähän vähemmän taitaville CB-käyttäjille suunnattu, joten yrittäkää sietää vaihtelevaa kielioppia.
Re: Tyhmät kysymykset (II/2009)
Miksi ei toimi, miten voin korjata?
Code: Select all
Type JOKU
Field _normisijaintiX
Field _normisijaintiY
Field _normikokoX
Field _normikokoX
Field _normiid
EndType
Function tee(_x,_y,_kokox,_kokoy,_id)
_testi.JOKU = New(JOKU)
_testi\_normisijaintiX = _x
_testi\_normisijaintiY = _y
_testi\_normikokoX = _kokox
_testi\_normikokoY = _kokoy
_testi\_normiid = _id
EndFunction
Black city peleistä parhain
-
- Advanced Member
- Posts: 349
- Joined: Mon Aug 27, 2007 9:00 pm
- Location: Lapinjärvi, Finland
- Contact:
Re: Tyhmät kysymykset (II/2009)
Ei toimi koska tyyppikokoelmassa on kaksi samannimistä kenttää (field). Muuta toinen _normikokoX _normikokoY:ksi.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
Runoblogi, vuodatusta ja sekoiluja.
Re: Tyhmät kysymykset (II/2009)
Joo moi taas kaikki, mulla jääty jokunen aika sitten projekti tohon tasohyppelyn vihollisen tekoälyyn ja nyt alkaisin taas tekemään.. ku ei ne alkaneet ampua vaikka pakostakaan. nii, että mikä ois paras keino saaha tasohyppely vihollinen liikkumaan ja ampumaan?. Omaa väkerrystä en laita, koska ette tosiaankaa tulisi pitämään siitä..
vihollinen on siis kuva..ei fraameja eikä muuta jännää toistaiseksi.
vihollinen on siis kuva..ei fraameja eikä muuta jännää toistaiseksi.
EDIT:
Kiitti paljon! selkeni asiat
Last edited by rami123 on Tue Sep 29, 2009 9:25 pm, edited 1 time in total.
Re: Tyhmät kysymykset (II/2009)
Hyvään tekoälyyn ei mitään "parasta" tai vakituista tapaa ole. Jokainen peli tarvitsee omanlaisensa tekoälyn. Tämä on erittäin hankala ohjelmoinnin osa-alue. Parhaiten opit yrittämällä itse.
Tässä yksi tapa toteuttaa strategiapelin tekoäly (teoriaa):
Yhden framen aikana voisi tapahtua seuraavaa:
1. Katsotaan kaikki mahdolliset toiminnot.
2a. Annetaan jokaiselle toiminnolle pisteitä sen mukaan, kuinka järkevä se on.
2b. Toistetaan kohta 1 ja 2a niin monta kertaa kuin halutaan: mitä useammin toistamme, sitä tarkemman kuvan saamme siitä mikä ensimmäisistä vaihtoehdoista on paras.
Esim: meillä on vaihtoehdot X1 ja Y1. X1 antaa pisteitä 2 ja Y1 4p. X1 johtaa vaihtoehtoihin X2 ja Y2. X2 = 6 pist. Y2 = 1p. Y1 johtaa tilanteisiin X3 ja Y3: X3 = 2p. Y3 = 2p. Paras vaihtoehto ei siis ole Y1, vaikka siitä saa enemmän pisteitä kuin X1:stä, vaan X1, koska se johtaa parempaan lopputulokseen, X2:een: X1 + X2 = 2 + 6 = 8 pistettä <- suurin mahdollinen pistemäärä.
3. Toteutetaan vaihtoehto joka johtaa (todennäköisesti) parhaaseen lopputulokseen.
Esim. shakki-tekoälyt noudattavat tämäntyylistä tapaa. Suosittelen etsimään ja lukemaan netistä tekoäly-teoriaa.
Tässä kuitenkin vähän erilainen tekoäly vanhaan kunnon toimintaan. Botit juoksentelevat ympäri mappia seuraavan kaavan mukaan:
1: Jos seinä -> vaihda suuntaa.
2: Jos este -> hyppää päälle.
3: Jos mahdollista hypätä toiselle tasolle -> tee se.
4: Jos näet vihollisen -> ammu.
Tein koodin cb:n painovoimaesimerkin päälle. Se ei ole todellakaan täydellinen, ja asiat on hoidettu aika suorasukaisesti. Kunnon tekoälylle kannattaa tehdä paljon selkeämpi rakenne. Tämä on enemmänkin vain joukko ehtolausekkeita. Jos tekoälyä jatkaisi pitkään samaan tyyliin, rupeaisivat ehtolausekkeet käymään hiljalleen ristiriitaisiksi ja sekaviksi. Esimerkkinä sen pitäisi olla riittävä, joskin aika niukasti kommentoitu.
Tässä yksi tapa toteuttaa strategiapelin tekoäly (teoriaa):
Yhden framen aikana voisi tapahtua seuraavaa:
1. Katsotaan kaikki mahdolliset toiminnot.
2a. Annetaan jokaiselle toiminnolle pisteitä sen mukaan, kuinka järkevä se on.
2b. Toistetaan kohta 1 ja 2a niin monta kertaa kuin halutaan: mitä useammin toistamme, sitä tarkemman kuvan saamme siitä mikä ensimmäisistä vaihtoehdoista on paras.
Esim: meillä on vaihtoehdot X1 ja Y1. X1 antaa pisteitä 2 ja Y1 4p. X1 johtaa vaihtoehtoihin X2 ja Y2. X2 = 6 pist. Y2 = 1p. Y1 johtaa tilanteisiin X3 ja Y3: X3 = 2p. Y3 = 2p. Paras vaihtoehto ei siis ole Y1, vaikka siitä saa enemmän pisteitä kuin X1:stä, vaan X1, koska se johtaa parempaan lopputulokseen, X2:een: X1 + X2 = 2 + 6 = 8 pistettä <- suurin mahdollinen pistemäärä.
3. Toteutetaan vaihtoehto joka johtaa (todennäköisesti) parhaaseen lopputulokseen.
Esim. shakki-tekoälyt noudattavat tämäntyylistä tapaa. Suosittelen etsimään ja lukemaan netistä tekoäly-teoriaa.
Tässä kuitenkin vähän erilainen tekoäly vanhaan kunnon toimintaan. Botit juoksentelevat ympäri mappia seuraavan kaavan mukaan:
1: Jos seinä -> vaihda suuntaa.
2: Jos este -> hyppää päälle.
3: Jos mahdollista hypätä toiselle tasolle -> tee se.
4: Jos näet vihollisen -> ammu.
Tein koodin cb:n painovoimaesimerkin päälle. Se ei ole todellakaan täydellinen, ja asiat on hoidettu aika suorasukaisesti. Kunnon tekoälylle kannattaa tehdä paljon selkeämpi rakenne. Tämä on enemmänkin vain joukko ehtolausekkeita. Jos tekoälyä jatkaisi pitkään samaan tyyliin, rupeaisivat ehtolausekkeet käymään hiljalleen ristiriitaisiksi ja sekaviksi. Esimerkkinä sen pitäisi olla riittävä, joskin aika niukasti kommentoitu.
Code: Select all
'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 1024, 768
SetWindow "Painovoimaesimerkki" 'suurenna ruudulle
FrameLimit 40
Const PAINOVOIMA = -0.1'painoviman voimakkuus
Type ukot
Field obj
Field maassa As Byte
Field vauhti
Field yPlus As Float
Field oldY
Field reload
EndType
Type ammukset
Field obj
Field id
EndType
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\testmap.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5
'lataa animaatiosarja oikealle, maskaa ja piilota se
oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,30,51 'tämä pitää asettaa kaikkiin
'sama vasemmalle
vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,30,51 'tämä pitää asettaa kaikkiin
Global gBullet
gBullet = LoadObject( "media\bullet.bmp" )
ShowObject gBullet, OFF
For i = 1 To 5
UusiUkko( oikea, kenttä )
Next i
Function UusiUkko( _obj, _map )
nu.ukot = New( ukot )
nu\obj = CloneObject( _obj )
SetupCollision nu\obj, _map, 1, 4, 2
ObjectRange nu\obj, 30, 51
While nu\vauhti = 0
nu\vauhti = Rand( -1, 1 )
Wend
While True
_x = Rand( 1, MapWidth() )
_y = Rand( 1, MapHeight() )
If GetMap2( 2, _x, _y ) = 0 And GetMap2( 0, _x, _y ) <> 0 Then
PositionObject nu\obj, ( -ObjectSizeX( _map ) - 32 ) / 2 + _x * 32, ( -ObjectSizeY( _map ) + 16 ) / 2 + _y * 32 - 5
Exit
EndIf
Wend
ResetObjectCollision nu\obj
nu\oldY = ObjectY( nu\obj )
EndFunction
Repeat
For iu.ukot = Each ukot
'iu\vauhti=0 'oletuksena ei liikettä
' If RightKey() Then
If iu\vauhti > 0
'juokse oikealle
PaintObject iu\obj,oikea 'vaihda kuvaa...
If iu\maassa Then PlayObject iu\obj,2,11,0.25
ElseIf iu\vauhti < 0 Then
'juokse vasemmalle
PaintObject iu\obj,vasen 'vaihda kuvaa...
If iu\maassa Then PlayObject iu\obj,2,11,0.25
Else
'pysäytä animaatio, jos ei liikuta
PlayObject iu\obj,0
EndIf
Tekoäly( ConvertToInteger( iu ), kenttä )
'liikuta pelihahmoa
TranslateObject iu\obj,iu\vauhti * 2, iu\yPlus
iu\yPlus = iu\yPlus + PAINOVOIMA 'päivitä painovoima
'UpdateGame 'päivitä törmäys
'CloneCameraPosition pelihahmo 'liimaa kamera
jump = 0
If KeyDown(cbKeyZ) And iu\maassa Then
iu\yPlus=4.5 'voimaa ylös päin
jump = 1
EndIf
iu\maassa = 0 'ilmassa jollei toisin käy ilmi
törmäykset=CountCollisions(iu\obj)
'katsotaan tärmätäänkö kattoon tai lattiaan
For i=1 To törmäykset
If GetCollision(iu\obj,i)=kenttä
'lattia
If CollisionAngle(iu\obj,i)=90 And ( Not jump ) Then
iu\yPlus = -1
iu\maassa=1 'jalat on maassa
EndIf
'katto
If CollisionAngle(iu\obj,i)=270 Then
iu\yPlus=-1
EndIf
EndIf
Next i
'jos ollaan ilmassa, näytä toisenlainen kuva
If törmäykset=0 Then PlayObject iu\obj,12,0
bTuhoaUkko = False
For ia.ammukset = Each ammukset
bTuhoaAmmus = False
If iu = First( ukot ) Then
MoveObject ia\obj, 10
EndIf
If ObjectsOverlap( ia\obj, iu\obj ) Then
If ia\id <> ConvertToInteger( iu ) Then
bTuhoaAmmus = True
bTuhoaUkko = True
' Exit
EndIf
ElseIf Distance2( ia\obj, kenttä ) > 1000 Then
bTuhoaAmmus = True
EndIf
If bTuhoaAmmus Then
DeleteObject ia\obj
Delete ia
EndIf
Next ia
If bTuhoaUkko Then
'DeleteObject iu\obj
'Delete iu
EndIf
Next iu
DrawScreen 'piirrä näyttö
Until EscapeKey()
Function Tekoäly( _id, _map )
cu.ukot = ConvertToType( _id )
_objX = ObjectX( cu\obj )
_objY = ObjectY( cu\obj )
If cu\maassa Then
If cu\vauhti = 0 Then
cu\vauhti = Rand( -1, 1 )
EndIf
If GetMap( 2, _objX + cu\vauhti * 64, _objY ) <> 0 Then
If GetMap( 2, _objX + cu\vauhti * 64, _objY + 96 ) = 0 Then
hyppää = True
EndIf
EndIf
If GetMap( 2, _objX + cu\vauhti * 96, _objY + 64 ) = 1 Then
hyppää = True
EndIf
EndIf
If GetMap( 2, _objX + cu\vauhti * 16, _objY ) <> 0 Then
cu\vauhti = cu\vauhti * -1
EndIf
If Not cu\maassa Then
checkY = _objY
While True
checkY - 32
If GetMap( 2, _objX, checkY ) = 1 And checkY > cu\oldY Then
cu\vauhti = 0
Exit
EndIf
If checkY < cu\oldY Then Exit
Wend
EndIf
If hyppää Then
cu\oldY = _objY
cu\yPlus = 4.5
EndIf
If cu\reload = 0 Then
For iu.ukot = Each ukot
If iu <> cu Then
If ObjectSight( cu\obj, iu\obj ) Then
Ammu( _id, GetAngle( _objX, -_objY, ObjectX( iu\obj ), -ObjectY( iu\obj ) ) )
cu\reload = 10
Exit
EndIf
EndIf
Next iu
Else
cu\reload = cu\reload - 1
EndIf
EndFunction
Function Ammu( _id, _angle As Float )
cu.ukot = ConvertToType( _id )
na.ammukset = New( ammukset )
na\obj = CloneObject( gBullet )
na\id = _id
CloneObjectPosition na\obj, cu\obj
RotateObject na\obj, _angle
EndFunction
Re: Tyhmät kysymykset (II/2009)
Onko mahdollista tehdä ohjelmaa, joka avaa kuvan, kun klikkaa sitä kuvaa pic.jpg kakkospainikkeella ja valitsee "Avaa sovelluksessa... -> cbohjelma.exe"?
Re: Tyhmät kysymykset (II/2009)
Älä aloita ikinä kysymystä noin.Kuvatus wrote:Onko mahdollista tehdä ohjelmaa,
Tee yksinkertainen ehtolauseke:Kuvatus wrote:joka avaa kuvan, kun klikkaa sitä kuvaa pic.jpg kakkospainikkeella ja valitsee "Avaa sovelluksessa... -> cbohjelma.exe"?
Code: Select all
if mousex()>imagex and mousex()<imagex+imagewidth(image) and mousey()>imagey and mousey()<imagey+imageheight(image)
Re: Tyhmät kysymykset (II/2009)
Tai jos tarkoitit, että kun selaat resurssienhallinnassa, niin siihen tulee em. valinta? Se tulee automaattisesti kun klikkaat sitä kuvaa => Avaa sovelluksessa => Valitse ohjelma... => Selaa => (haet ohjelmasi ja valitset sen) OK.Kuvatus wrote:Onko mahdollista tehdä ohjelmaa, joka avaa kuvan, kun klikkaa sitä kuvaa pic.jpg kakkospainikkeella ja valitsee "Avaa sovelluksessa... -> cbohjelma.exe"?
Re: Tyhmät kysymykset (II/2009)
Tätähän minä hain, eli kun explorerissa selaa kuvatiedostoja ja valitsee sieltä kuvan jota klikkaa ja ottaa tuon "Avaa sovelluksessa... ja sieltä oma ohjelma, mutta millä saan sen haluamani kuvan avautumaan siihen ohjelmaan?axu wrote:Tai jos tarkoitit, että kun selaat resurssienhallinnassa, niin siihen tulee em. valinta? Se tulee automaattisesti kun klikkaat sitä kuvaa => Avaa sovelluksessa => Valitse ohjelma... => Selaa => (haet ohjelmasi ja valitset sen) OK.Kuvatus wrote:Onko mahdollista tehdä ohjelmaa, joka avaa kuvan, kun klikkaa sitä kuvaa pic.jpg kakkospainikkeella ja valitsee "Avaa sovelluksessa... -> cbohjelma.exe"?
Re: Tyhmät kysymykset (II/2009)
Tai itse asiassa löysin hetkisen selailulla tuon CommandLine() komennon, mutta en saa oikein toimimaan.
Kun tämän kääntää ohjelma.exeksi ja sitten valitsee kuvasta avaa sovelluksessa -> ohjelma.exe niin ainakin se saa haettua kuvan polun muttei osaa ladata sitä (erroria vilkuttelloo)..
Kun tämän kääntää ohjelma.exeksi ja sitten valitsee kuvasta avaa sovelluksessa -> ohjelma.exe niin ainakin se saa haettua kuvan polun muttei osaa ladata sitä (erroria vilkuttelloo)..
Code: Select all
tiedosto$=CommandLine()
kuva=LoadImage (""+tiedosto)
Repeat
DrawImage kuva,0,0
DrawScreen
Until EscapeKey()
Re: Tyhmät kysymykset (II/2009)
Näin toimii:kuvatus wrote:Tai itse asiassa löysin hetkisen selailulla tuon CommandLine() komennon, mutta en saa oikein toimimaan.
Kun tämän kääntää ohjelma.exeksi ja sitten valitsee kuvasta avaa sovelluksessa -> ohjelma.exe niin ainakin se saa haettua kuvan polun muttei osaa ladata sitä (erroria vilkuttelloo)..
Code: Select all
tiedosto$=CommandLine() kuva=LoadImage (""+tiedosto) Repeat DrawImage kuva,0,0 DrawScreen Until EscapeKey()
Code: Select all
tiedosto$=Trim(CommandLine())
kuva=LoadImage (""+tiedosto)
Repeat
DrawImage kuva,0,0
DrawScreen
Until EscapeKey()
Re: Tyhmät kysymykset (II/2009)
Onko mitään valmista funktiota joka palautaa taulukon jonkun ulottuvuuden koon, vai joudunko tekemään sen itse muuttujilla ja tuhlaamaan 54 sekuntia kalliista elämästäni?
[color=#40BF00][u]koodaaja[/u][/color] wrote:Täyden turvan takaamiseksi avain olisi myös kuljetettava offlinenä suoraan tulevien viestien lähettäjältä niiden vastaanottajalle laitakaupungin hämärissä yöneljältä ja varmistettava, ettei kumpaakaan osapuolta seurata. Popliinitakkia suositellaan.
Re: Tyhmät kysymykset (II/2009)
Itse asiassa ei näytä toimivan.Trim wrote:Näin toimii:kuvatus wrote:Tai itse asiassa löysin hetkisen selailulla tuon CommandLine() komennon, mutta en saa oikein toimimaan.
Kun tämän kääntää ohjelma.exeksi ja sitten valitsee kuvasta avaa sovelluksessa -> ohjelma.exe niin ainakin se saa haettua kuvan polun muttei osaa ladata sitä (erroria vilkuttelloo)..
Code: Select all
tiedosto$=CommandLine() kuva=LoadImage (""+tiedosto) Repeat DrawImage kuva,0,0 DrawScreen Until EscapeKey()
Code: Select all
tiedosto$=Trim(CommandLine()) kuva=LoadImage (""+tiedosto) Repeat DrawImage kuva,0,0 DrawScreen Until EscapeKey()