Et simpelt kryds og bolle spil

Tags:    visual-basic
Skrevet af Bruger #2353 @ 05.08.2004

Introduktion



I denne artikel vil jeg vise dig, hvorledes et klassisk kryds og bolle spil kan udformes. Visual Basic kan helt klart anvendes til disse meget konkrete og kreative udfoldelser, men det skal være helt klart, at noget grafisk krævende ikke er muligt på en simpel måde. Et kryds og bolle spil sætter ikke store krav til computerens processor, derfor er det ideelt at designe et sådant spil i netop VB. Jeg benytter VB 6.0, men koden vil angivelig strække sig helt ned til version 3.0.

I spillet er der nogle klare overordnede problemstillinger at have i bevidstheden:

- Det skal være muligt at spille to spillere mod hinanden
- Det skal være muligt at spille mod en kunstig intelligens
- Grafikken skal være overskuelig og funktionel

Det punkt der sætter de største krav til programmøren er naturligvis den kunstige intelligens, da den skal kunne forudsige nogle træk hos modstanderen og samtidig trække sig selv nærmere sejren. Jeg vil ikke fokusere, at intelligensen har en særlig intelligent indsigt i spillet, den bruger populært sagt udelukkelsesmetoden, og tillader ikke åbenlyse fejl. Den er derimod ikke i stand til at kunne sætte sig i sin modstanders sted og derudfra planlægge en strategi.

Lad os se på selve designet, eller brugergrænsefladen. (Du kan hente hele spillet ned med en detaljeret og overskuelig beskrivelse af hvert punkt, hvis du foretrækker det)

Placeringen: http://udvikleren.dk/articlefiles/Kryds%20og%20Bolle.zip


Brugerfladen



Vi skal bruge to forme, som jeg kalder Form1 og form2. Form1 er stedet, hvor selve spillets gang finder sted. Det skal indeholde følgende:

- Et vindue hvor krydserne og bollerne placeres i. (En picturebox med navnet: ”Skærm”) Størrelsen skal passe til 3x3 felter (Jeg bruger 6000x6000 twips).

- Tre knapper: Command1 = Start forfra – Command2 = Nye Indstillinger – Command3 = Luk

- En statusboks der viser hvis tur, det er. Kald den bare Label1


Form2 er startformen, altså stedet hvor indstillingerne vælges. (Vælg form2 som startform ved at højreklikke i projektvinduet i højre hjørne og vælge projekt1 properties. Efterfølgende vælger du Form2 som startup object.) Vi får brug for dette:

- To optionbuttons. De står for: ”To spillere” og ”Spil mod den kunstige intelligens”.

- To knapper: ”Luk” og ”start”

- Alle elementer bibeholder deres oprindelige navne.


Indholdet



Nu skal vi kigge på noget af indholdet i spillet. Lad os starte med det tørre – selve navigationen, du koder på form2. Kopier understående direkte ind i projektet. (Vælg form2’s generel procedure og vælg ”sæt ind” eller ”paste”) Der er ingen grund til at forklare de enkelte dele i detaljer her, se kommentarerne inde i selve projektet:

Fold kodeboks ind/udKode 


Som det fremgår af koden, har jeg defineret en variabel der hedder ”SpilleMåde”. Denne variabel styrer spiller2s identitet. Hvis spillemåde indbefatter en sand værdi (True) spilles der to spillere. Opret nu et Modul ved navn ”Module1”. Det skal indeholde alle vores procedurer og variabler. Du kan ligeså godt kopiere hele indholdet ind i dit projekt med det samme, jeg refererer og forklarer i detaljer senere.

Fold kodeboks ind/udKode 


Nu har vi i princippet allerede den kunstige intelligens, men lad os vente med at sætte fokus på den; lige nu skal vi se på selve spillets udformning, vi skal se på form1.

Det, der er helt afgørende for lige præcis dette spil, er, at jeg bruger en enkelt picturebox til at vise hele spillets gang. Men problemet er, at den skal vise 3x3 felter, altså de 9 felter spilleren kan benytte til at placere sit kryds eller sin bolle. Men det gøres meget enkelt, vi deler den simpelthen op ved at indstille følende variabler:

Skærm.scalewidth = 3
Skærm.scaleheight = 3

(Du kan enten gøre det i selve koden eller i projektet – når du klikker på pictureboxen. Sidste alternativ bliver brugt i programmet, der kan hentes.)

Nu består pictureboxen af 9 felter som sagt. Hvis vi skriver: ”skærm.line (0,0)-(1,1),0,bf” vil der komme en stor firkant til syne til forskel fra en picturebox med en standart scalewidth og –height.

For at have kontrol over de forskellige værdier, hvert felt indeholder, har jeg defineret et type-function i Module1. Kig i module1’s declarations procedure. Denne form for variabler kan bruges på en måde, så man fx kan skrive: Felt(2,3).status = 2. Det er altså en variabel der indeholder i alt 9 mulige, varierende værdier. (Idet der er 9 felter!)

Før vi går videre, skal du indsætte sidste del kode i dit projekt. Den skal indsættes i form1.

Fold kodeboks ind/udKode 


I proceduren hvor musen trykker ned på pictureboxen, ser vi følgende:

- Det ønskede felt lokaliseres gennem en undersøgelse af musens x- og y-position. Ved at anvende dette tal som et heltal, kan det direkte sættes i forbindelse med Felt-variablen i Module1.

Men lad os lige kaste et blik på ”Opdater”-proceduren der kan findes i Module1.

Umiddelbart virker den måske uoverskuelig, men i virkeligheden er der bare en stor del ”manuel” kode, som jeg kalder den. Med manuel kode mener jeg, at der er en række felter, der skal checkes i forhold til hinanden.
I delen der er markeret mellem ”With Form1” og ”End with” bliver grafikken udformet. For-next-løkken gennemgår alle 9 felter og tegner et ikon afhængig af værdien fra Felt.status. Hvis felt(x,y).status er 0, viser det, at feltet endnu ikke indeholder en værdi. 1 er spiller 1 og 2 er spiller 2 logisk nok.

Afrunding



Ved at bruge en ganske simpel kode, kan man skabe et kryds og bolle spil på bare ca. 300 linjer! Men hvis den kunstige intelligens (som jeg har gået meget let over) skulle være bedre, kunne man godt forberede sig på at tilføje endnu 300 linjer. Hvis man ønskede at opgradere spillet med mulighed for multiplayeropkobling, kunne man bruge Winsock-kontrollen. Det vil jeg imidlertid ikke komme mere ind på her, da det også er meget plads- og tidskrævende.

Jeg mener personligt, at det, der gør denne konstruktion af et kryds og bolle spil så unit, er måden hvorpå pictureboxen ”skærm” deles op på. Det sparer programmøren for mange linjer og meget besvær, set i mine øjne.

Nu kan der vidst ikke vrides mere ud af et simpelt kryds og bolle spil!? Jeg håber, at du kan bruge det.



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (14)

User
Bruger #618 @ 05.08.04 22:29
hmmm....hvordan kan det være at den ikke kan vinde over mig? også selvom jeg lader den vinde.

Men ellers en flot artikel ;)
User
Bruger #2165 @ 05.08.04 23:15
Hehe Mohamed, AI'er er jo bygget til at sørge for du ikke får tre på striber alt for let, og tænker altså slet ikke på sin egen sejr...
User
Bruger #2353 @ 13.08.04 20:45
Ja det er nemlig korrekt. Den kunstige intelligens tager kun højde for at blokere dig fra at vinde. Jeg har ikke indprogrammeret en funktion der gør, at den selv forsøger at vinde. Det kunne må sagtens, men det ville som sagt tage tid, og jeg mener ikke, at det er relevant i denne sammenhæng.
User
Bruger #9576 @ 16.04.06 21:37
hmm er det meningen er man skal hente spillet med en guide nu eller hva ?
User
Bruger #10078 @ 21.06.06 06:57
Hvordan kan det være at mit felt øver ivenstre hjørne "blinker"??? det bliver sort en gang i mellem. det irreterer mig lidt.
User
Bruger #10782 @ 31.10.06 12:18
Hej Rasmus

Denne link
http://udvikleren.dk/articlefiles/Kryds%20og%20Bolle.zip
Virker ikke..! hvorfor mon.?
User
Bruger #10782 @ 07.11.06 11:40
hyggeligt nok er den vel :D
User
Bruger #10188 @ 23.11.06 09:47
hvorfor kan jeg ikke hente koderne ned
User
Bruger #65 @ 23.11.06 14:14
Læste lige

http://edais.mvps.org/Tutorials/TTTAI/index.html

ret interesant.:)
User
Bruger #11504 @ 11.03.07 14:52
hej rasmus
jeg spekulere over hvad du (præcist) mener når du skriver knapper. Så fortæl mig lige hvad for nogle knapper mener du ved: command1, 2, 3 ;)
User
Bruger #11504 @ 11.03.07 16:25
og i øvrigt... virker det så til "visual basic 2005 express edition"?
User
Bruger #14009 @ 19.07.08 15:39
hvordan laver man Module1 til Visual basic 2008 Express Edition?:roll:
User
Bruger #14009 @ 19.07.08 15:47
har fundet ud af det men.. hvad med optionbuttons?..??
User
Bruger #13988 @ 24.07.08 15:22
en okey artikkel, som jeg helt sikkert vil lege lidt med... 3-tal her fra

og sebastian du skal gå ind i Toolbox og vælge den lille runde grønne knap, som du også kan se hedder optionbutton når du holder musen over
Du skal være logget ind for at skrive en kommentar.
t