Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP tic tac toe

Frage Entwicklung PHP

Mitglied: dempsey

dempsey (Level 1) - Jetzt verbinden

11.10.2010 um 15:08 Uhr, 3656 Aufrufe, 14 Kommentare

Hallo Zusammen,

ich versuche gerade ein TicTacToe Spiel über PHP zu entwerfen bzw. es ist die dritte Aufgabe in meiner Ausbildung.
Nun habe ich Grundgerüst usw. erstellt - so weit so gut

ich möchte jetzt wissen, wie ich am besten die Spielmechanik in PHP programmiere. Es sollen 2 Spieler spielen können
aber ich weiss jetzt nicht wie es abläuft, sodass sich beide abwechseln. Muss ich da mehrere Funktionen ineinanderschachteln?

Mein Ausbilder ist leider im Urlaub und ich muss jetzt erstmal alleine klar kommen.Deswegen frag ich euch

LG,
dempsey
Mitglied: kaiand1
11.10.2010 um 15:36 Uhr
Nun des ist so
Beide Spieler Melden sich auf der Seite das die Spielen wollen.
Wenn beide im SPiel sind Spiel-ID1 machst du entweder einen Würfel wer anfängt oder das die sich selbst einigen.
Dann immer abwechselnd darf einer 1 Zug machen wodurch du ja die Abfragen entweder alle X Sekunden die Seite neu lädst oder am besten per Ajax machst.
Verschalteln im grunde ja da du mehere Sachen prüfen mußt um zu wissen wer dran ist ect
Bitte warten ..
Mitglied: Guenni
11.10.2010 um 15:55 Uhr
Hi dempsey,

dieses Script . . .

http://code.activestate.com/recipes/276962-php-tic-tac-toe/

. . . unter tic-tac-toe.php abspeichern.

Du spielst da zwar gegen den Computer, aber da erhälst du schon

mal einen kleinen Einblick, wie aufwändig das ist.

Gruß
Günni
Bitte warten ..
Mitglied: maretz
11.10.2010 um 19:49 Uhr
moin,

das gibt da eine vielzahl an optionen... Die einfache: Beide Spieler bekommen eine ID die du in ner DB ablegst. Bei dem Spieler bei dem der Wert auf "Aktiv" ist werden die Steuerelemente entsperrt. soweit der klickt sperrst du dessen steuerelemente - und entsperrst die beim anderen spieler...

ob du das dann per ajax realisierst oder per reload is dann ne detailfrage...
Bitte warten ..
Mitglied: dog
11.10.2010 um 20:53 Uhr
...das Script ist so alt, dass es auf einem halbwegs aktuellen Server nicht mal mehr laufen wird und zudem programmier-technisch beinahe eine Vergewaltigung.
Bitte warten ..
Mitglied: maretz
11.10.2010 um 21:02 Uhr
jap - das global dürfte schon ein erstes kleineres Problem geben...

und nur nebenbei - ich würde auch überlegen html und php zu trennen (ggf. nen template-system nutzen). das macht es übersichtlicher...

mehr guck ich lieber nich an - hab doch eben erst gegessen, das soll bitte auch drin bleiben!
Bitte warten ..
Mitglied: Guenni
11.10.2010 um 21:29 Uhr
Hi Master of Scripting,

...das Script ist so alt, dass es auf einem halbwegs aktuellen Server nicht mal mehr laufen wird

und zudem programmier-technisch beinahe eine Vergewaltigung.


Meine PHP Version ist vom Stand 5.2.6-1 und da läuft dieses Script einwandfrei. Wenn das nicht der

Fall wäre, so hätte ich das Script wohl kaum gepostet.


Meine Fresse, hast du eigentlich nichts anderes zu tuen, als auf Beiträge irgendwelche Kommentare abzugeben,

nur um in der Leiter links außen nach oben zu klettern?


Wundert mich nur noch, dass du in dem Script nicht noch irgendeine Lücke entdeckt hast, wo jemand eine SQL-Injection

unterbringen kann. Im Rezitieren einer gewissen Wiki-Seite bist du ja auch der Master of Scripting

Gruß
Günni
Bitte warten ..
Mitglied: dog
11.10.2010 um 21:45 Uhr
Ahnung von PHP hast du nicht, oder?
(Das ist natürlich eine rhetorische Frage. Mit deinem qualifizierten Kommentar zur Bedeutung von SQL-Injections ist ja schon alles gesagt.)

Ich würde dir empfehlen erst mal ein paar Grundlagen zu lernen bevor du andere dermaßen unbegründet anmachst.

Aber bitte, gehen wir es mal durch:

global $bsize,$playerToken,$myToken,$gameOver,$winArr,$rowArr,$colArr,$digArr,$vals,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9;

Im globalen Kontext globale Variablen zu definieren ist absoluter Schwachsinn.

<?

Diese Syntax wird in einem aktuellen PHP gar nicht mehr in der Standardkonfiguration angenommen und fliegt in PHP6 raus.
Erst wenn man mutwillig short_open_tags aktiviert läuft das und davon rät PHP nicht ohne Grund deutlich ab.

function genBox($size) {
global $bsize,$playerToken,$myToken,$gameOver,$winArr,$rowArr,$colArr,$digArr,$vals,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9;

Du kannst mir auch sicher sagen wo es zu einem guten Stil gehört, dass man in jeder einzelnen Funktion 18 Globalen definiert.
Schon eine davon ist eine zu viel!

$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9

Jeder der sich mal 10 Minuten mit Programmieren befasst hat und bis zu Arrays gekommen ist dürfte verstehen, warum das ein Parade-Beispiel für ganz großen Mist ist.

if($who=="")
return 1;
else
return 0;

Mit auch nur ein bisschen Ahnung hätte man das geschrieben als:
return ($who=='');
(Den allgemeinen Sinn der Funktion mal nicht betrachtet).

if($HTTP_POST_VARS) {

Seit Ewigkeiten ist das $_POST.
HTTP_POST_VARS ist seit 4.1.0 (!) veraltet und fliegt in PHP6 raus!

01.
		if($movIndex==0) 
02.
			$s1=$myToken; 
03.
		if($movIndex==1) 
04.
			$s2=$myToken; 
05.
		if($movIndex==2) 
06.
			$s3=$myToken; 
07.
		if($movIndex==3) 
08.
			$s4=$myToken; 
09.
		if($movIndex==4) 
10.
			$s5=$myToken; 
11.
		if($movIndex==5) 
12.
			$s6=$myToken; 
13.
		if($movIndex==6) 
14.
			$s7=$myToken; 
15.
		if($movIndex==7) 
16.
			$s8=$myToken; 
17.
		if($movIndex==8) 
18.
			$s9=$myToken;
Ich hoffe dazu muss ich nicht auch noch was sagen?

Und die Programm-Logik habe ich mir bisher noch nicht mal angeschaut...

Ich weiß ja nicht, ob es für dich zum guten Ton gehört einen Anfänger mit Uralt-Code zu belasten (wie Cisco das mit den Netz-Klassen macht), aber für mich nicht.
Bitte warten ..
Mitglied: Florian.Sauber
12.10.2010 um 00:22 Uhr
Zitat von kaiand1:
Dann immer abwechselnd darf einer 1 Zug machen wodurch du ja die Abfragen entweder alle X Sekunden die Seite neu lädst oder am besten per Ajax machst.

Zitat von maretz:
bei dem der Wert auf "Aktiv" ist werden die Steuerelemente entsperrt. soweit der klickt sperrst du dessen steuerelemente und entsperrst die beim anderen spieler...

Ich denke das dies bei dem Aufgabentyp nicht notwendig. Ich kann mich irren, aber ich gehe davon aus, daß die Aufgabe sich so versteht, daß 2 Spieler über ein gemeinsames Interface spielen. Spieler1zieht->reload->Spieler2zieht->reload.

LG Florian
Bitte warten ..
Mitglied: dempsey
13.10.2010 um 09:46 Uhr
Hallo Zusammen,

also ihr müsst erstmal wissen, dass ich auch gewisse Vorgaben habe. Vielleicht ergeben sie für euch keinen Sinn aber mein Ausbilder hat sich dabei schon etwas gedacht und deswegen darf ich jetzt nicht mit DB arbeiten.
Ich soll das ganze nämlich mit hiddenfeldern machen. Das wird dann mit einem Counter später durchgezählt usw. usw. aber wie dem auch sei.

ich habe das "Spielfeld" in meiner ausgabe.php generiert und ich möchte jetzt z.b. es so machen, dass an der stelle wo ich den button drücke, da ein einfaches jpg erscheint.
Da ich noch in den Anfangsschuhen von PHP stecke, bitte ich um nachsicht

Ich werde nachher mal ein paar Sachen hier posten, damit ihr ungefähr seht, was ich fabriziert hab =)
Bitte warten ..
Mitglied: kaiand1
13.10.2010 um 10:42 Uhr
Nun nur mit Hiddenfelder wird es schwer da du ja die Kommunikation mit den 2ten User brauchst wo er seine Kreuze macht.
Du könntes die Daten in einer Datei speichern und auslesen.
Aber sowas sagt man direckt am Anfang das du dies unter Einschränkungen zu Progamieren hast...
Bitte warten ..
Mitglied: maretz
13.10.2010 um 10:53 Uhr
Moin,

das ganze mit "hidden feldern"? War das die explizite Vorgabe - oder war es nur "keine Datenbank"? Im letzten Fall könnte man ja noch ne Datei auf dem Server legen bei dem das Spiel abgefragt wird...

Ansonsten würde ich auch versuchen keine Hidden-Fields zu nehmen - da das ganze natürlich keinen Sinn ergibt. Wenn dann in die Session-Variablen packen und über ne Datei den Austausch zwischen den Spielern regeln. Oder soll es so sein das die beiden Spieler vor EINEM Browser sitzen und sich den teilen? (d.h. wirklich die Maus von Hand zu Hand geben)? Dann würde das mit Hidden natürlich gehen (wenn auch nicht schön). Da hättest du 9 Hidden Felder
(hf1_1, hf1_2, hf1_3,....hf3_2,hf3_3). Die setzt du einfach auf -1 zum Start (nicht belegt), 0 oder 1 (je nach Spieler). Jetzt ist es dann im simpelsten Fall stupide Tipparbeit für das Ergebnis

if ((hf1_1==0) AND (hf1_2==0) and (hf1_3==0)) echo "player 1 won!" und so weiter... (geht natürlich auch eleganter -> aber DA darfst du dir dann nen weg überlegen ;)
Bitte warten ..
Mitglied: Florian.Sauber
13.10.2010 um 13:25 Uhr
Zitat von maretz:
Oder soll es so sein das die beiden Spieler vor EINEM Browser sitzen und sich den teilen? (d.h. wirklich die Maus von Hand zu Hand geben)? ...

Da würde ich fast darauf wetten...

LG Florian
Bitte warten ..
Mitglied: dempsey
13.10.2010 um 16:49 Uhr
Also es beide Informationen Stimmen -> Hiddenfelder verwenden und -> keine Datenbank

Es soll keinen Computer mit KI geben ! Florian hatte da recht .. Letztendlich sollen nur mein Ausbilder und ich an einem und dem selben Browser das TicTacToe spielen können.

01.
  <?php 
02.
	function bild(){ 
03.
	 
04.
		//$value = "<input class=\"button\" name=\"button1\" type=\"submit\" value=\"absenden\"/>"; 
05.
		if ($_POST['A1'] =='A1'){ 
06.
		$value = "<p><img src=\"x.jpg\" alt=\"Spieler1\"></p>"; 
07.
08.
		return ($value);		 
09.
10.
	 
11.
	 
12.
	function playground($A1, $A2, $A3, $B1, $B2, $B3, $C1, $C2, $C3) { 
13.
	 
14.
		//Erstellung von Spielfeld A1 bis A3		 
15.
		$value = "<tr>\n"; 
16.
		$value.= "<td div id=\"fields\">\n"; 
17.
		$value.= "<input name=\"hiddenA1\" type=\"hidden\" value=\"1\"/>"; 
18.
		$value.= "<input class=\"button\" name=\"A1\" type=\"submit\" value=\"A1\"/>"; 
19.
		$value.= $A1; 
20.
		$value.= "</td>\n"; 
21.
		$value.= "<td div id=\"fields\">\n"; 
22.
		$value.= "<input name=\"hiddenA2\" type=\"hidden\" value=\"1\"/>"; 
23.
		$value.= "<input class=\"button\" name=\"A2\" type=\"submit\" value=\"A2\"/>"; 
24.
		//$value.= fields($A2); 
25.
		$value.= "</td>\n"; 
26.
		$value.= "<td div id=\"fields\">\n"; 
27.
		$value.= "<input name=\"hiddenA3\" type=\"hidden\" value=\"1\"/>"; 
28.
		$value.= "<input class=\"button\" name=\"A3\" type=\"submit\" value=\"A3\"/>"; 
29.
		//$value.= fields($A3); 
30.
		$value.= "</td>\n"; 
31.
		$value.= "</tr>\n"; 
32.
		//Erstellung von Spielfeld B1 bis B3 
33.
		$value.= "<tr>\n"; 
34.
		$value.= "<td div id=\"fields\">\n"; 
35.
		$value.= "<input name=\"hiddenB1\" type=\"hidden\" value=\"1\"/>"; 
36.
		$value.= "<input class=\"button\" name=\"B1\" type=\"submit\" value=\"B1\"/>"; 
37.
		//$value.= fields($B1); 
38.
		$value.= "</td>\n"; 
39.
		$value.= "<td div id=\"fields\">\n"; 
40.
		$value.= "<input name=\"hiddenB2\" type=\"hidden\" value=\"1\"/>"; 
41.
		$value.= "<input class=\"button\" name=\"B2\" type=\"submit\" value=\"B2\"/>"; 
42.
		//$value.= fields($B2); 
43.
		$value.= "</td>\n"; 
44.
		$value.= "<td div id=\"fields\">\n"; 
45.
		$value.= "<input name=\"hiddenB3\" type=\"hidden\" value=\"1\"/>"; 
46.
		$value.= "<input class=\"button\" name=\"B3\" type=\"submit\" value=\"B3\"/>"; 
47.
		//$value.= fields($B3); 
48.
		$value.= "</td>\n"; 
49.
		$value.= "</tr>\n"; 
50.
		//Erstellung von Spielfeld C1 bis C3 
51.
		$value.= "<tr>\n"; 
52.
		$value.= "<td div id=\"fields\">\n"; 
53.
		$value.= "<input name=\"hiddenC1\" type=\"hidden\" value=\"1\"/>"; 
54.
		$value.= "<input class=\"button\" name=\"C1\" type=\"submit\" value=\"C1\"/>"; 
55.
		//$value.= fields($C1); 
56.
		$value.= "</td>\n"; 
57.
		$value.= "<td div id=\"fields\">\n"; 
58.
		$value.= "<input name=\"hiddenC2\" type=\"hidden\" value=\"1\"/>"; 
59.
		$value.= "<input class=\"button\" name=\"C2\" type=\"submit\" value=\"C2\"/>"; 
60.
		//$value.= fields($C2); 
61.
		$value.= "</td>\n"; 
62.
		$value.= "<td div id=\"fields\">\n"; 
63.
		$value.= "<input name=\"hiddenC3\" type=\"hidden\" value=\"1\"/>"; 
64.
		$value.= "<input class=\"button\" name=\"C3\" type=\"submit\" value=\"C3\"/>"; 
65.
		//$value.= fields($C3); 
66.
		$value.= "</td>\n"; 
67.
		$value.= "</tr>\n"; 
68.
		 
69.
		return($value); 
70.
71.
	 
72.
 
73.
 
74.
?>
bislang sieht die Ausgabe so aus, dass das Spielfeld generiert wird und oben bei der Funktion bild() wird beim betätigen von Knopf A1, ein rotes Kreuz angezeigt. Das geschieht allerdings nicht da wo es hin sollte.

hier seht ihr mal, wie es aussieht: http://img818.imageshack.us/img818/1897/tttx.jpg
das rote x soll den Button ersetzen aber ich glaube, dass wird etwas komplizierter und ich komme an der Stelle nicht weiter
Bitte warten ..
Mitglied: dempsey
14.10.2010 um 14:31 Uhr
Ich hoffe mal, dass hier nochmal einer reinschaut aber ich bin wieder ein stück weitergekommen aber leider läuft in meiner funktion etwas verkehrt aber ich finde das problem noch nicht so wirklich

01.
 
02.
	function bild($i){ 
03.
		 
04.
		$buttons = array(0 => "A1", 1 => "A2", 2 => "A3", 3 => "B1", 4 => "B2", 5 => "B3", 6 => "C1", 7 => "C2", 8 => "C3"); 
05.
		 
06.
				 
07.
		$value = "<input class=\"button\" name=".$i."\" type=\"submit\" value=".$buttons[$i]."></input>"; 
08.
	 
09.
			if ($_POST['$buttons[$i]'] =='$buttons[$i]'){ 
10.
			 
11.
				$value = "<p><img src=\"x.jpg\" alt=\"Spieler1\"></p>"; 
12.
		}	 
13.
		return ($value);		 
14.
15.
 
16.
 
Ich generiere hier die 9 Buttons und ich möchte mit einem Mausklick auf das jpg zugreifen bzw. das jpg soll den button ersetzen aber irgendwie haut das nicht hin
momentan steht in der ifanweisung if ($_POST['$buttons[$i]'] =='$buttons[$i]') aber ich habe hier nur rumgespielt also nciht direkt meckern

die buttons rufe ich am ende mit
$value.="bild(0);
$vaöie.=bild(1); usw. usw.
auf..
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...