Programiranje igre Tic Tac Toe v programu Visual Basic

Programiranje računalniške igre je morda najbolj tehnično zahtevno (in morda najbolje plačano) delo, ki ga programer lahko ima. Igre na najvišji ravni zahtevajo najboljše od programerjev in računalnikov.

Visual basic 6 je zdaj temeljito zaobšel kot platformo za programiranje iger. (Nikoli v resnici ni bil eden. Tudi v "dobrih ol" dneh resni programerji iger nikoli ne bi uporabljali jezika na visoki ravni, kot je VB 6, ker preprosto niste mogli doseči rezanja robne zmogljivosti, ki jih zahteva večina iger.) Toda preprosta igra "Tic Tac Toe" je odličen uvod v programiranje, ki je nekoliko naprednejše kot "Pozdravljen, svet!"

To je odličen uvod v številne temeljne koncepte programiranja, saj združuje tehnike, ki vključujejo:

  • Uporaba nizi. Oznake X in O se hranijo v ločenih nizih, celotni nizi pa se prenašajo med funkcije za spremljanje napredka igre.
  • Uporaba grafike na ravni VB 6: VB 6 ne ponuja veliko grafičnih zmogljivosti, vendar je igra dober uvod v tisto, kar je na voljo. Preostali del te serije je raziskovanje, kako GDI +, nova generacija Microsoftove grafike, nadomešča grafiko ravni VB 6.
    instagram viewer
  • Uporaba matematičnih izračunov za nadzor programa: Program uporablja pametno modulo (Mod) in celo število izračuni delitve z uporabo matričnih markerjev za dve igri, da se ugotovi, kdaj ima zmago trije elementi zgodilo.

Razred programiranja v tem članku je morda nekoliko mimo začetne ravni, vendar bi moral biti primeren za "vmesne" programerje. Toda začnimo na osnovni ravni, da ponazorimo nekatere koncepte in začnite s svojim Visual basic kariera programiranja iger. Celo študentom, ki so naprednejši od tega, se lahko zdi, da je predmete v obliki videti nekoliko zahtevno.

Kako igrati Tic Tac Toe

Če še nikoli niste igrali Križci in krožci, tukaj so pravila. Dva igralca se menjavata, ko Xs in Os postavita v 3 x 3 igrišče.

Pred začetkom igre se morata oba igralca dogovoriti o tem, kdo bo prvi šel in kdo bo s svojim simbolom označil njegove poteze. Po prvi potezi igralci izmenično postavijo svoje oznake v katero koli prazno celico. Cilj igre je biti prvi igralec s tremi znamkami v vodoravni, diagonalni ali navpični črti. Če ni praznih celic in nobeden od igralcev nima dobitne kombinacije, je igra neodločena.

Preden začnete s katerim koli dejanskim kodiranjem, je dobro, da spremenite imena komponent, ki jih uporabljate. Ko začnete kodiranje, bo Visual Basic ime samodejno uporabil, tako da želite, da je to pravo ime. Uporabili bomo ime obrazca frmTicTacToe spremenili pa bomo tudi napis v »O Tic Tac Toe«.

Z vzpostavljenim obrazcem uporabite vrstico z orodjem za risanje 3 x 3 mreže. Kliknite orodje vrstice in nato narišite črto, kjer želite. Na ta način boste morali ustvariti štiri vrstice in prilagoditi njihovo dolžino in položaj, da bodo videti pravilno. Visual Basic ima v meniju Oblika tudi nekaj priročnih orodij, ki bodo v pomoč. To je velika priložnost za vadbo z njimi.

Poleg igralne mreže bomo potrebovali nekaj predmetov za simbole X in O, ki jih bomo postavili na mrežo. Ker je v omrežju devet presledkov, bomo ustvarili objektno matriko z devetimi presledki, imenovani elementi v Visual Basic.

V razvojnem okolju Visual Basic obstaja več načinov, kako narediti skoraj vse, in ustvarjanje kontrolnih nizov ni nobena izjema. Verjetno najlažji način je ustvariti prvo oznako (kliknite in narišite tako kot orodje z vrsticami), jo poimenujte, nastavite vse atribute (na primer Font in ForeColor) in nato naredite kopije. VB 6 vas bo vprašal, ali želite ustvariti kontrolni niz. Za prvo oznako uporabite ime lblPlayGround.

Če želite ustvariti ostalih osem elementov omrežja, izberite prvi predmet oznake, nastavite lastnost Index na nič in pritisnite CTRL + C (kopiraj). Zdaj lahko pritisnete CTRL + V (prilepi), da ustvarite drug objekt z oznako. Ko kopirate take predmete, bo vsaka kopija podedovala vse lastnosti, razen indeksa, od prve. Indeks se bo za vsako kopijo povečal za eno. To je kontrolni niz, ker imajo vsi isto ime, vendar različne vrednosti indeksov.

Če matriko ustvarite na ta način, bodo vse kopije zložene ena na drugo v zgornjem levem kotu obrazca. Vsako nalepko povlecite na enega od položajev mrežnega predvajanja. Prepričajte se, da so vrednosti indeksa zaporedne v omrežju. Od tega je odvisna logika programa. Objekt nalepke z vrednostjo indeksa 0 naj bo v zgornjem levem kotu, spodnji desni nalepki pa indeks 8. Če nalepke pokrivajo mrežo za predvajanje, izberite vsako nalepko, z desno miškino tipko in izberite Pošlji nazaj.

Ker je osem možnih načinov za zmago v igri, bomo potrebovali osem različnih vrstic, da prikažemo zmago na igralni mreži. Z isto tehniko boste ustvarili drug kontrolni niz. Najprej narišite črto, jo poimenujte linWin in nastavite lastnost Index na nič. Nato uporabite tehniko copy-paste, da ustvarite še sedem vrstic. Naslednja slika prikazuje, kako pravilno nastaviti številke indeksov.

Poleg predmetov z nalepkami in vrsticami potrebujete nekaj ukaznih gumbov za igro in več nalepk, da boste dosegli rezultat. Postopki za njihovo ustvarjanje niso podrobno opisani, vendar so to predmeti, ki jih potrebujete.

Dva gumba predmeti:

  • cmdNewGame
  • cmdResetScore

Objekt okvira fraPlayFirst, ki vsebuje dva izbirna gumba:

  • optXPlayer
  • optOPlayer

Objekt okvira fraScoreBoard s šestimi nalepkami. V programski kodi se spremenita samo lblXScore in lblOScore.

  • lblX
  • lblXScore
  • lblO
  • lblOScore
  • lblMinus
  • lblColon

Končno potrebujete tudi objekt z oznako lblStartMsg, da 'maskirate' gumb cmdNewGame, ko ga ne bi smeli klikati. Na spodnji sliki to ni vidno, ker zaseda isti prostor v obliki kot ukazni gumb. Morda boste morali začasno premakniti ukazni gumb, da nalepite to oznako na obrazec.

Do zdaj še ni bilo narejeno nobeno VB kodiranje, vendar smo na to končno pripravljeni.

Inicializacija

Zdaj morate končno začeti s kodiranjem programa. Če še niste storili, boste morda želeli prenesti izvorno kodo, ki ji bo sledila, ko bo razloženo delovanje programa.

Ena prvih oblikovalskih odločitev je, kako slediti trenutnemu 'stanju' igre. Z drugimi besedami, kakšna sta trenutna X in Os na igralni mreži in kdo se premika naprej. Koncept države je kritičen pri številnih programiranju, predvsem pa je pomemben pri programiranju ASP in ASP.NET za splet

Obstaja več načinov, kako to storiti, zato je to kritičen korak v analizi. Če ste to težavo reševali sami, boste morda želeli narisati diagram poteka in preizkusiti različne možnosti s 'praskajočim papirjem', preden začnete s kodiranjem.

Naša rešitev uporablja dva "dvodimenzionalna niza", ker to pomaga slediti "stanju", tako da preprosto spremenite matrične indekse v programskih zank. Stanje zgornjega levega kota bo v elementu polja z indeksom (1, 1), zgornji desni kot je v (1, 3), spodnji desni v (3,3) in tako naprej. Dva niza, ki to počneta, sta:

iXPos (x, y)

in

iOPos (x, y)

Obstaja veliko različnih načinov, kako lahko to storite, končna rešitev VB.NET v tej seriji pa vam pokaže, kako to storiti z enim samodimenzionalnim nizom.

Programi za prevajanje teh nizov v odločitve za zmago igralcev in vidni prikazi v obrazcu so na naslednji strani.

Prav tako potrebujete nekaj globalnih spremenljivk, kot sledi. Upoštevajte, da so ti v splošni in deklaracijski kodi obrazca. To jih naredi "nivo modula" spremenljivk, na katere se lahko sklicuje kjer koli v kodi za ta obrazec. Če želite več informacij o tem, preverite Razumevanje obsega spremenljivk v Visual Basic Help.

V našem programu sta inicializirani spremenljivki. Najprej se nekaj spremenljivk inicializira, medtem ko se oblika frmTicTacToe nalaga.

Zasebni pod-obrazec_Load ()

Drugič, pred vsako novo igro so v podprogramu inicializacije dodeljene vse spremenljivke, ki jih je treba ponastaviti na začetne vrednosti.

Sub InitPlayGround ()

Upoštevajte, da inicijalizacija nalaganja obrazca kliče tudi inicializacijo igrišča.

Ena izmed kritičnih spretnosti programerja je zmožnost uporabe naprav za odpravljanje napak, da bi razumeli, kaj počne koda. S tem programom lahko poskusite:

  • Korak skozi kodo s tipko F8
  • Nastavitev ure na ključne spremenljivke, kot sta sPlaySign ali iMove
    Nastavitev prelomne točke in poizvedovanje o vrednosti spremenljivk. Na primer v notranji zanki inicializacije:
lblPlayGround ((i - 1) * 3 + j - 1) .Caption = ""

Upoštevajte, da ta program jasno kaže, zakaj je dobra programska praksa, da podatke, ko je to mogoče, hranite v nizih. Če v tem programu niste imeli nizov, bi morali napisati kodo nekaj takega:

Line0.Visible = napačno
Vrstica1.Visible = napačna
Vrstica2.Visible = napačna
Vrstica3.Visible = napačna
Vrstica4.Visible = false
Vrstica5.Visible = napačna
Vrstica6.Visible = false
Vrstica7.Visible = false

namesto tega:

Za i = 0 do 7
linWin (i). Vidno = napačno
Naprej i

Potezanje

Če je kateri koli del sistema mogoče razumeti kot "srce", je to podprogram lblPlayGround_Click. Ta podprogram se pokliče vsakič, ko igralec klikne igralno mrežo. (Kliki morajo biti znotraj enega od devetih elementov lblPlayGround.) Opazite, da ima ta podprogram argument: (Indeks kot celoten). Večina drugih podprogramov dogodkov, kot je cmdNewGame_Click (), ne. Kazalo označuje, kateri objekt je bil kliknjen. Indeks bi na primer vseboval vrednost nič za zgornji levi kot mreže in vrednost osem za spodnji desni kot.

Ko igralec klikne kvadrat v mreži igre, se ukazni gumb za začetek druge igre, cmdNewGame, "vklopi" tako, da postane viden. Stanje tega ukaznega gumba deluje dvojno, ker se pozneje v programu uporablja tudi kot logična spremenljivka odločitve. Uporaba vrednosti lastnosti kot spremenljivke odločitve je ponavadi nezaupljiva, ker če bo kdaj treba spremeniti program (recimo, narediti Ukazni gumb cmdNewGame viden ves čas), potem program nepričakovano ne bo uspel, ker se morda ne spomnite, da se uporablja tudi kot del programa logika. Zaradi tega je vedno dobro poiskati programsko kodo in preveriti, ali uporabljate vse, kar spremenite pri vzdrževanju programa, tudi vrednosti lastnosti. Ta program delno krši pravilo, delno pa zato, ker je to razmeroma preprost del kode, kjer je lažje videti, kaj se počne, in se izogniti težavam kasneje.

Izbira igralčevega kvadratka igre se obdela tako, da se pokliče podprogram GamePlay z argumentom Index.

Obdelava premika

Najprej preverite, ali je bil kliknjen nezasedeni kvadrat.

Če je lblPlayGround (xo_Move) .Caption = "" Potem

Ko smo prepričani, da gre za zakonito potezo, se števec premikov (iMove) poveča. Naslednji dve vrstici sta zelo zanimivi, saj koordinate prevajata iz enodimenzionalnega Če je komponenta lblPlayGround niz dvodimenzionalnih indeksov, ki jih lahko uporabite v iXPos ali iOPos. Mod in celotna delitev ("poševnica") so matematične operacije, ki jih ne uporabljate vsak dan, vendar je tu odličen primer, ki prikazuje, kako so lahko zelo koristne.

Če je lblPlayGround (xo_Move) .Caption = "" Potem
iMove = iMove + 1
x = Int (xo_Move / 3) + 1
y = (xo_Move Mod 3) + 1

Vrednost xo_Move 0 bo prevedena v (1, 1), 1 do (1, 2)... 3 do (2, 1)... 8 do (3, 3).

Vrednost v sPlaySign, spremenljivki z obsegom modula, spremlja, kateri igralec se je premaknil. Ko se premikajoči nizi posodobijo, lahko komponente nalepk v predvajalni mreži posodobimo z ustreznim znakom.

Če je sPlaySign = "O", potem
iOPos (x, y) = 1
iWin = CheckWin (iOPos ())
Ostalo
iXPos (x, y) = 1
iWin = CheckWin (iXPos ())
Konec Če
lblPlayGround (xo_Move) .Caption = sPlaySign

Na primer, ko igralec X klikne zgornji levi kot mreže, bodo spremenljivke imele naslednje vrednosti:

Uporabniški zaslon prikazuje le X v zgornjem levem polju, iXPos pa 1 v zgornjem levem polju in 0 v vseh ostalih. IOPos ima 0 v vsakem polju.

Vrednosti se spremenijo, ko igralec O klikne osrednji kvadrat mreže. Zdaj iOPos prikazuje 1 v srednjem polju, medtem ko uporabniški zaslon prikazuje X v zgornjem levem in O v srednjem polju. IXPos prikazuje samo 1 v zgornjem levem kotu, z 0 v vseh ostalih poljih.

Zdaj veste, kje je igralec kliknil in kateri igralec je kliknil (z uporabo vrednosti v sPlaySign), vse kar morate storiti je, da ugotovite, ali je nekdo zmagal v igri in ugotovite, kako to pokazati v prikaz.

Iskanje zmagovalca

Po vsaki potezi funkcija CheckWin preveri dobitno kombinacijo. CheckWin deluje tako, da doda vsako vrstico, skozi vsak stolpec in skozi vsako diagonalo. Sledenje korakom skozi CheckWin z uporabo funkcije za odpravljanje napak Visual Basic je lahko zelo poučno. Najprej je treba najti zmago, preveriti, ali so bili v posameznem preverjanju v spremenljivki iScore najdeni trije 1 in nato vrnitev edinstvene vrednosti "podpisa" v Checkwinu, ki se uporablja kot indeks matrike za spreminjanje lastnosti vidljivosti enega elementa v linWin niz komponent. Če zmagovalca ni, bo CheckWin vseboval vrednost -1. Če je zmagovalec, se prikazovalnik posodobi, spremeni se preglednica, prikaže se čestitko in igra se znova zažene.

Podrobno pojdimo skozi enega od pregledov, da vidimo, kako deluje. Drugi so podobni.

"Preverite vrstice za 3
Za i = 1 do 3
iScore = 0
CheckWin = CheckWin + 1
Za j = 1 do 3
iScore = iScore + iPos (i, j)
Naprej j
Če iScore = 3 Potem
Izhod iz funkcije
Konec Če
Naprej i

Prva stvar, ki jo opazimo, je, da prvi števec indek i odšteva vrstice, drugi j pa šteje čez stolpce. Zunanja zanka se nato preprosto premakne iz ene vrstice v drugo. Notranja zanka šteje vrednosti 1 v trenutni vrstici. Če so trije, potem imate zmagovalca.

Upoštevajte, da spremljate tudi skupno število kvadratov, preizkušenih v spremenljivki CheckWin, to je vrednost, ki je bila poslana nazaj, ko se ta funkcija preneha. Vsaka dobitna kombinacija bo v CheckWin-u dosegla edinstveno vrednost od 0 do 7, ki se uporablja za izbiro enega od elementov v nizu komponent linWin (). Zaradi tega je pomemben tudi vrstni red kode v funkciji CheckWin! Če ste premaknili enega od blokov v koda zanke (podobno kot zgoraj) bi bila na igralni mreži narisana napačna črta, ko nekdo zmaga. Poskusite in poglejte!

Podrobnosti zaključka

Edina koda, o kateri še ni razpravljal, sta podprogram za novo igro in podprogram, ki bo ponastavil rezultat. Zaradi preostale logike v sistemu je ustvarjanje teh precej enostavno. Če želite začeti novo igro, morate poklicati samo podprogram InitPlayGround. Kot priročnost za igralce, saj lahko gumb pritisnete sredi igre, prosite za potrditev, preden greste naprej. Preden ponovno zaženete preglednico, prosite tudi za potrditev.

instagram story viewer