„Tic Tac Toe“ žaidimo programavimas programoje „Visual Basic“

Programavimas Kompiuteriniai žaidimai gali būti techniškai sunkiausias (ir galbūt geriausiai apmokamas) darbas, kuris a programuotojas gali turėti. Aukščiausio lygio žaidimams reikia geriausio tiek iš programuotojų, tiek iš kompiuterių.

Visual Basic 6 buvo nuodugniai panaikintas kaip žaidimų programavimo platforma. (Tai niekada nebuvo viena. Net ir „geromis dienomis“ rimti žaidimų programuotojai niekada nenaudotų tokio aukšto lygio kalbų kaip VB 6, nes jūs tiesiog negalėjote supjaustyti pranašumas, kurio reikalauja dauguma žaidimų.) Bet paprastas „Tic Tac Toe“ žaidimas yra puiki programavimo įžanga, kuri yra šiek tiek tobulesnė. nei "Labas pasauli!"

Tai puikus įvadas į daugelį pagrindinių programavimo sąvokų, nes jame derinami metodai, įskaitant:

  • Panaudojimas masyvai. X ir O žymekliai laikomi atskiruose masyvuose, o visos masyvai perduodami tarp funkcijų, kad būtų galima sekti žaidimo eigą.
  • VB 6 lygio grafikos naudojimas: VB 6 nesiūlo puikių grafinių galimybių, tačiau žaidimas yra gera įžanga į tai, kas yra. Didžioji dalis šios serijos yra tyrimas, kaip GDI +, naujos kartos „Microsoft“ grafika, pakeičia VB 6 lygio grafiką.
    instagram viewer
  • Matematikos skaičiavimų naudojimas programos valdymui: Programa naudoja sumanųjį modulo (Mod) ir sveikąjį skaičių padalijimų skaičiavimai, naudojant dviejų žaidimų žymeklių matricas, kad būtų galima nustatyti, kada turi trijų elementų „laimėjimas“ įvyko.

Programavimo klasė šiame straipsnyje galbūt yra šiek tiek anksčiau nei pradinis lygis, tačiau ji turėtų būti gera „tarpiniams“ programuotojams. Bet pradėkime nuo pagrindinio lygio, kad iliustruotumėme kai kurias sąvokas ir pradėtume nuo jūsų Visual Basic žaidimo programavimo karjera. Net ir labiau pažengusiems studentams gali atrodyti, kad gauti teisingus formos objektus yra šiek tiek sudėtinga.

Kaip žaisti „Tic Tac Toe“

Jei niekada nežaidėte Kryžiukai nuliukai, čia yra taisyklės. Du žaidėjai pakaitomis deda X ir Os į 3 x 3 žaidimo lauką.

Prieš pradedant žaidimą, abu žaidėjai turi susitarti, kas eis pirmas ir kas su jo simboliu pažymės jo judesius. Po pirmo ėjimo žaidėjai pakaitomis deda savo ženklus į bet kurią tuščią langelį. Žaidimo tikslas yra būti pirmuoju žaidėju, turinčiu tris ženklus horizontalioje, įstrižoje arba vertikalioje linijoje. Jei nėra tuščių langelių ir nė vienas žaidėjas neturi laimėjusio derinio, žaidimas yra lygiosios.

Prieš pradedant bet kokį kodavimą, visada verta pakeisti visų naudojamų komponentų pavadinimus. Kai tik pradedi kodavimas, vardą automatiškai naudos „Visual Basic“, todėl norite, kad jis būtų teisingas vardas. Mes naudosime formos pavadinimą „frmTicTacToe“ ir mes taip pat pakeisime antraštę į „About Tic Tac Toe“.

Pasirinkę formą, naudokite linijų įrankių rinkinio valdiklį, kad nupieštumėte 3 x 3 tinklelį. Spustelėkite linijos įrankį, tada nubrėžkite liniją ten, kur norite. Tokiu būdu turėsite sukurti keturias linijas ir pakoreguoti jų ilgį ir padėtį, kad jos atrodytų tinkamai. „Visual Basic“ taip pat turi keletą patogių įrankių, esančių meniu Formatas, kurie padės. Tai puiki galimybė mankštintis su jais.

Be žaidimo tinklelio, mums reikės kai kurių X ir O simbolių objektų, kurie bus dedami ant tinklelio. Kadangi tinklelyje yra devyni tarpai, sukursime objektų masyvą su devyniais tarpais, vadinamais elementais „Visual Basic“.

Yra keletas būdų, kaip padaryti viską, ką reikia Visual Basic kūrimo aplinkoje, ir valdymo masyvų kūrimas nėra išimtis. Tikriausiai paprasčiausias būdas yra sukurti pirmąją etiketę (spustelėti ir piešti kaip ir linijos įrankį), pavadinti ją, nustatyti visus atributus (pvz., „Font“ ir „ForeColor“) ir tada pasidaryti jos kopijas. VB 6 paklaus, ar norite sukurti valdymo masyvą. Pirmai etiketei naudokite pavadinimą „lblPlayGround“.

Norėdami sukurti kitus aštuonis tinklelio elementus, pasirinkite pirmąjį etiketės objektą, nustatykite indekso ypatybę į nulį ir paspauskite CTRL + C (kopijuoti). Dabar galite paspausti CTRL + V (įklijuoti), kad sukurtumėte kitą etiketės objektą. Kopijuodami tokius objektus, kiekviena kopija paveldės visas ypatybes, išskyrus rodyklę iš pirmosios. Rodyklė padidės po vieną kiekvienai kopijai. Tai yra valdymo masyvas, nes jie visi turi tą patį pavadinimą, bet skirtingas indekso reikšmes.

Jei masyvą sukursite tokiu būdu, visos kopijos bus sukrautos viena ant kitos viršutiniame kairiajame formos kampe. Vilkite kiekvieną etiketę į vieną iš žaidimo tinklelio pozicijų. Įsitikinkite, kad rodyklės vertės yra nuoseklios tinklelyje. Programos logika priklauso nuo jos. Etiketės objektas, kurio indekso vertė 0, turėtų būti viršutiniame kairiajame kampe, o apatinėje dešinėje esančioje etiketėje turėtų būti 8 rodyklė. Jei etiketės uždengia žaidimo tinklelį, pažymėkite kiekvieną etiketę, dešiniuoju pelės mygtuku spustelėkite ir pasirinkite Siųsti atgal.

Kadangi yra aštuoni galimi žaidimo laimėjimo būdai, mums prireiks aštuonių skirtingų eilučių, kad laimėjimas būtų parodytas tinklelyje. Tą pačią techniką naudosite kurdami kitą valdymo masyvą. Pirmiausia nubrėžkite liniją, pavadinkite ją linWin ir nustatykite indekso ypatybę į nulį. Tada naudokite copy-paste techniką, kad gautumėte dar septynias eilutes. Toliau pateiktoje iliustracijoje parodyta, kaip teisingai nustatyti indekso numerius.

Be etikečių ir eilutės objektų, žaidimui žaisti reikia dar keleto komandų mygtukų ir daugiau etikečių, kad būtų išlaikytas rezultatas. Jų kūrimo žingsniai čia nėra išsamūs, tačiau tai yra jums reikalingi objektai.

Du mygtukai daiktai:

  • „cmdNewGame“
  • „cmdResetScore“

Kadro objektas fraPlayFirst, kuriame yra du parinkčių mygtukai:

  • „optXPlayer“
  • „optOPlayer“

„FraScoreBoard“ rėmelio objektas, kuriame yra šešios etiketės. Programos kode keičiami tik „lblXScore“ ir „lblOScore“.

  • lblX
  • „lblXScore“
  • lblO
  • „lblOScore“
  • lblMinus
  • „lblColon“

Galiausiai jums taip pat reikia etiketės objekto „lblStartMsg“, kad „užmaskuotumėte“ mygtuką „cmdNewGame“, kai jo nereikėtų spustelėti. Žemiau pateiktoje iliustracijoje tai nematoma, nes formos plotas užima tokią pačią vietą kaip komandos mygtukas. Jums gali tekti laikinai perkelti komandos mygtuką, jei norite nupiešti šią etiketę formoje.

Kol kas VB kodavimas nebuvo atliktas, tačiau mes pagaliau esame pasirengę tai padaryti.

Pradėjimas

Dabar jūs turite pagaliau pradėti koduoti programą. Jei to dar nepadarėte, galbūt norėsite atsisiųsti šaltinio kodą, kuris bus sekamas paaiškinus programos veikimą.

Vienas iš pirmųjų dizaino sprendimų, kaip sekti esamą žaidimo „būklę“. Kitaip tariant, kokie yra dabartiniai X ir Os žaidimo tinklelyje ir kas juda toliau. „Būsenos“ sąvoka yra kritinė daugelio programavimo metu, ypač svarbi programuojant ASP ir ASP.NET žiniatinkliui.

Tai galima padaryti keliais būdais, todėl tai yra kritinis analizės žingsnis. Jei šią problemą spręstumėte patys, prieš pradėdami kodavimą, galbūt norėsite nupiešti schemą ir išbandyti įvairias parinktis naudodami „nulio popierių“.

Mūsų sprendimas naudoja du „dvimačius masyvus“, nes tai padeda sekti „būseną“ paprasčiausiai keičiant masyvo indeksus programos kilpose. Viršutinis kairysis kampas bus masyvo elemente su rodykle (1, 1), viršutinis dešinysis kampas bus (1, 3), apatinis dešinysis kampas (3,3) ir tt. Du masyvai, kurie tai daro, yra:

„iXPos“ (x, y)

ir

„iOPos“ (x, y)

Yra daugybė skirtingų būdų, kaip tai padaryti, ir galutinis šios serijos VB.NET sprendimas parodo, kaip tai padaryti naudojant vieną vientisą masyvą.

Kitame puslapyje yra programavimas paversti šiuos rinkinius žaidėjų laimėjimo sprendimais ir matomi formos rodiniai.

Jums taip pat reikia keleto globalių kintamųjų: Atkreipkite dėmesį, kad tai yra formos bendrųjų ir deklaracijų kodekse. Tai juos padaro "modulio lygis" kintamieji, kuriuos bet kurioje šios formos kodo dalyje galima nurodyti. Norėdami daugiau sužinoti apie tai, skaitykite „Visual Basic Help“ kintamųjų apimties supratimas.

Yra dvi sritys, kuriose kintamieji yra inicializuojami mūsų programoje. Pirmiausia, kai pakraunama forma frmTicTacToe, yra inicijuojami keli kintamieji.

Privatus antrinės formos_krovimas ()

Antra, prieš kiekvieną naują žaidimą visi kintamieji, kuriuos reikia atkurti iki pradinių verčių, yra priskiriami inicializacijos paprogramėje.

Sub InitPlayGround ()

Atminkite, kad formos įkėlimo inicijavimas taip pat reiškia žaidimų aikštelės inicijavimą.

Vienas iš kritinių programuotojo įgūdžių yra gebėjimas naudotis derinimo galimybėmis, kad suprastų, ką daro kodas. Galite naudoti šią programą bandydami:

  • Žingsnis per kodą klavišu F8
  • Pagrindinių kintamųjų, tokių kaip „sPlaySign“ ar „iMove“, laikrodžio nustatymas
    Lūžio taško nustatymas ir kintamųjų vertės užklausa. Pvz., Vidinėje iniciacijos kilpoje:
„lblPlayGround“ ((i - 1) * 3 + j - 1) .Caption = ""

Atminkite, kad ši programa aiškiai parodo, kodėl yra gera programavimo praktika, kai įmanoma, laikyti duomenis masyvuose. Jei šioje programoje neturėjote masyvų, turėtumėte parašyti kodą taip:

0 eilutė.Visible = klaidinga
Linija1.Visible = klaidinga
Line2.Visible = klaidinga
3. eilutė3.Visible = klaidinga
4. eilutėVisible = klaidinga
Eilutė5.Visible = klaidinga
Eilutė6.Visible = klaidinga
7 eilutė. Neįmanoma = klaidinga

vietoj to:

Jei i = 0 - 7
„linWin“ (i) .Visible = False
Kitas i

Judėjimas

Jei kuri nors sistemos dalis gali būti laikoma „širdimi“, tai yra paprogramė „lblPlayGround_Click“. Ši paprogramė vadinama kiekvieną kartą, kai žaidėjas spustelėja žaidimo tinklelį. (Paspaudimai turi būti vieno iš devynių „lblPlayGround“ elementų viduje.) Atminkite, kad ši paprogramė turi argumentą: (Rodyklė kaip sveikasis skaičius). Daugelis kitų „įvykių paprogramių“, pvz., CmdNewGame_Click (), ne. Rodyklė rodo, kuris etiketės objektas buvo spustelėtas. Pvz., Rodyklėje būtų viršutinio kairiojo tinklelio kampo nulis ir apatinio dešiniojo kampo vertė aštuoni.

Kai žaidėjas spustelėja kvadratą žaidimų tinklelyje, komandos mygtukas pradėti kitą žaidimą, cmdNewGame, yra „įjungtas“, jį padarant matomą. Šio komandos mygtuko būsena yra dviguba, nes vėliau jis taip pat naudojamas kaip loginis sprendimo kintamasis vėliau programoje. Nuosavybės vertės kaip sprendimo kintamojo naudojimą dažniausiai nesutinkama, nes jei kada nors prireiks pakeisti programą (tarkime, pavyzdžiui, komandinis mygtukas cmdNewGame, matomas visą laiką), tada programa netikėtai žlugs, nes galbūt neprisimenate, kad ji taip pat naudojama kaip programos dalis logika. Dėl šios priežasties visada verta ieškoti programos kodo ir patikrinti, ar naudojama viskas, ką jūs keičiate atlikdami programos priežiūrą, net ir nuosavybės vertės. Ši programa pažeidžia taisyklę iš dalies atkreipti dėmesį į tai, iš dalies todėl, kad tai yra gana paprastas kodo fragmentas, kuriame lengviau pamatyti, kas daroma, ir išvengti problemų vėliau.

Žaidėjo parinktas žaidimo kvadratas yra apdorojamas pasikvietus „GamePlay“ paprogramę, kurios argumentas yra „Index“.

„Move“ apdorojimas

Pirmiausia patikrinkite, ar nebuvo spustelėta neužimta aikštė.

Jei „lblPlayGround“ (xo_Move) .Caption = "" Tada

Kai įsitikinsime, kad tai yra teisėtas žingsnis, perkėlimų skaitiklis („iMove“) padidinamas. Kitos dvi eilutės yra labai įdomios, nes jos išveda koordinates iš vienos dimensijos Jei „lblPlayGround“ komponentas yra dviejų dimensijų rodyklės, kurias galite naudoti „iXPos“ arba „iOPos“. „Mod“ ir sveikasis skaičius („pasvirasis brūkšnys“) yra matematinės operacijos, kurių nenaudojate kiekvieną dieną, tačiau čia yra puikus pavyzdys, parodantis, kaip jos gali būti labai naudingos.

Jei „lblPlayGround“ (xo_Move) .Caption = "" Tada
„iMove“ = „iMove + 1“
x = Int (xo_Move / 3) + 1
y = (xo_Pajudinti 3 mod.) + 1

„Xo_Move“ reikšmė 0 bus išversta į (1, 1), 1 į (1, 2)... Nuo 3 iki (2, 1)... Nuo 8 iki (3, 3).

„SPlaySign“, kintamojo su modulio apimtimi, reikšmė seka, kuris žaidėjas ėmė judėti. Atnaujinus perkėlimo masyvus, etikečių komponentai žaidimo tinklelyje gali būti atnaujinti atitinkamu ženklu.

Jei sPlaySign = "O", tada
iOPos (x, y) = 1
„iWin“ = „CheckWin“ („iOPos“)
Kitas
„iXPos“ (x, y) = 1
„iWin“ = „CheckWin“ („iXPos“)
Pabaiga Jei
„lblPlayGround“ („xo_Move“) .Caption = sPlaySign

Pvz., Kai X grotuvas spustelėja viršutinį kairįjį tinklelio kampą, kintamieji turės šias reikšmes:

Vartotojo ekrane rodomas tik X viršutiniame kairiajame laukelyje, o „iXPos“ yra 1 viršutiniame kairiajame laukelyje ir 0 - visuose kituose. „IOPos“ kiekvienoje dėžutėje yra 0.

Vertės keičiasi, kai O grotuvas spustelėja tinklelio vidurinę aikštę. Dabar „iOPos“ rodo 1 centriniame laukelyje, o vartotojo ekranas rodo X viršutiniame kairiajame kampe ir O centriniame lauke. „IXPos“ rodo tik 1 viršutiniame kairiajame kampe, o 0 - visose kitose dėžutėse.

Dabar, kai žinote, kur žaidėjas spustelėjo, ir kuris žaidėjas spustelėjo (naudodamas reikšmę „sPlaySign“), viskas, ką turite padaryti, tai išsiaiškinti, ar kažkas laimėjo žaidimą, ir išsiaiškinti, kaip tai parodyti ekranas.

Surasti nugalėtoją

Po kiekvieno judesio „CheckWin“ funkcija patikrina, ar nėra laimėjusio derinio. „CheckWin“ veikia pridedant kiekvieną eilutę, stulpelį ir įstrižainę. Stebėti veiksmus per „CheckWin“ naudojant „Visual Basic“ derinimo funkciją gali būti labai naudinga. Pirmiausia reikia surasti laimėjimą: patikrinti, ar kiekviename atskirame kintamojo „iScore“ patikrinime buvo rasta trys 1, o tada - grąžinama unikali „parašo“ reikšmė „Checkwin“, kuri naudojama kaip masyvo rodyklė norint pakeisti „linWin“ vieno elemento „Visible“ savybę komponentų masyvas. Jei laimėtojo nėra, „CheckWin“ reikšmė bus -1. Jei yra nugalėtojas, ekranas atnaujinamas, keičiama rezultatų suvestinė, rodomas sveikinimo pranešimas ir žaidimas pradedamas iš naujo.

Išsamiai patikrinkime vieną iš patikrinimų, kad pamatytume, kaip tai veikia. Kiti panašūs.

'Patikrinkite 3 eilutes
Jei i = 1 - 3
„iScore“ = 0
„CheckWin“ = „CheckWin + 1“
Jei j = 1 - 3
„iScore“ = „iScore + iPos“ („i“, „j“)
Kitas j
Jei „iScore“ = 3, tada
Išėjimo funkcija
Pabaiga Jei
Kitas i

Pirmas dalykas, kurį reikia pastebėti, yra tas, kad pirmasis rodyklės skaitiklis i skaičiuoja eiles, o antrasis j skaičiuojamas per stulpelius. Išorinė kilpa tada paprasčiausiai juda iš vienos eilės į kitą. Vidinė kilpa skaičiuoja 1 dabartinėje eilutėje. Jei yra trys, tada jūs turite nugalėtoją.

Atkreipkite dėmesį, kad jūs taip pat sekate bendrą patikrintų kvadratų skaičių kintamajame „CheckWin“ - tai vertė, perduodama atgal, kai ši funkcija baigiama. Kiekvienas laimėjęs derinys turės „CheckWin“ unikalią vertę nuo 0 iki 7, kuri naudojama pasirenkant vieną iš linWin () komponentų masyvo elementų. Tai daro svarbią ir „CheckWin“ kodo tvarką! Jei perkėlėte vieną iš kilpos kodas (kaip ir aukščiau), kai kas nors laimi, žaidimo tinklelyje bus nubrėžta neteisinga linija. Išbandyk ir pamatyk!

Apdailos detalės

Vienintelis dar neaptartas kodas yra naujo žaidimo paprogramė ir paprogramė, kuri iš naujo nustatys rezultatą. Likusi sistemos logika leidžia juos lengvai sukurti. Norėdami pradėti naują žaidimą, turite tik paskambinti įprogramą „InitPlayGround“. Žaidėjų patogumui, kadangi mygtuką galima spustelėti žaidimo viduryje, prieš eidami į priekį, paprašykite patvirtinimo. Jūs taip pat klausiate patvirtinimo prieš paleisdami švieslentę.

instagram story viewer