Viikkokisa XIII: Omaperäinen pelimekanismi

Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Koodiapina »

Päätinpä nyt järjestää tämän Viikkokisa XIII:n.

Tarkoituksena on koodata mahdollisimman omaperäinen pelimekanismi. Tämä tarkoittaa sitä, että peli ei käytä esimerkiksi Coolbasicin tilekartta moottoria, vaan se on korvattu jollain omalla systeemillä. Näin ollen pelin pitäisi myöskin käyttää kuvia objektien asemesta, jos tämä vain on mahdollista. Rivimäärää, pelin tyyliä tai median kokoa ei ole rajoitettu. Lähdekoodit voisi julkistaa jo itse viestissä, niin niitä on helpompi tarkastella.

Äänestys tapahtuu 18 toukokuuta, Äänestys tapahtuu niin, että jokainen voi antaa kaksi ääntä, toinen omaperäisimmälle toteutukselle ja toisen äänen itse pelille. Omaperäisyydestä annetut äänet merkitsevät kaksi kertaa enemmän kuin itse pelille annetut, joten äänet annetaan kaavalla: Äänet = omaperäisyys*2 + itse_peli

Jos jäi epäselvää niin kysykää :)

EDIT: Pikainen sääntömuutos: Laittakaa niin, että se peli käynnistetään lähdekoodista. Näin varmistun siitä, että koodi on sama kuin pelissä.
Last edited by Koodiapina on Mon May 12, 2008 3:41 pm, edited 4 times in total.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Awaclus »

Hahaa, aihe kuin tehty minulle. -> Osallistun ensimmäisellä coolbasic-pelilläni, jonka teen juuri nyt 8-)

EDIT: EKA!
EDIT 2: PilQviil: Miksi sulut? Kertolasku lasketaan kuitenkin ennen pluslaskua.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Koodiapina »

Chaosworm wrote:PilQviil: Miksi sulut? Kertolasku lasketaan kuitenkin ennen pluslaskua.
Olen melko huono hahmottamaan matemaattisia lausekkeita joten käytän sulkeita selkeyttämään laskuja. Tällöin kerto- ja jakolaskut erottuvat muista.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Awaclus »

Eikun, en osallistukaan. En jaksanut parantaa koodia, ja en ihan varmasti olisi saanut ääniä surkealla törmäystunnistuksella. Tiedoksi niille, jotka haluavat tietää, mikä olis pelin idea ollut:
Siinä ei ollut objekteja ollenkaan. Tiedä häntä, miksi näin on (eli niin että CB tuntuu jotenkin hyvin omituiselta, en toki halua moittia ohjelmaa millään muotoa.) , mutta taidan edelleen vain pysytellä QBasicissa :lol:
Last edited by Awaclus on Fri May 16, 2008 3:16 pm, edited 3 times in total.
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Sami345 »

Saako tähän tehdä oman objecti systeemin ja käyttää sitä?
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Koodiapina »

Sami345 wrote:Saako tähän tehdä oman objecti systeemin ja käyttää sitä?
Saa.
Olwi
Devoted Member
Posts: 557
Joined: Sun Dec 30, 2007 4:15 pm
Location: Muhos

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Olwi »

Chaosworm wrote:Ensimmäinen peli osallistuu kilpaan juuri nyt. Ja se on minun (äärimmäisen huono) pelini, jossa on kaksi omaperäistä asiaa: Objekteja ei käytetä, ja toinen on se, että se on niin huono, keskeneräisine "törmäystunnistuksineen" kaikkineen. Pelihahmo on puhuva muffinssi ;)
.
Ainakin omaperäinen.
Normaalisti peleissä törmää seiniin :lol:
Käveleskelin seinien päällä parikymmentä sekunttia,ja lopulta tuli "Hähää,osuit seinään".




Edit:
Itsekin taidan osallistua :D
Last edited by Olwi on Sun Apr 27, 2008 3:38 pm, edited 1 time in total.
Huuda mun ip:tä!
User avatar
elmo123
Active Member
Posts: 153
Joined: Sun Sep 09, 2007 4:19 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by elmo123 »

Osallistun melko wanhalla tekeleelläni, jonka olen postittanut aiemmin mustapekka-pelin viestiketjuun esimerkiksi, miten saa tehtyä nuolinäppäinten edestakaisen naputtelun. Peli ei käytä mitään ulkopuolista mediaa, eikä objekteja, eikä kuvia. Ideana on painaa edestakaisin vasenta ja oikeaa nuolinappia mahdollisimman nopeasti, jotta tikku-ukko juoksee karkuun vierivää kiveä.

Code: Select all

SetFont LoadFont("arial", 20)
Dim Keys(1)
Keys(0) = cbKeyLeft
Keys(1) = cbKeyRight
Dim Txt(1) As String
Txt(0) = "Left!"
Txt(1) = "Right!"
alku:
total=1
ang# = 45.0
x# = 125.0
x2# = 0.0
spd# = 0.000
ClsColor cbDark
plus# = 0.0
aTimer = Timer()
Repeat

    x2# + spd#
    spd# + 0.005
    ang2# = WrapAngle(-x2#)

    If ang# < 46 Or ang# > 89 Then total = -total
    ang# = Max(45, Min(90, WrapAngle(ang# + plus#*total)))

    x# + plus#

    plus# = CurveValue(0, plus#, 12.0)

    If KeyHit(Keys(i)) Then plus# = plus# + (plus# / 2.3 + 2.95) : i = Not i

    Color cbBlackSkin
    Box 0, 200, 400, 100

    Color cbBlack
    Circle 184 + plus#, 114, 32, 0
    Color cbBlue
    Circle 185 + plus#, 115, 30

    Color cbBlack
    Line 200 + plus#, 150, 200 + Cos(ang#) * 25 + plus#, 150 + Abs(Sin(ang#)) * 25
    Line 200 + plus#, 150, 200 + Cos(ang# + 180) * 25 + plus#, 150 + Abs(Sin(ang# + 180)) * 25
    Line 200 + plus#, 145, 200 + plus#, 182
    Line 200 + plus#, 182, 200 + Cos(ang#) * 25 + plus#, 182 + Abs(Sin(ang#)) * 25
    Line 200 + plus#, 182, 200 + Cos(ang# + 180) * 25 + plus#, 182 + Abs(Sin(ang# + 180)) * 25

    For loop = 0 To Rand(2, 6)

        If Rand(1, 3) = 1 Then Exit

        rn = Rand(152, 182)
        rn2 = Rand(118, 182)
        Line rn + plus#, rn2, rn + plus# - Rand(2, 4) * Int(plus#), rn2

    Next loop

    Circle x2# - x# , 5, 200, 0
    Color cbSilver
    Circle x2# - x# + 1, 6, 198
    Color cbBlack
    Circle x2# - x# + 100 + Cos(ang2#) * 38 - 7, 105 - Sin(ang2#) * 38 - 7, 14
    Circle x2# - x# + 100 + Cos(ang2# + 150) * 95 - 3, 105 - Sin(ang2# + 150) * 95 - 3, 6
    Circle x2# - x# + 100 + Cos(ang2# - 78) * 62 - 3, 105 - Sin(ang2# -78) * 62 - 3, 8, 0

    Text 0, 0, "Distance from rock: " + (Int(x# - x2#) / 50) + "m"
    Text 0, 20, "Distance travelled: " + Int(x# / 50 - 3) + "m"
    Text 0, 40, "Time: " + (Timer() - aTimer) / 1000 + " sec."

    Color cbRed
    Text 30, 60, "Press " + Txt(i)

    DrawScreen

Until x# - x2# < -90
aTimer2 = Timer() 
Repeat

    x2# + spd#
    spd# + 0.015

    ang2# = WrapAngle(-x2#)

    Color cbBlackSkin
    Box 0, 200, 400, 100

    Color cbRed
    Ellipse 160, 200, 100, 15

    Color cbBlack
    Line 190, 204, 160, 205
    Line 190, 204, 160, 213
    Line 190, 204, 209, 204
    Line 209, 204, 229, 210
    Line 209, 204, 229, 197
    Ellipse 230, 200, 32, 8, 0
    Color cbBlue
    Ellipse 231, 201, 30, 6
    Color cbBlack
    Circle x2# - x# , 5, 200, 0
    Color cbSilver
    Circle x2# - x# + 1, 6, 198
    Color cbBlack
    Circle x2# - x# + 100 + Cos(ang2#) * 38 - 7, 105 - Sin(ang2#) * 38 - 7, 14
    Circle x2# - x# + 100 + Cos(ang2# + 150) * 95 - 3, 105 - Sin(ang2# + 150) * 95 - 3, 6
    Circle x2# - x# + 100 + Cos(ang2# - 78) * 62 - 3, 105 - Sin(ang2# -78) * 62 - 3, 8, 0
    Text 0, 0, "You get squashed by the rock!"
    Text 0, 20, "Distance travelled: " + Int(x# / 50 - 3) + "m"
    Text 0, 40, "The time when you were " + Lower("Not") + " squashed: " + (aTimer2 - aTimer) / 1000 + " sec."
    Text 0, 60, "Your score: " + Int(Int(x# / 50 - 3) / (Float(aTimer2 - aTimer) / 1000) * 100)

    DrawScreen

Until KeyHit(28)
Goto alku
EDIT:

Muokkasin mustapekka-ketjun koodiani, nyt tämä koodi löytyy vain täältä.

Last edited by elmo123 on Sun Apr 27, 2008 3:43 pm, edited 1 time in total.
Kiinnostuin pelien tekemisestä ennen 1. luokkaa.
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.

Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Awaclus »

Olw1 wrote:
Chaosworm wrote:...keskeneräisine "törmäystunnistuksineen" kaikkineen....
.
Ainakin omaperäinen.
Normaalisti peleissä törmää seiniin :lol:
Käveleskelin seinien päällä parikymmentä sekunttia,ja lopulta tuli "Hähää,osuit seinään".
Edit:
Itsekin taidan osallistua :D
Sanoinhan, että törmäystunnistus on kesken. Ja sanoin myös että muokkaan koodia vielä (=jatkan törmäystunnistusta.), koska nyt törmää vain pariin ensimmäiseen riviin.
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Aavesoturi »

Eikös omaperäinen pelimekaniikka/mekanismi tarkoita sitä, että esim. hahmoa ei ohjatakaan nuolilla vaan esim. puheella tai sitten vaikka jossain toimintaroolipelivirityksessä heitetään loitsuja hiirieleillä? Ainakin omasta mielestäni esim. cb:n omilla objekteilla ja kartoilla toteutettu 2d räiske, jossa vihuja tuhotaankin tekstiä kirjoittamalla Typing of the Deadin tyyliin on huomattavasti omaperäisempi kuin vaikka CoolDeathMatchin kääntäminen itse tehdylle pelimoottorille.
Ellei sitten kisan aiheena ollut "Tee oma pelimoottori"...?
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Koodiapina »

Aavesoturi wrote:Ellei sitten kisan aiheena ollut "Tee oma pelimoottori"...?
Tavallaan :D
User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by TheDuck »

En keksi mitään omaperäistä :/ Muuten vois kylläkin osallistua. Roguelike-moottori ei ole mielestäni tarpeeksi omaperäinen :S
^^
Olwi
Devoted Member
Posts: 557
Joined: Sun Dec 30, 2007 4:15 pm
Location: Muhos

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Olwi »

Aavesoturi wrote:Eikös omaperäinen pelimekaniikka/mekanismi tarkoita sitä, että esim. hahmoa ei ohjatakaan nuolilla vaan esim. puheella tai sitten vaikka jossain toimintaroolipelivirityksessä heitetään loitsuja hiirieleillä? Ainakin omasta mielestäni esim. cb:n omilla objekteilla ja kartoilla toteutettu 2d räiske, jossa vihuja tuhotaankin tekstiä kirjoittamalla Typing of the Deadin tyyliin on huomattavasti omaperäisempi kuin vaikka CoolDeathMatchin kääntäminen itse tehdylle pelimoottorille.
Ellei sitten kisan aiheena ollut "Tee oma pelimoottori"...?
Itse yrittelen virittää juuri sellaista tasohyppelyräiskintää jossa ukkelia ohjataan tekstikomennoilla.
Ei se ainakaan ihan tavallinen ole,vaikka sellaisiakin on.
Huuda mun ip:tä!
porzi
Active Member
Posts: 119
Joined: Mon Aug 27, 2007 11:10 pm
Contact:

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by porzi »

Siis pitääkö sen sorsan olla jotenkin erikoinen, vai riittääkö, että esim. kontrollit on toteutettu poikkeavalla tavalla?

Ja pitääkö pelin olla Cb:llä tehty? Itse käytän Linuxia, joten C++ olisi mukavampi vaihtoehto. Voin kyllä laittaa binäärin dll:ien kanssa mukaan, ettei tarvitse kaikkien ruveta itse kääntämään.
Voittoja viikkokisoissa: 3
http://fugufish.dy.fi/ | vanhat cb-pelini: http://porzi.arkku.net/old_games/
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by koodaaja »

porzi wrote:Ja pitääkö pelin olla Cb:llä tehty?
Viikkokisat ovat CB-kilpailuja. C++:n käytöstä saa vähän epäreilun etulyöntiaseman.

Siis omaperäisyydellä tarkoitetaan tässä (kai?) pelin sisältöä ja ohjaustapaa.

Osallistuisin, mutta aika ja ideoiden määrä eivät oikein riitä :D
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Sami345 »

Osallistun kilpailuun tällä:

Code: Select all

SCREEN 800,600
SetWindow "Hippapeli CoolBasic Viikkokisa XIII:tä varten. Tehnyt: Sami345"

Type OBJECT_SYSTEM
    Field img
    Field taso
    Field rotated
    Field x
    Field y
    Field angle
    Field törmäys
EndType

Errors OFF
Dim pelaaja(2)
pelaaja(1) = LoadObject2("Media\guy.bmp",1,-350,-250)
pelaaja(2) = LoadObject2("Media\guy.bmp",1,350,250,180)
hippa = Rand(1)
Repeat
    If (hippa = 0) Or (TimeUsed(start) > 3000) Then
        TurnObject2(pelaaja(1),(RightKey()-LeftKey())*4)
        MoveObject2(pelaaja(1),(UpKey()-DownKey())*2)
    EndIf
    If (hippa = 1) Or (TimeUsed(start) > 3000) Then
        TurnObject2(pelaaja(2),(KeyDown(cbKeyD)-KeyDown(cbKeyA))*4)
        MoveObject2(pelaaja(2),(KeyDown(cbKeyW)-KeyDown(cbKeyS))*2)
    EndIf
    If TimeUsed(start) > 3000 Then 
        If CountCollisions2() Then
            start = InitTimer()
            hippa = Not hippa
        EndIf
    EndIf
    Text 0,0,"FPS: "+FPS()
    Text 0,13,"Hippa on pelaaja "+(hippa+1)+"."
    Text 0,26,"Pelaaja "+((Not hippa)+1)+" sinulla "+Lower("ON ")+Max((3000-TimeUsed(start))/1000,0)+" sekunttia aikaa juosta pakoon."
    DrawScreen2()
Forever

Function InitTimer()
    Return Timer()
EndFunction

Function TimeUsed(start)
    Return Timer()-start
EndFunction 

Function LoadObject2(file$,taso,x=0,y=0,angle=0)
    newObj.OBJECT_SYSTEM = New(OBJECT_SYSTEM)
    newObj\img = LoadImage(file$)
    If newObj\img = 0 Then MakeError "Kuvaa ''"+file$+"'' ei voitu ladata."
    HotSpot newObj\img
    newObj\rotated = CloneImage(newObj\img)
    newObj\taso = taso
    newObj\x = x
    newObj\y = y
    newObj\angle = angle
    Return ConvertToInteger(newObj) 
EndFunction


Function TurnObject2(turnObj,turn)
    If turnObj = 0 Then MakeError "Objektia ei ole ladattu"
    obj.OBJECT_SYSTEM = ConvertToType(turnObj)
    obj\angle = obj\angle + turn
    If obj\taso Then
        For obj2.OBJECT_SYSTEM = Each OBJECT_SYSTEM
            If obj\taso = obj2\taso And (Not obj\img = obj2\img) Then
                If ImagesCollide(obj\rotated,obj\x,obj\y,0,obj2\rotated,obj2\x,obj2\y,0) Then törmäys = ON
            EndIf
        Next obj2
    EndIf
    If törmäys = ON  Then
        obj\angle = obj\angle - turn
        obj\törmäys + 1
    EndIf
EndFunction 

Function MoveObject2(moveObj,eteen)
    If moveObj = 0 Then MakeError "Objektia ei ole ladattu"
    obj.OBJECT_SYSTEM = ConvertToType(moveObj)
    obj\y = obj\y + Sin(obj\angle)*eteen
    obj\x = obj\x + Cos(obj\angle)*eteen
    törmäys = OFF
    
    If obj\taso Then
        For obj2.OBJECT_SYSTEM = Each OBJECT_SYSTEM
            If obj\taso = obj2\taso And (Not obj\img = obj2\img) Then
                If ImagesCollide(obj\rotated,obj\x,obj\y,0,obj2\rotated,obj2\x,obj2\y,0) Then törmäys = ON
            EndIf
        Next obj2
    EndIf
    If törmäys = ON  Then
        obj\y = obj\y - Sin(obj\angle)*eteen
        obj\x = obj\x - Cos(obj\angle)*eteen
        obj\törmäys + 1
    EndIf
EndFunction 

Function ObjectX2(xObj)
    If xObj = 0 Then MakeError "Objektia ei ole ladattu"
    obj.OBJECT_SYSTEM = ConvertToType(xObj)
    Return obj\x + ScreenWidth()/2
EndFunction 

Function ObjectY2(yObj)
    If yObj = 0 Then MakeError "Objektia ei ole ladattu"
    obj.OBJECT_SYSTEM = ConvertToType(yObj)
    Return obj\y + ScreenHeight()/2
EndFunction 

Function CountCollisions2()
    For obj.OBJECT_SYSTEM = Each OBJECT_SYSTEM
        yhteensä + obj\törmäys
    Next obj
    Return yhteensä
EndFunction

Function DrawScreen2(clear = 1,laite = 0)
    For obj.OBJECT_SYSTEM = Each OBJECT_SYSTEM
        If Not obj\angle = 0 Then
            DeleteImage obj\rotated
            obj\rotated = CloneImage(obj\img)
            RotateImage obj\rotated,obj\angle
            DrawImage obj\rotated,obj\x + ScreenWidth()/2,obj\y +ScreenHeight() / 2
        Else
            DrawImage obj\img,obj\x + ScreenWidth()/2,obj\y +ScreenHeight() / 2
        EndIf
        obj\törmäys = 0
    Next obj
    DrawScreen clear,laite
EndFunction
Last edited by Sami345 on Fri May 02, 2008 5:40 pm, edited 1 time in total.
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Koodiapina »

Sellaista kyselisin, että onko minulla mahdollisuutta osallistua tähän viikkokisaan, vaikka sen itse järjestin? Säännöt kieltävät vain edellisen viikkokisan voittajan osallistumisen. Toisaalta se taas olis epäreilua muita kohtaan, koska olisinhan voinut tehdä viikkokisalle aiheen sellaisesta pelistä, jota olen tehnyt jo kuukauden. Että mitäs mieltä olette?

Sitten vielä sellaista, että haluaako kukaan kisa-aikaa pidennettävän? Aikaa voidaan venyttää paljonkin, jos tarve vaatii.
Olwi
Devoted Member
Posts: 557
Joined: Sun Dec 30, 2007 4:15 pm
Location: Muhos

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Olwi »

Mulle pidennys ainakin sopisi :D
Huuda mun ip:tä!
Vouldenhaul
Active Member
Posts: 211
Joined: Tue Aug 28, 2007 3:48 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Vouldenhaul »

Eikös edellisen kisan voittajan eli Nekon pitäisi aloittaa uusi kisa. Onko Neko antanut Grandille luvan perustaa puolestaan uuden viikkokisan vai mitä? Vai voiko näitä viikkokisoja perustaa, kun vaan siltä tuntuu? Olenkohan jättänyt jottain olennaista lukematta, kun menin kerralla sekasin tästä viikkokisa systeemistä. :?

No joka tapauksessa hyvä, että viikkokisa taas tuli. Tätä ollaankin odotettu ja vaikka ite en aio osallistua, niin näitä on aina mielenkiintoista seurata. :)
Some stories can't be told by words...
Some legends are meant to die...
Some bloodlines must come to an end...


Metal Gear Solid 4: Guns of the Patriots
Sneaking Out 12.06.2008
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Viikkokisa XIII: Omaperäinen pelimekanismi

Post by Koodiapina »

Olw1: Selvä, pidennetään sitä kisa-aikaa aluksi vaikka viikko. Eli töiden palautuspäivä on 10.5. Sitäkin voidaan tietenkin venyttää, jos siltä tuntuu.

Vouldenhaul: KuroNeko kertoi Offtopic ketjussa, että hän ei itse kiireiden takia voi kilpailua järjestää, ja että on valmis antamaan tehtävän kelle tahansa vapaaehtoiselle.
Post Reply