Ristinolla

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
Post Reply
User avatar
anttimoi
Newcomer
Posts: 25
Joined: Mon Aug 11, 2008 7:33 pm

Ristinolla

Post by anttimoi » Fri Sep 26, 2008 5:44 pm

Tein tässä perjantai-päivän huviksi tälläisen pienen harjoituspelin. Peli siis on ihan simppeli 3x3 ristinolla, jota pelataan kaksinpelinä numpadin näppäimistä (teen myös yksinpelin tietokonetta vastaan myöhemmin).
Pelillä ei ole kovin suurta viihdearvoa, tein sen ihan perus harjoittelun ja tekoälyn tekemisen harjoittelua varten (tekoäly siis tulee myöhemmin).
Attachments
ristinolla.rar
(586.58 KiB) Downloaded 163 times
Coolbasic roguelike-projekti menossa 8)
Progress bar @@@@@10%@@@@@
Pahasti jäätymässä...

User avatar
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Ristinolla

Post by MAVmaggot » Fri Sep 26, 2008 5:51 pm

Ööh.. miten tätä pelataan?
Edit: Joo niinpäs lukikin :D Ei tässä vielä paljon intoa ollut, kun ei ollut botti vastustajaa. :( Mutta toivottavasti jaksat sen tehdä :) Muuten ihan hyvin näytti toimivan ;)
Last edited by MAVmaggot on Fri Sep 26, 2008 5:58 pm, edited 2 times in total.

User avatar
anttimoi
Newcomer
Posts: 25
Joined: Mon Aug 11, 2008 7:33 pm

Re: Ristinolla

Post by anttimoi » Fri Sep 26, 2008 5:54 pm

Numpadistä. Luki alotustekstissä jo.
Coolbasic roguelike-projekti menossa 8)
Progress bar @@@@@10%@@@@@
Pahasti jäätymässä...

User avatar
elmo123
Active Member
Posts: 153
Joined: Sun Sep 09, 2007 4:19 pm

Re: Ristinolla

Post by elmo123 » Fri Sep 26, 2008 8:43 pm

Aika ruma ja vaikeakäyttöinen. Tässä opensourcena, muutama päivä sitten koodailtu ristinolla:

Code: Select all

'--------------------------------
'RISTINOLLA
'--------------------------------

Errors 0


'laita ruutu hiukan pienemmäksi
SCREEN 64*3,64*3

SetFont LoadFont("arial", 80)

SetWindow "Tic Tac Toe"

'tee tietotaulukko tyhjäksi
Dim paikka(2, 2) As String

Gosub reset

'taustaväri harmaaksi
ClsColor cbSilver

'piirtovärin asetamme mustaksi
Color cbBlack

tme = 0

Repeat



    'piirrä ruudukko
    Line 0,0,0,192
    Line 64,0,64,192
    Line 128,0,128,192
    Line 192,0,192,191
    Line 0,0,192,0
    Line 0,64,192,64
    Line 0,128,192,128
    Line 0,192,192,192


    'piirretään X:ät ja O:t
    For x = 0 To 2
        For y = 0 To 2

            CenterText x * 64 + 32, y * 64 + 32, paikka(x, y), 2

        Next y
    Next x

    'voitontarkistus
    xw = 0
    ow = 0
    v = 0
    p = 0
    v1 = 0
    v2 = 0
    For x = 0 To 2
        For y = 0 To 2

            If paikka(x, 0) = "X" And paikka(x, 1) = "X" And paikka(x, 2) = "X" Then xw = 1 : p = 1 : px = x : Exit
            If paikka(x, 0) = "O" And paikka(x, 1) = "O" And paikka(x, 2) = "O" Then ow = 1 : p = 1 : px = x : Exit
            If paikka(0, y) = "X" And paikka(1, y) = "X" And paikka(2, y) = "X" Then xw = 1 : v = 1 : py = y : Exit
            If paikka(0, y) = "O" And paikka(1, y) = "O" And paikka(2, y) = "O" Then ow = 1 : v = 1 : py = y : Exit
            If paikka(0, 0) = "X" And paikka(1, 1) = "X" And paikka(2, 2) = "X" Then xw = 1 : v1 = 1 : Exit
            If paikka(0, 0) = "O" And paikka(1, 1) = "O" And paikka(2, 2) = "O" Then ow = 1 : v1 = 1 : Exit
            If paikka(2, 0) = "X" And paikka(1, 1) = "X" And paikka(0, 2) = "X" Then xw = 1 : v2 = 1 : Exit
            If paikka(2, 0) = "O" And paikka(1, 1) = "O" And paikka(0, 2) = "O" Then ow = 1 : v2 = 1 : Exit

        Next y
    Next x

    If xw Then

        If p Then viiva(px * 64 + 32, 0, px * 64 + 32, ScreenHeight())
        If v Then viiva(0, py * 64 + 32, ScreenWidth(), py * 64 + 32)
        If v1 Then viiva(0, 0, ScreenWidth(), ScreenHeight())
        If v2 Then viiva(ScreenWidth(), 0, 0, ScreenHeight())

        DrawScreen
        Wait 750

        ClearMouse

        Cls

        CenterText ScreenWidth() / 2, 0, "X"
        CenterText ScreenWidth() / 2, 64, "WIN!"

        DrawScreen

        WaitMouse

        ClearMouse


        Gosub reset

    EndIf
    If ow Then

        If p Then viiva(px * 64 + 32, 0, px * 64 + 32, ScreenHeight())
        If v Then viiva(0, py * 64 + 32, ScreenWidth(), py * 64 + 32)
        If v1 Then viiva(0, 0, ScreenWidth(), ScreenHeight())
        If v2 Then viiva(ScreenWidth(), 0, 0, ScreenHeight())

        DrawScreen
        Wait 750

        ClearMouse

        Cls

        CenterText ScreenWidth() / 2, 0, "O"
        CenterText ScreenWidth() / 2, 64, "WIN!"

        DrawScreen

        WaitMouse

        ClearMouse

        Gosub reset

    EndIf
    'jos ei löytynyt enää tyhjiä paikkoja, niin resetoidaan
    'automaattisesti
    check = 1
    For x = 0 To 2
        For y = 0 To 2

            If paikka(x, y) = "" Then check = 0 

        Next y
    Next x

    If check And tme = 0 Then tme = 28

        If tme Then tme = tme - 1

    If check And tme = 0 Then Gosub reset

    'päivitä ristinolla
    If MouseDOwn(1) Then

    hiirix#=MouseX()
    hiiriy#=MouseY()
        
        'nyt katsotaan, minne laitetaan 
        'ruksi:talletetaan ruudun x- ja y-
        'koordinaatit muuttujiin ruutux ja
        'ruutuy
        ruutux = RoundUp(hiirix#/64) - 1
        ruutuy = RoundUp(hiiriy#/64) - 1

        'Easter-egg: jos CTRL + R-yhdistelmä on tosi, valitaan satunnaisesti
        If KeyDown(cbKeyLAlt) And KeyDown(cbKeyR) Then 

             ruutux = Rand(0, 2)
             ruutuy = Rand(0, 2)

        EndIf
        'kirjoitetaan valitulle paikalle
        'Tehdään tämä vain, jos ruudussa on 
        'vapaata
            If paikka(ruutux, ruutuy)=""

                paikka(ruutux, ruutuy) = vuoro$

                'vaihda vuoroa
                If vuoro$="X" Then vuoro$="O" Else vuoro$="X"
            
            EndIf

     EndIf
        


    If KeyDown(cbKeyLshift) And KeyHit(cbKeyR) Then Gosub reset

    DrawScreen

Forever 

reset:

paikka(0, 0)=""
paikka(1, 0)=""
paikka(2, 0)=""
paikka(0, 1)=""
paikka(1, 1)=""
paikka(2, 1)=""
paikka(0, 2)=""
paikka(1, 2)=""
paikka(2, 2)=""

'ensimmäisenä vuoro on pelaaja 1:hden(X)
vuoro$="X"

Return

Function viiva(x1, y1, x2, y2, bld=5)

    ang# = GetAngle(x1, y1, x2, y2)

    For i = 0 To Distance(x1, y1, x2, y2)

        Circle x1 + Cos(ang#) * i - bld / 2, y1 - Sin(ang#) * i - bld / 2, bld

    Next i

EndFunction


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!

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Ristinolla

Post by MaGetzUb » Sat Sep 27, 2008 11:30 am

Heh, kiva kun tehdään näitä yksinkertaisia pelejä. :) Tykkään niistä. :D
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 4:12 pm

Re: Ristinolla

Post by mkn » Sat Feb 12, 2011 6:42 pm

Ristinolla voittamattomalla tekoälyllä :D Graaffisesti puuroa(vielä) eikä sisällä kaksinpeliä(vielä :lol: )
Noin 320 riviä koodia :roll:
Näköjään jäi omat tulokset mukaan :(
Kommentteja!
Attachments
mkn.rar
Versio 0 :D
(587.25 KiB) Downloaded 127 times

Post Reply