Yksinkertaisen pelinteko?

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
runboy93
Newcomer
Posts: 2
Joined: Tue Jan 12, 2010 10:52 am

Yksinkertaisen pelinteko?

Post by runboy93 » Tue Jan 12, 2010 11:02 am

Onko se nyt niin yksinkertaista? Ei taida olla minun mielestäni
No minulla olisi pari kysymystä:

-Missä vaiheessa lisätään Spritet ja Tilet?
*Tehdäänkö spritet ja tilesetit Paintilla?
*Mitä Kuvatiedostomuotoja CoolBasic tukee?

-Tekstipelin teko?
*Onko hankalaa tehdä tekstipeliä?
*Olisiko mitään esimerkkejä?

Kiitos vastauksistanne :)

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Yksinkertaisen pelinteko?

Post by Jonez » Tue Jan 12, 2010 11:21 am

Ei, pelinteko ei todellakaan ole yksinkertaista. Tarvittavien komentojen ja funktioden käyttö, sekä ohjelman yleinen toiminta on yksinkertaista oppia. Ainoa mitä tarvitaan on paljon aikaa. Pelinteko on kuitenkin paljon muutakin kuin komentojen tietotaitoa.

Spritet ladataan cb:ssä funktiolla LoadImage(). Se on periaatteessa ihan sama milloin lataat, kunhan teet sen ennen kuin käytät itse kuvaa.
Tilemapit ladataan käyttäen funktiota LoadMap(). Tämä kannattaa tehdä ennen muiden objektien latausta, sillä kartat ovat eräänlaisia objekteja, ja koska objektit piirretään latausjärjestyksessä, saamme näin piirrettyä kartan muiden objektien alle.

Cb tukee formaatteja bmp, jpg, png ja tga. Kuvia ja tilemappeja voi tietenkin tehdä millä tahansa kuvanmuokkausohjelmalla, joka tukee jotain näistä formaateista.

Tekstipelin teko on yllättävän hankalaa, hankalanpaa cb:llä kuin esim. Qbasicilla, koska cb:n Input() ei pysäytä ohjelman suoritusta ja vaatii näin ollen silmukan. Nykyinen cb on tarkoitettu 2d-peliohjelmointiin, ja omaa siihen erittäin käytännöllisiä sisäänrakennettuja komentoja, kuten oman objektisysteemin ja type-kokoelmat.

Jos haluat aloittaa _helposta_, ja oppia ohjelmoimaan cb:llä, suosittelen käymään oppitunnit läpi (se pop-up-ikkuna kun avaa cb:n tai painaa f8). Ylhäältä kuvattu räiskintä / hippapeli on ehkä kaikista helpoin tapa aloittaa. Siihen on myös paljon esimerkkejä oppitunneissa ja manuaalissa.

Tässä ehkä yksinkertaisin tapa tehdä tekstipeli cb:llä:

Code: Select all

alku:
CloseInput()
Repeat

    Text 20, 20, "Olet sisällä."
    Text 20, 40, "1) Mene pihalle"
    Text 20, 60, "2) Katso televisiota"
    
    txt$ = Input( ": " )
    
    If KeyHit( CbKeyReturn ) Then
        If txt = "1" Then Goto piha
        If txt = "2" Then Goto tv
    EndIf

    DrawScreen
Forever

piha:
CloseInput()
Repeat

    Text 20, 20, "Olet pihalla..."
    Text 20, 40, "1) Mene takaisin sisälle"
    
    txt$ = Input( ": " )
    
    If KeyHit( CbKeyReturn ) Then
        If txt = "1" Then Goto alku
    EndIf

    DrawScreen
Forever

tv:
Cls
Text 20, 20, "Tv:stä ei tule mitään..."
DrawScreen
Wait 2000
Goto alku
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
runboy93
Newcomer
Posts: 2
Joined: Tue Jan 12, 2010 10:52 am

Re: Yksinkertaisen pelinteko?

Post by runboy93 » Tue Jan 12, 2010 11:41 am

Luin jo kattavan Manuaalin ja se no... auttoi hieman.
Pitää kai lukea tarkemmin.

KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: Yksinkertaisen pelinteko?

Post by KankiKalle » Tue Jan 12, 2010 4:38 pm

Itse olen tehnyt tekstipelejä tällä tavoin:

Code: Select all

'ei mitenkään pakollinen tapa toteuttaa rivinvaihtoa
tekstirivi = TextHeight ("") + 2

Repeat 

    Select paikka
        
        'alku
        Case 0 
            
            Text 10,tekstirivi,"Olet alussa."
            Text 10,tekstirivi*2,"Et halua olla tässä, menet muualla (1)"
            
            If KeyHit (cbkey1) Then paikka = 1
            
        Case 1 ' tänne tulit alun jälkeen
            
            Text 10,tekstirivi,"Tulit olohuoneeseen. Sinun on nälkä."
            Text 10,tekstirivi*2,"Mietit mistä hakea ruokaa."
            Text 10,tekstirivi*5,"Ullakolta (1)"
            Text 10,tekstirivi*6,"Eteisestä (2)"
            Text 10,tekstirivi*7,"Jääkaapista (3)"
            
            If KeyHit (cbkey1) Then paikka = 2
            If KeyHit (cbkey2) Then paikka = 3
            If KeyHit (cbkey3) Then paikka = 4 
            
      
        Case 2 ' menet ullakolle hakemaan ruokaa
            
            Text 10,tekstirivi*2,"Kapuat pölyiselle ullakolle. Lyöt varpaasi"
            Text 10,tekstirivi*3,"laatikkoon. Huudat sen takia, mutta avaat sen."
            Text 10,tekstirivi*4,"Lootasta löytyy säilykkeen. Vuodelta ennen sotia."
            Text 10,tekstirivi*5,"Ei näitä voi syödä, palaa takaisin. (1) "
            
            If KeyHit (cbkey1) Then paikka = 1
        
        
        
        Case 3 ' menet eteiseen hakemaan ruokaa
        
            Text 10,tekstirivi*2,"Eteisestä löytyy vain perheesi vanha koira."
            Text 10,tekstirivi*3,"Päässäsi napsahtaa. Katsot koiraasi oudosti."
            Text 10,tekstirivi*4,"Kyllästyt siihen ja menet jääkaapille. (1)"
            
            If KeyHit (cbkey1) Then paikka = 4 
            
        
        Case 4 'menet jääkaapille
            
            Text 10,tekstirivi*2,"Haet jääkaapista ruokaa. Siellä on makkaraa"
            Text 10,tekstirivi*3,"ja olutta. Mitä päätät ottaa jääkaapista?"
            Text 10,tekstirivi*5,"Makkaraa (1)"
            Text 10,tekstirivi*6,"Olutta (2)"
 
            If KeyHit (cbkey1) Then 
                paikka = 5
                ClearKeys ' getkey() takia seuraavas paikas
            EndIf 
            
            If KeyHit (cbkey2) Then 
                paikka = 6
                lopetusaika = Timer ()
            EndIf 
            
       Case 5 'syö makkaraa
            
           
            Text 10,tekstirivi*2,"Koska makkara on hyvää ja päätit syödä sitä,"
            Text 10,tekstirivi*3,"pääsit pelin läpi!"
            Text 10,tekstirivi*4,"Lopeta peli painamalla mitä tahansa näppäintä."
            
            If GetKey () Then End 
          
       Case 6' juot olutta
            
            Text 10,tekstirivi*2,"Jaa, no käy se näinkin. Pääsit pelin läpi."
            
            If Timer () > lopetusaika + 3000 Then End 
            
        EndSelect 
        
        
     DrawScreen 
     
Forever 
        
Mielestäni mukavampi tapa verrattuna input/goto-sähellykseen. Tosin pelistä tulee helposti sekava ellei vähän ajattele ja suunnittele, mutta onneksi kommentit ovat ystäviäsi ;)
Väsyttää niin ettei jaksa edes mennä lepäämään.

Post Reply