2Player
Übersicht

![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
X ist gleich 0
und wenn du dann Code: [AUSKLAPPEN] If k1 = x Then Line
dann wird es gezeichnet! K1 ist der ein/Aus schalter 0 = aus 1 = an BlitzBasic: [AUSKLAPPEN] If mauskollision(1,155,56) Then k1 = 1 ;Einschalten |
||
[BB2D | BB3D | BB+]
|
![]() |
felix-pf |
![]() Antworten mit Zitat ![]() |
---|---|---|
und wieder was neues gelernt!
Danke!!! |
||
User posted image |
![]() |
felix-pf |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() Ich hab jetzt alle x in 1en umbenannt, Un jetzt gehts auch wunderber... ![]() ![]() ![]() Code: [AUSKLAPPEN] ;################# ********
;## TIC TAC TOE ## *(BB2D)* ;################# ******** Graphics 800,600,16,1 SetBuffer BackBuffer() Global k1=0 Global k2=0 Global k3=0 Global k4=0 Global k5=0 Global k6=0 Global k7=0 Global k8=0 Global k9=0 ;Global maus=LoadImage("maus.bmp") Repeat Cls Rect(155,56,100,100,0) ;links oben Rect(155,220,100,100,0) ;links mitte Rect(155,385,100,100,0) ;links unten Rect(360,56,100,100,0) ;mitte oben Rect(360,220,100,100,0) ;mitte mitte Rect(360,385,100,100,0) ;mitte unten Rect(550,56,100,100,0) ;rechts oben Rect(550,220,100,100,0) ;rechts mitte Rect(550,385,100,100,0) ;rechts unten If MouseHit(1) Then If mauskollision(1,155,56) And k1 = 0 Then k1 = 1 If mauskollision(2,155,220) And k2 = 0 Then k2 = 1 If mauskollision(3,155,385) And k3 = 0 Then k3 = 1 If mauskollision(4,360,56) And k4 = 0 Then k2 = 1 If mauskollision(5,360,220) And k5 = 0 Then k2 = 1 If mauskollision(6,360,385) And k6 = 0 Then k2 = 1 If mauskollision(7,550,56) And k7 = 0 Then k2 = 1 If mauskollision(8,550,220) And k8 = 0 Then k2 = 1 If mauskollision(9,550,385) And k9 = 0 Then k2 = 1 EndIf If k1 = 1 Then Line(155,56,255,156) ;links oben If k2 = 1 Then Line(155,220,255,320) ;links mitte If k3 = 1 Then Line(155,385,255,485) ;links unten If k4 = 1 Then Line(360,56,460,156) ;mitte oben If k5 = 1 Then Line(360,220,460,320) ;mitte mitte If k6 = 1 Then Line(360,385,460,485) ;mitte unten If m7 = 1 Then Line(550,56,650,156) ;rechts oben If k8 = 1 Then Line(550,220,650,320) ;rechts mitte If k9 = 1 Then Line(550,385,650,485) ;rechts unten ;DrawImage(maus,MouseX(),MouseY()) Rect (MouseX(),MouseY(),8,8) Flip Until KeyHit(1) WaitKey End Function mauskollision(kasten#,kastenx,kasteny) If Rectsoverlap(kastenx,kasteny,100,100,MouseX(),MouseY(),1,1) Then Return True EndIf Return False End Function |
||
User posted image |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] If mauskollision(4,360,56) And k4 = 0 Then k2 = 1 Warum steht da überall k2 = 1 ![]() und das hier ![]() BlitzBasic: [AUSKLAPPEN] If m7 = 1 Then Line... |
||
[BB2D | BB3D | BB+]
|
![]() |
felix-pf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oops! ![]() |
||
User posted image |
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
SO HAB SELBER MAL DAS GEMACHT:BlitzBasic: [AUSKLAPPEN] ;################# ******** Das ist so einfach aber das kann man von manchen nicht erwarten.^^ Ok hier war der code. es ist sehr simple ich werde mal ein Hotseat-oneplayer-netzwerk/internet beispiel mal irgendwan zeigen. Das werde ich morgen noch proggen kann ja net so schwer sein ![]() Vorallem wird der KI schwer sein (nie gemacht hab)[/code] |
||
![]() |
felix-pf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Endlich...
Ich habs fertig gebracht!!! ![]() Danke an alle die mir geholfen haben. ![]() Noch irgendwelche Verbesserungsvorschläge? Hier der Code: Code: [AUSKLAPPEN] ;################# *********** ;## TIC TAC TOE ## ** BB 2D ** ;################# *********** ;################### Grundeinstellungen ################################### ; # Graphics 800,600,16,1 ;-------------{ Fenster-größe und -art festlegen }-# ; # SetBuffer BackBuffer() ;-------------------{ Buffer festlegen }----------# ; # ; Global maus=LoadImage("maus.bmp");-{ Bild für Cursor laden (optional) }-# ; # ;########################################################################## ;******************** X und O festlegen ************************ ; * ;#################### X festlegen ########################### * Global k1=0 ;links oben # * Global k2=0 ;links mitte # * Global k3=0 ;links unten # * Global k4=0 ;mitte oben # * Global k5=0 ;mitte mitte # * Global k6=0 ;mitte unten # * Global k7=0 ;rechts oben # * Global k8=0 ;rechts mitte # * Global k9=0 ;rechts unten # * ;############################################################ * ; * ;#################### O festlegen ########################### * Global o1=0 ;links oben # * Global o2=0 ;links mitte # * Global o3=0 ;links unten # * Global o4=0 ;mitte oben # * Global o5=0 ;mitte mitte # * Global o6=0 ;mitte unten # * Global o7=0 ;rechts oben # * Global o8=0 ;rechts mitte # * Global o9=0 ;rechts unten # * ;############################################################ * ; * ;*************************************************************** ;################### Spieler festlegen ## [0 = X]-[1 = O] ### s=0 ;Spieler 1(X) beginnt # ;############################################################ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++-===================-+++++++++++++++++++++++ ;+++++++++++++++++++++++-== Spielschleife ==-+++++++++++++++++++++++ ;+++++++++++++++++++++++-===================-+++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Repeat ;-{ Spielschleife (Anfang) }------- Cls ;---{ Bildschirm löschen }----------- ; Unten an den Bildschirm schreiben If s = 0 Then Text 0,570," Spieler 1 (X) ist am Zug" EndIf If s = 1 Then Text 0,570," Spieler 2 (O) ist am Zug" EndIf ;/\/\/\/\ Rechtecke zeichnen /\/\/\/\/\/\ Rect(155,56,100,100,0) ;links oben / Rect(155,220,100,100,0) ;links mitte \ Rect(155,385,100,100,0) ;links unten / Rect(360,56,100,100,0) ;mitte oben \ Rect(360,220,100,100,0) ;mitte mitte / Rect(360,385,100,100,0) ;mitte unten \ Rect(550,56,100,100,0) ;rechts oben / Rect(550,220,100,100,0) ;rechts mitte \ Rect(550,385,100,100,0) ;rechts unten / ;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ ;++++++++++++ Mausklickabfrage - Mausposition ++++++++++++ ;++++++++++++ Variablen prüfen und einstellen ++++++++++++ ; ++ If MouseHit(1) Then ;--------{ Mausklickabfrage }-------++ ; ++ If mauskollision(155,56) ;--{ Kollisionsabfrage }------++ If s=0 And k1 = 0 And o1 = 0 Then k1 = 1 s=1 ; (X) ++ If s=1 And o1 = 0 And k1 = 0 Then o1 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(155,220) ;-{ Kollisionsabfrage }------++ If s=0 And k2 = 0 And o2 = 0 Then k2 = 1 s=1 ; (X) ++ If s=1 And o2 = 0 And k2 = 0 Then o2 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(155,385) ;-{ Kollisionsabfrage }------++ If s=0 And k3 = 0 And o3 = 0 Then k3 = 1 s=1 ; (X) ++ If s=1 And o3 = 0 And k3 = 0 Then o3 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(360,56) ;-{ Kollisionsabfrage }------++ If s=0 And k4 = 0 And o4 = 0 Then k4 = 1 s=1 ; (X) ++ If s=1 And o4 = 0 And k4 = 0 Then o4 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(360,220) ;-{ Kollisionsabfrage }------++ If s=0 And k5 = 0 And o5 = 0 Then k5 = 1 s=1 ; (X) ++ If s=1 And o5 = 0 And k5 = 0 Then o5 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(360,385) ;-{ Kollisionsabfrage }------++ If s=0 And k6 = 0 And o6 = 0 Then k6 = 1 s=1 ; (X) ++ If s=1 And o6 = 0 And k6 = 0 Then o6 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(550,56) ;-{ Kollisionsabfrage }------++ If s=0 And k7 = 0 And o7 = 0 Then k7 = 1 s=1 ; (X) ++ If s=1 And o7 = 0 And k7 = 0 Then o7 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(550,220) ;-{ Kollisionsabfrage }------++ If s=0 And k8 = 0 And o8 = 0 Then k8 = 1 s=1 ; (X) ++ If s=1 And o8 = 0 And k8 = 0 Then o8 = 1 s=0 ; (O) ++ EndIf ; ++ ; ++ If mauskollision(550,385) ;-{ Kollisionsabfrage }------++ If s=0 And k9 = 0 And o9 = 0 Then k9 = 1 s=1 ; (X) ++ If s=1 And o9 = 0 And k9 = 0 Then o9 = 1 s=0 ; (O) ++ EndIf ; ++ ; ; ++ EndIf ; ++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;******************** X und O zeichnen ******************* ; * ;#################### X zeichnen ###################### * ;-------------------------{ links oben }------------# * If k1 = 1 Then ; # * Line(155,56,254,155) ; # * Line(254,56,155,155) ; # * EndIf ; # * ;-------------------------{ links mitte }------------# * If k2 = 1 Then ; # * Line(155,220,254,319) ; # * Line(254,220,155,319) ; # * EndIf ; # * ;-------------------------{ links unten }------------# * If k3 = 1 Then ; # * Line(155,385,254,484) ; # * Line(254,385,155,484) ; # * EndIf ; # * ;-------------------------{ mitte oben }------------# * If k4 = 1 Then ; # * Line(360,56,459,155) ; # * Line(459,56,360,155) ; # * EndIf ; # * ;-------------------------{ mitte mitte }------------# * If k5 = 1 Then ; # * Line(360,220,459,319) ; # * Line(459,220,360,319) ; # * EndIf ; # * ;-------------------------{ mitte unten }------------# * If k6 = 1 Then ; # * Line(360,385,459,484) ; # * Line(459,385,360,484) ; # * EndIf ; # * ;-------------------------{ rechts oben }------------# * If k7 = 1 Then ; # * Line(550,56,649,155) ; # * Line(649,56,550,155) ; # * EndIf ; # * ;-------------------------{ rechts mitte }------------# * If k8 = 1 Then ; # * Line(550,220,649,319) ; # * Line(649,220,550,319) ; # * EndIf ; # * ;-------------------------{ rechts unten }------------# * If k9 = 1 Then ; # * Line(550,385,649,484) ; # * Line(649,385,550,484) ; # * EndIf ; # * ;###################################################### * ; * ;#################### O zeichnen ###################### * If o1 = 1 Then Oval(155,56,100,100,0) ;links oben # * If o2 = 1 Then Oval(155,220,100,100,0) ;links mitte # * If o3 = 1 Then Oval(155,385,100,100,0) ;links unten # * If o4 = 1 Then Oval(360,56,100,100,0) ;mitte oben # * If o5 = 1 Then Oval(360,220,100,100,0) ;mitte mitte # * If o6 = 1 Then Oval(360,385,100,100,0) ;mitte unten # * If o7 = 1 Then Oval(550,56,100,100,0) ;rechts oben # * If o8 = 1 Then Oval(550,220,100,100,0) ;rechts mitte # * If o9 = 1 Then Oval(550,385,100,100,0) ;rechts unten # * ;###################################################### * ; * ;********************************************************* ;#################### Maus zeichnen ############################ ;DrawImage(maus,MouseX(),MouseY()) ;Wenn Bild oben geladen # Rect (MouseX(),MouseY(),8,8) ;Wenn kein Bild geladen ist # ;############################################################### ;++++++++++++++ Alles zurücksetzen (neues Spiel) +++++++++ ; + If KeyHit(57) Then ; Wenn die Leertaste gedrückt wird.. + k1=0 ; ..wird alles zurück gesetzt + k2=0 ; + k3=0 ; + k4=0 ; + k5=0 ; + k6=0 ; + k7=0 ; + k8=0 ; + k9=0 ; + ;--------------------------------------------------------+ o1=0 ; + o2=0 ; + o3=0 ; + o4=0 ; + o5=0 ; + o6=0 ; + o7=0 ; + o8=0 ; + o9=0 ; + ;--------------------------------------------------------+ EndIf ; + ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Flip ;---------------{ Buffer wechseln }------------ Until KeyHit(1) ;----{ Spielschleife (Ende) }------- End ;----------------{ Ende }----------------------- ;############################### Funktionen ################################ ; # ;************************* Mauskollision Abfragen *********************** # Function mauskollision(kastenx,kasteny) ;* # If Rectsoverlap(kastenx,kasteny,100,100,MouseX(),MouseY(),1,1) Then ;* # Return True ; Wenn sich die Maus und der Kasten berühren ;* # EndIf ; dann "wahr" zurückgeben. ;* # Return False ; Ansonsten "falsch" zurückgeben ;* # End Function ; Ende der Funktion ;* # ;************************************************************************ # ; # ;########################################################################### Danke nochmal an alle! ![]() PS: Hoffe es ist Übersichtlich genug ![]() |
||
User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo felix-pf, ich habe mal ein neues TicTacToe erstellt. Dein Code ist in Ordnung, nur für mich etwas unübersichtlich. Es gibt da viele Sachen die man 'einfacher' machen kann.
Beispiele: 1) Die [Global k123.../o123...] -Variablen, kann man mit hilfe eines zweidimensionalem Arrays (Dim) vereinfachen. Arrays sind für solche Rasterorientierten Spiele, wo die Spielfeldgröße von Anfang festgelegt ist, sehr praktisch. 2) Neunmal Rect um das Spielfeld zu erstellen, kann bei größeren Projekten zu vertippern kommen! Dann ist die Fehlersuche sicherlich eine Qual. Mach sowas lieber mit zwei verschachtelten For...Next -Schleifen. 3) Mauskollisionen können in diesem Spielbeispiel auch mit zwei verschachtelten For...Next -Schleifen abgefangen werden. Fehlerquellen werden sofort erkennbar. 4) X und O zeichnen... Siehe Punkt 1) 2) 3) Lerne mal zunächst wie eine For...Next -Schleife funktioniert. Eine solche ist unabdingbar (schreibt man das so?) zum programmieren. Du hast ja bereits Funktionen in deinem Programm eingebaut. Diese sind für Anfänger sicherlich nicht einfacher als For...Next. Nur wesentlich unwichtiger. Hier mal der Code wie man es machen könnte. Ich gebe zu, daß hier einiges am Anfang etwas unverständlich sein könnte, da viel 'getrickst' wurde... Falls du Fragen dazu hast, immer her damit... Code: [AUSKLAPPEN] Graphics 301,301,16,2
SetBuffer BackBuffer() AppTitle "Tic Tac Toe" Dim xy(2,2) ;3*3 großes Spielfeldarray erstellen sp%=0 ;spielender Spieler (0=Spieler 1), (1=Spieler 2) mx%=0 ;Maus-X-Spielfeldposition (0-2) my%=0 ;Maus-Y-Spielfeldposition (0-2) mt%=0 ;MausHit(1) Zwischenspeicherung xx%=0 ;Schleifenvariable für X-Position yy%=0 ;Schleifenvariable für Y-Position qq%=0 ;Allgemeine Schleifenvariable sx%=0 ;Gewinner'querr'summe für X sy%=0 ;Gewinner'querr'summe für Y sz%=0 ;Spielzugzähler ;Hauptroutine While Not KeyHit(1) ;Mausabfrage mx=MouseX()/100 my=MouseY()/100 mt=MouseHit(1) If mx>2 Then mx=2 If my>2 Then my=2 ;Zeichne.. spielfeld() ;Spieleranzeige Color 255,255,255 Rect mx*100,my*100,101,101,0 If Not xy(mx,my)=0 Then Color 255,0,0 If sp=0 Then Line 2+mx*100,12+my*100,12+mx*100,2+my*100 Line 2+mx*100,2+my*100,12+mx*100,12+my*100 Else Oval 2+mx*100,2+my*100,12,12,0 End If ;Ein Spieler hat was ausgewählt If mt=1 And xy(mx,my)=0 Then xy(mx,my)=sp+1 ;Ganz einfache ;Gewinnerprüfung ;Vertikal/Horizontal For yy=0 To 2 sx=0 sy=0 For xx=0 To 2 ;Horizontale Gewinnerprüfung If xy(xx,yy)=sp+1 Then sx=sx+xy(xx,yy) ;Vertikale Gewinnerprüfung If xy(yy,xx)=sp+1 Then sy=sy+xy(yy,xx) Next If sx=(sp+1)*3 Then gewonnen(sp+1) If sy=(sp+1)*3 Then gewonnen(sp+1) Next ;Ganz einfache ;Gewinnerprüfung ;Diagonal sx=0 sy=0 For qq=0 To 2 ;Diagonale Gewinnerprüfung (\) If xy(qq,qq)=sp+1 Then sx=sx+xy(qq,qq) ;Diagonale Gewinnerprüfung (/) If xy(qq,2-qq)=sp+1 Then sy=sy+xy(qq,2-qq) Next If sx=(sp+1)*3 Then gewonnen(sp+1) If sy=(sp+1)*3 Then gewonnen(sp+1) ;Wechsel sp=1-sp sz=sz+1 End If ;Falls keiner gewonnen hat If sz=9 Then gewonnen(0) ;Zurrücksetzen If KeyDown(57) Then For yy=0 To 2 For xx=0 To 2 xy(xx,yy)=0 Next Next sp=0 sz=0 End If Flip Cls Wend End ;Spielfeld zeichnen Function spielfeld() For yy=0 To 2 For xx=0 To 2 ;Spielfledraster Color 128,128,128 Rect xx*100,yy*100,101,101,0 ;Spieler 1 (Kreuz) If xy(xx,yy)=1 Then Color 192,192,192 Line 15+xx*100,15+yy*100,85+xx*100,85+yy*100 Line 15+xx*100,85+yy*100,85+xx*100,15+yy*100 End If ;Spieler 2 (Kreis) If xy(xx,yy)=2 Then Color 192,192,192 Oval 10+xx*100,10+yy*100,80,80,0 End If Next Next End Function ;Gewinnnerauskunft Function gewonnen(sp) Cls spielfeld() Color 64,64,64 Rect 1,1,299,16,1 Rect 1,284,299,16,1 Color 255,255,255 If sp=0 Then Text 150,2,"Es hat keiner gewonnen!",1 If sp=1 Then Text 150,2,"Spieler Kreuz hat gewonnen!",1 If sp=2 Then Text 150,2,"Spieler Kreis hat gewonnen!",1 Text 150,285,"Eine Taste drücken um zu Beenden",1 Flip FlushKeys WaitKey End End Function |
||
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja das finde ich auch sehr gut.
Für die länge passt es ![]() Daraus ein netzwerk game zu machen wird denke ich nicht so schwer sein. Aber es gewinnt meistens nur der der anfängt oder keiner. Naja ist ja ein simples game wo man nicht durch zufall gewinnen kann ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group