Onlinehighscore-Tutorial

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

Kryan

Betreff: Onlinehighscore-Tutorial

BeitragMi, Mai 17, 2006 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Onlinehighscore

So...mal ein Tutorial meinerseits Very Happy

Nötige Kenntnisse:
-BlitzBasic
-HTML, PHP
-MySQL

Die Kenntnisse sind kein Muss!!! Wer wirklich daran interessiert ist, und diese "Fremdsprachen" versucht, zu verstehen, der wird auch erfolg haben Wink

1. Teil - MySQL-Datenbank anlegen

So...als erstes muss natürlich eine MySQL-Datenbank her. Die nötigen Felder belaufen sich zunächst auf id (als "Key"), name und punkte. So sieht der MySQL-Code zur Erstellung unserer Datenbank aus:
BlitzBasic: [AUSKLAPPEN]



Für die, die keine MySQL-Datenbank anlegen können (oder nicht wissen wie es geht): ladet euch apache runter Very Happy ; oder alternativ biete ich es euch an, eine Datenbank zu erstellen, und euch die Zugriffsmöglichkeiten der PHP-Schnittstelle zu übergeben.

2. Teil - Die PHP-Schnittstelle

Nun brauchen wir noch einen Übermittler zwischen MySQL und BlitzBasic (man kann es auch direkt von BlitzBasic aus machen, bin in diesem Gebiet aber nicht so bewandt). Hierbei eignet sich die Sprache PHP vorzüglich.
Als Schnittstelle braucht man nun zwei PHP-Dateien:
- Load.php
- Save.php

Load erhält von uns keine Parameter. Er dient lediglich dazu, die MySQL-Daten als eine .HTML-Datei dem BB-User zugänglich zu machen.
Save erhält nun zwei Parameter von uns: name und punkte
Der Aufruf davon geschieht so:
HTTP_GET("cultsoft.cu.ohost.de","example/save.php?name="+name$+"&punkte="+punkte)
Die Funktion HTTP_GET wird nachher (Teil 3) näher erläutert.
Unsere Load.php sieht dann folgendermaßen aus:
BlitzBasic: [AUSKLAPPEN]



MySQL_QUERY führt einen MySQL-Befehl aus. Das Limit 18 sorgt dafür, dass nur maximal 18 Einträge zurückgegeben werden. Die Tabelle fängt mit hohen Punktzahlen an und hört mit kleinen Punktzahlen auf (ORDER BY punkte DESC).
Zum Schluss wird noch das Zeichen ° eingesetzt. Es dient als Schlusszeichen, falls die Webspaceanbieter da immer noch Haufen an so nutzlosen "Ads" ranhängt Wink
Nun kommt Save.php:
BlitzBasic: [AUSKLAPPEN]


Fast genauso wie vorher, nur dass diesmal zwei Parameter "abgefangen werden:
Code: [AUSKLAPPEN]
$name = $_GET["name"];
$punkte = $_GET["punkte"];

Nun verschicken wir einen neuen Eintrag an $dbtabelle mit MYSQL_QUERY.
So viel zu der PHP-Schnittstelle

3. Teil - Zugriff mit BlitzBasic

Wie vorhin schon erwähnt, soll nun erstmal eine Funktion namens HTTP_GET erklärt werden. Erstmal die Funktion selbst:
BlitzBasic: [AUSKLAPPEN]

Function HTTP_Get(URL$, URLFile$, InFile$="")
DownloadStream = OpenTCPStream( URL$, 80 )
If Not DownloadStream Then Return 0
SENDHEADER$ = "GET /" + URLFile$ + " HTTP/1.0" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Accept: *.*, */*" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Connection: close" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Range: bytes=0-" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Host: " + URL$ + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Referer: " + URL$ + "/" + URLFile$ + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "User-Agent: BrowserName" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + Chr$(13) + Chr$(10)
WriteLine DownloadStream, SENDHEADER$
Repeat
header$ = ReadLine(DownloadStream)
Until header$ = "" Or (Eof(DownloadStream))
If InFile$ Then
ToStream = WriteFile(InFile$)
While Not Eof(DownloadStream)
WriteByte ToStream, ReadByte(DownloadStream)
Wend
End If
CloseTCPStream DownloadStream
CloseFile ToStream
Return 1
End Function


Die drei Parameter werden nun erstmal erläutert:
- URL$: Der Servername, in unserem Beispiel "cultsoft.cu.ohost.de"
- URLFile$: Der Dateiname mit dem Pfad, bei uns einmal "load.php" und "save.php?save.php?name="+name$+"&punkte="+punkte
- InFIle$: Eine temporäre Datei, die als .HTML auf dem Rechner gespeichert wird, und die notwendigen Informationen übergibt.
Hier nun ein kleines Spiel, wo es deutlich wird:
BlitzBasic: [AUSKLAPPEN]
hscs=18
name$=Input$("Name:")
Print "Drücke in den nächsten 10sek ganz häufig die Leertaste"

Delay 10000
punkte=KeyHit(57)

Print "Du hast "+punkte+" Punkte erreicht."
HTTP_GET("cultsoft.cu.ohost.de","example/save.php?name="+name$+"&punkte="+punkte)
HTTP_GET("cultsoft.cu.ohost.de","example/load.php","temp.html")
file=ReadFile("temp.html")
i=0
Repeat
i=i+1
If i>hscs Then Exit
linie$=ReadLine$(file)
DebugLog i+":"+linie$
place=Instr(linie$,"°")
If place Then
linie$=Left$(linie$,place-1)
hsname$=linie$
Exit
Else
hsname$=linie$
End If
linie$=ReadLine$(file)
DebugLog i+":"+linie$
place=Instr(linie$,"°")
If place Then
linie$=Left$(linie$,place-1)
hspunkte%=Int(linie$)
Exit
Else
hspunkte%=Int(linie$)
End If
Print "Platz "+i+": "+hsname$+" mit "+hspunkte%+" Punkten"
Forever
CloseFile file
;DeleteFile "temp.html"
Print "Um das Programm zu beenden, eine beliebige Taste drücken"
Delay 400
FlushKeys
WaitKey
End
Function HTTP_Get(URL$, URLFile$, InFile$="")
DebugLog "TEST!"
DebugLog InFIle$
DownloadStream = OpenTCPStream( URL$, 80 )
If Not DownloadStream Then Return 0
SENDHEADER$ = "GET /" + URLFile$ + " HTTP/1.0" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Accept: *.*, */*" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Connection: close" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Range: bytes=0-" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Host: " + URL$ + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "Referer: " + URL$ + "/" + URLFile$ + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + "User-Agent: BrowserName" + Chr$(13)+Chr$(10)
SENDHEADER$ = SENDHEADER$ + Chr$(13) + Chr$(10)
WriteLine DownloadStream, SENDHEADER$
Repeat
header$ = ReadLine(DownloadStream)
Until header$ = "" Or (Eof(DownloadStream))
If InFile$<>"" Then
ToStream = WriteFile(InFile$)
While Not Eof(DownloadStream)
WriteByte ToStream, ReadByte(DownloadStream)
Wend
CloseFile ToStream
End If
CloseTCPStream DownloadStream
Return 1
End Function


So viel Spaß mit diesem Wissen
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

D2006

Administrator

BeitragMi, Mai 17, 2006 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Dieses Tutorial wirkt auf mich sehr, als hättest du es geschrieben, um mal ein Tutorial geschrieben zu haben. Denn es ist SEHR lückenhaft.

Einige Kritikpunkte die ich habe:
Arrow Dein MySQL Code ist unsauber. So fehlen die `` und '' Zeichen
Arrow Du wählst überdimensionierte Variablentypen für die Datenbank
Arrow Du lässt nur 7 Zeichen als Namen zu
Arrow Du gehst nicht auf die Gefahr des MySQL Injection ein
Arrow Du hast keinen Browser Schutz drin. Jeder Klient kann, ohne Spiel, neue Highscore Einträge absetzen
Arrow Im Header gibst du die aufzurufende Seite als Referrer an und vergisst die Content-length
Arrow Du gehst kein Stück auf irgendwelche Cheatschutz Varianten ein. Wenigstens einen Lösungsansatz des vor einigen Wochen beredeten Problems, dass man mithilfe illegaler Programme während der Laufzeit die Punktezahl eines Spiel verändern kann, hätte ich mir erwünscht

Alles in allem kannst du dich wahrscheinlich auf einige "Cheater Attacken" für dein aktuelles Spiel gefasst machen, wo du doch gar keinen Schutz drin hast.

MfG
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group