Small Basic: implementarea jocului X şi 0


Aţi văzut că săptămâna aceasta am avut mai mult scheme logice şi programe în Small Basic. M-am şi explicat de ce (un curs pregătit pentru copii, de iniţiere în Small Basic). Ca “examen final” m-am gândit la implementarea unui joc clasic, iar X şi 0 e suficient de clasic, nu? Se putea face mult mai bine (ca programare) şi mult mai arătos (interfaţa), dar am vrut să rămân la un nivel jos, pentru nişte copii care au doar o săptămână de experienţă de programare. Aşa a ieşit codul de mai jos, care poate fi văzut în execuţie online aici.

imagine imagine

Poate cuiva o să folosească :). Pentru pasionaţii de Small Basic poate fi un cod bun de studiat, chiar şi îmbunătăţit. De exemplu nu ar fi foarte grei să îi dai o minimă inteligenţă ca să simuleze partidă om contra computer. Pur şi simplu vezi unde ai căsuţe goale şi fie pui la întâmplare (calculatorul joacă slab), fie acolo unde face linie (aşa e mai bun).

JocXO()

' subrutina de desenare pentru X
Sub DeseneazaX
  GraphicsWindow.PenWidth=10
  GraphicsWindow.PenColor="Chocolate"
  GraphicsWindow.DrawLine(10+posx,10+posy,190+posx,190+posy)
  GraphicsWindow.DrawLine(190+posx,10+posy,10+posx,190+posy)
EndSub

' subrutina de desenare pentru 0
Sub Deseneaza0
  GraphicsWindow.PenWidth=10
  GraphicsWindow.BrushColor="SandyBrown"
  GraphicsWindow.FillEllipse(10+posx,10+posy,180,180)
EndSub

Sub JocXO
  GraphicsWindow.Width=600
  GraphicsWindow.Height=600
  GraphicsWindow.CanResize=0
  GraphicsWindow.Title="X si 0"
  GraphicsWindow.PenWidth=2
  GraphicsWindow.PenColor="Wheat"
  GraphicsWindow.DrawLine(0,200,600,200)
  GraphicsWindow.DrawLine(0,400,600,400)
  GraphicsWindow.DrawLine(200,0,200,600)
  GraphicsWindow.DrawLine(400,0,400,600)
  GraphicsWindow.MouseUp = Clickat
  randulLui=1 'care pune X
  terminat="nu"
  For i=1 To 9
    pozitii[i]=0
  EndFor
EndSub

' subrutina pentru click pe tabla
Sub Clickat
  If (terminat="nu") Then
    x=GraphicsWindow.MouseX
    y=GraphicsWindow.MouseY
    coloana=Math.Floor(x/200)+1
    linia=Math.Floor(y/200)+1
    posx=(coloana-1)*200
    posy=(linia-1)*200
    If (pozitii[(linia-1)*3+coloana]=0) Then
      If randulLui=1 Then
        DeseneazaX()
        randulLui=2
        pozitii[(linia-1)*3+coloana]=1
      Else
        Deseneaza0()
        randulLui=1
        pozitii[(linia-1)*3+coloana]=2
      EndIf
      Sound.PlayClick()
      Verificare()
    Else
      Sound.PlayBellRing()
    EndIf
  EndIf
EndSub

' subrutina pt verificarea situatiei pe tabla dupa click
Sub Verificare
  If (pozitii[1]=pozitii[2]) And (pozitii[2]=pozitii[3]) And (pozitii[3]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(10,100,590,100)
    terminat="da"
  EndIf
  If (pozitii[4]=pozitii[5]) And (pozitii[5]=pozitii[6]) And (pozitii[6]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(10,300,590,300)
    terminat="da"
  EndIf
  If (pozitii[7]=pozitii[8]) And (pozitii[8]=pozitii[9]) And (pozitii[9]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(10,500,590,500)
    terminat="da"
  EndIf
  If (pozitii[1]=pozitii[4]) And (pozitii[4]=pozitii[7]) And (pozitii[7]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(100,10,100,590)
    terminat="da"
  EndIf
  If (pozitii[2]=pozitii[5]) And (pozitii[5]=pozitii[8]) And (pozitii[8]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(300,10,300,590)
    terminat="da"
  EndIf
  If (pozitii[3]=pozitii[6]) And (pozitii[6]=pozitii[9]) And (pozitii[9]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(500,10,500,590)
    terminat="da"
  EndIf
  If (pozitii[1]=pozitii[5]) And (pozitii[5]=pozitii[9]) And (pozitii[9]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(10,10,590,590)
    terminat="da"
  EndIf
  If (pozitii[3]=pozitii[5]) And (pozitii[5]=pozitii[7]) And (pozitii[7]<>0) Then
    GraphicsWindow.PenColor="Red"
    GraphicsWindow.DrawLine(10,590,590,10)
    terminat="da"
  EndIf
  If terminat="da" Then
    Sound.PlayChime()
    If randulLui=1 Then
      GraphicsWindow.ShowMessage("A castigat 0","Final de joc")
    Else
      GraphicsWindow.ShowMessage("A castigat X","Final de joc")
    EndIf
  Else
    cate=0
    For i=1 To 9
      If pozitii[i]<>0 Then
        cate=cate+1
      EndIf
    EndFor
    If cate=9 Then
      Sound.PlayChime()
      GraphicsWindow.ShowMessage("Oh, sunteti buni! Remiza!","Final de joc")
    EndIf
  EndIf
EndSub


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (1 evaluări, media: 5,00 din 5)
Loading...Loading...

0 comentarii


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *