Page 27 of 43

Re: Tyhmät kysymykset (II/2009)

Posted: Mon Sep 21, 2009 4:33 pm
by skorpioni-cb
Miten voi tehdä yksinkertaisen sudoku pelin?

Re: Tyhmät kysymykset (II/2009)

Posted: Mon Sep 21, 2009 5:02 pm
by Taatero
skorpioni-cb wrote:Miten voi tehdä yksinkertaisen sudoku pelin?
Taulukoilla on helpinta. Ainakin tarkistus.

Re: Tyhmät kysymykset (II/2009)

Posted: Mon Sep 21, 2009 7:48 pm
by martti
Mites GotoSavedLocationia käytetään?
Kun itse testaan ni ruutu on mustana.

Re: Tyhmät kysymykset (II/2009)

Posted: Mon Sep 21, 2009 8:06 pm
by kaneli2000
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.

ESIMERKKI

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

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 22, 2009 4:58 pm
by martti
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.

ESIMERKKI

Code: 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
Tuon luin oppaasta.
Ongelma siinä miten ne mediat ladataan.

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 22, 2009 8:07 pm
by Herra Siili
Ohjelman suoritus siirtyy tallennuksen jälkeiseen kohtaan, mutta mediat sun muut pitää ladata erikseen. Kuitenkin, oman tallennussysteemin tekoa suositellaan.

Re: Tyhmät kysymykset (II/2009)

Posted: Wed Sep 23, 2009 11:08 am
by mikeful
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)

Posted: Sun Sep 27, 2009 9:38 am
by 11v
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

Re: Tyhmät kysymykset (II/2009)

Posted: Sun Sep 27, 2009 9:56 am
by otto90x
Ei toimi koska tyyppikokoelmassa on kaksi samannimistä kenttää (field). Muuta toinen _normikokoX _normikokoY:ksi.

Re: Tyhmät kysymykset (II/2009)

Posted: Sun Sep 27, 2009 10:08 am
by 11v
Ouu... kiitti

Re: Tyhmät kysymykset (II/2009)

Posted: Mon Sep 28, 2009 8:07 pm
by rami123
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.
EDIT:

Kiitti paljon! selkeni asiat ;)


Re: Tyhmät kysymykset (II/2009)

Posted: Mon Sep 28, 2009 10:51 pm
by Jonez
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.

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)

Posted: Tue Sep 29, 2009 2:52 pm
by Kuvatus
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)

Posted: Tue Sep 29, 2009 3:02 pm
by MAVmaggot
Kuvatus wrote:Onko mahdollista tehdä ohjelmaa,
Älä aloita ikinä kysymystä noin.
Kuvatus wrote:joka avaa kuvan, kun klikkaa sitä kuvaa pic.jpg kakkospainikkeella ja valitsee "Avaa sovelluksessa... -> cbohjelma.exe"?
Tee yksinkertainen ehtolauseke:

Code: Select all

if mousex()>imagex and mousex()<imagex+imagewidth(image) and mousey()>imagey and mousey()<imagey+imageheight(image)
Ja tuon avaa sovelluksessa -ikkunan saat cbApi-nimisellä kirjastolla. (löytyy cbSDK:sta)

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 29, 2009 4:47 pm
by axu
Kuvatus wrote:Onko mahdollista tehdä ohjelmaa, joka avaa kuvan, kun klikkaa sitä kuvaa pic.jpg kakkospainikkeella ja valitsee "Avaa sovelluksessa... -> cbohjelma.exe"?
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.

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 29, 2009 6:01 pm
by kuvatus
axu wrote:
Kuvatus wrote:Onko mahdollista tehdä ohjelmaa, joka avaa kuvan, kun klikkaa sitä kuvaa pic.jpg kakkospainikkeella ja valitsee "Avaa sovelluksessa... -> cbohjelma.exe"?
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.
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?

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 29, 2009 6:29 pm
by kuvatus
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()

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 29, 2009 6:45 pm
by Trim
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()
Näin toimii:

Code: Select all

tiedosto$=Trim(CommandLine())
kuva=LoadImage (""+tiedosto)
Repeat
DrawImage kuva,0,0
DrawScreen
Until EscapeKey()

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 29, 2009 6:48 pm
by Taatero
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?

Re: Tyhmät kysymykset (II/2009)

Posted: Tue Sep 29, 2009 7:00 pm
by kuvatus
Trim wrote:
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()
Näin toimii:

Code: Select all

tiedosto$=Trim(CommandLine())
kuva=LoadImage (""+tiedosto)
Repeat
DrawImage kuva,0,0
DrawScreen
Until EscapeKey()
Itse asiassa ei näytä toimivan.