Hi Community,
zur Zeit habe ich ein größeres Projekt am laufen und zwar das Spiel - "Knoblix".
Mitarbeiter: .. tim ..
Sourcecode: Freigegeben (liegt der Betaversion bei)
Entwicklungsstatus: - Beta Version 1.0.1 Veröffentlicht
- Game: ɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪ 88%
- Editor: ɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪɪ 100%
Zum Spiel:
Der Spieler hat seine Spielfigur, mit der er ein kleines oder mal größeres "Labyrinth" durchqueren muss. Jedoch nicht einfach nur vom Einen Ende zum Anderen, sondern dabei müssen gewisse Dinge erledigt werden ( wie z.B. das Einsammeln von Münzen, Schlüsseln usw). Durch Einsammeln von Schlüsseln lässt sich so z.B. erst der nächste Teil eines Labyrinths "aufsperren" und es kann weiter gespielt werden. Ein Hauptziel in jedem Labyrinth ist es, alle Münzen zubekommen. Diese liegen jedoch nicht einfach so irgendwo verteilt, sondern es muss erst durch das geschickte Verschieben von "Truhen/Boxen" ein Weg freigemacht werden.
Zu den Gegenständen:
- [Blockierte Grafik: http://img-up.net/img/baummE9NLXd.gif] Baum: Begrenzung
- [Blockierte Grafik: http://img-up.net/img/boxf9zx0g.gif] Truhe/Box: versterrt dem Spieler den Weg
- [Blockierte Grafik: http://img-up.net/img/eis2ZboUdp.gif] Eis: Der Spieler kann seine Spielfigur nicht mehr lenken und rutscht zum nächsten "begehbaren"-Feld
- [Blockierte Grafik: http://img-up.net/img/lochktEBp.gif] Loch/Falle: Der Spieler fällt hinein, hat der nicht zuvor eine Truhe/Box daraufgeschoben
- [Blockierte Grafik: http://img-up.net/img/schloss1qGxYMnn.gif] [Blockierte Grafik: http://img-up.net/img/schloss2b6TTM4.gif] [Blockierte Grafik: http://img-up.net/img/schloss3XoZcfupX.gif] Schloss: Verspeert dem Spieler den Weg - Es muss erst der passende Schlüssel gefunden werden.
- [Blockierte Grafik: http://img-up.net/img/schl_ssel1IIycLvjn.gif] [Blockierte Grafik: http://img-up.net/img/schl_ssel290uJoZ.gif] [Blockierte Grafik: http://img-up.net/img/schl_ssel3cRSlf.gif] Schlüssel: Öffnet ein Schloss in der Farbe des Schüssels
- [Blockierte Grafik: http://img-up.net/img/sanduhrnS4YTOT.gif] Sanduhr: Sind alle Münzen eingesammlt, kann hier das nächste Level gestartet werden
- [Blockierte Grafik: http://img-up.net/img/figur_l2rksl.gif] Spielfigur
Funktionen:
Spoiler anzeigen
--------------------------------------
Grün: Fertiggestellt
Orange: In Bearbeitung
Rot: Noch nicht Fertiggestellt
--------------------------------------
> Grundlegende Steuerfunktionen:
- Laufen
- Münzen einsammeln
- Boxen verschieben
- Eis - "Rutschen"
- Schlösser
- Schlüssel
- Loch/Falle
- Sanduhr
- Bäume
> Spielmodi:
- (Leicht)
- Normal
- Schwer
- Extrem
> Einstellungen:
- Musiksteuerung [An/Aus][Tracks 1-3 auswählen]
- Spielernamen eintragen
> Karten / Level:
- Erstellen
- Erstellen nach erfolgreichem Beenden einer Karte
- Neustart einer Karte
> Passwörter:
- Eingeben um auf eine bestimmte Karte zu gelangen
- Generieren für jede Karte
> Bestenliste:
- Erstellen
- Anzeigen
- Den Spieler Punkte eintragen lassen
- Spieler in Online-Bestenliste eintragen
> Sonstiges:
- Hacksicherung
- Design überarbeiten
Die verschiedenen Spielmodi:
- (nur Angedacht: Leicht: - Möglichkeit, Kisten zu entfernen)
- Normal: keine Einschränkungen, unendlich viele Schritte
- Schwer: Begrenzte Anzahl an "Schritten"
- Extrem: Es wird gegen Zeit gespielt + begrenzte Anzhal an Schritten
Spiel-Ansicht: Stand 28-April
> Unten im braunen Spielfeldrand fehlt noch einiges (= z.Z. in Arbeit)
> (Game-Design ist vorerst nebensächlich - Zuerst werden alle Funktionen erstellt und dann kommt das Design)
[Blockierte Grafik: http://img-up.net/img/Knoblix_1Rqr4wM.JPG]
Mapeditor-Ansicht: Stand 5-Mai
Im Mapeditor können Karten erstellt werden, die später im Spiel gespielt werden können. Am rechten Rand befindet sich ein Fenster, indem alle "Models" - Gegenstände, Hindernisse usw. - aufgelistet sind. Durch Anklicken wird das entsprechende Model ausgewählt und kann nun im Spielfeld platziert werden.
[Blockierte Grafik: http://img-up.net/img/knoblix_maEKsTLj6N.JPG]
> Linke Maustaste - Erstellen eines Model im Spielfeld im geklickten Feld
> Linke Maustaste (länger gedrückt) - Durch gedrückt lassen der Taste kann schnell eine Linie aus den Models gezogen werden
> Rechte Maustaste - Löschen des zuletzt, erstellten Models
> Rechte Maustaste (länger gedrückt) - Durch gedrückt lassen der Taste werden zuletzt, erstellte Models nach der Reihenfolge derer Erstellung gelöscht
Funktionen:
Spoiler anzeigen
--------------------------------------
Grün: Fertiggestellt
Orange: In Bearbeitung
Rot: Noch nicht Fertiggestellt
--------------------------------------
> Grundlegende Funktionen:
- Bilder erstellen
- Bilder löschen
- Models auswählen
- Code generieren
Mapeditoren Codes:
Spoiler anzeigen
Achtung! Die Bilder werden auch benötigt!
Version 1.1 - Verbesserte Version 1.0 von bernd670:
[autoit];****************************************************
;
; Script: Mapeditor zum Spiel Knoblix
; Version: 1.0
; Author: Jautois
; Improved by: bernd670 - Thanks!
;
;****************************************************
#include <GUIListBox.au3>
#include <GuiConstantsEx.au3>
#include <Misc.au3>
#include <Timers.au3>
$dll = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{F5}", "GenerateLevelCode")
[/autoit] [autoit][/autoit] [autoit]Dim $listnames[15] = ["Baum - [Begrenzung]", _
"Münze - [Gegenstand]", _
"Münze/Eis - [Gegenstand]", _
"Box - [Hindernis]", _
"Eis - [Umbegbung]", _
"Falle - [Hindernis]", _
"Schloss Rot - [Hindernis]", _
"Schloss Blau - [Hindernis]", _
"Schloss Grün - [Hindernis]", _
"Schlüssel Rot - [Gegenstand]", _
"Schlüssel Blau - [Gegenstand]", _
"Schlüssel Grün - [Gegenstand]", _
"Spieler/Startposition - [System]", _
"Sanduhr/Gewinnzone - [System]", _
"Leer - [System]"]
Dim $listpaths[15] = ["baum.gif", _
"münze.gif", _
"münze_eis.gif", _
"box.gif", _
"eis.gif", _
"loch.gif", _
"schloss2.gif", _
"schloss3.gif", _
"schloss1.gif", _
"schlüssel2.gif", _
"schlüssel3.gif", _
"schlüssel1.gif", _
"figur.gif", _
"sanduhr.gif", _
"raster.bmp"]
Dim $listcodes[15] = [0, 7, 8, 6, 4, 5, "d", "e", "f", "a", "b", "c", 1, 3, 2]
[/autoit] [autoit][/autoit] [autoit]Dim $wand_pic[102], $cur_pic[330], $idlist[330], $cur_pic_counter = 1, $wand_counter = 0, $codesave[18][24], $pfad = "images\baum.gif", $selecteditem = 0, $pos_x = 0, $pos_y = 0, $win_title = "Knoblix - Mapeditor"
Global $mapname
$game_window = GUICreate($win_title, 960, 740)
GUISetBkColor(0x8da62b)
$menu = GUICtrlCreateMenu("Karte")
$menu_mapname = GUICtrlCreateMenuItem("Name", $menu)
$menu_codegen = GUICtrlCreateMenuItem("Code Generieren", $menu)
$menu_credits = GUICtrlCreateMenu("Credits")
$menu_credits_coderver = GUICtrlCreateMenuItem("Coder / Version", $menu_credits)
$menu_help = GUICtrlCreateMenu("Hilfe")
$menu_help_general = GUICtrlCreateMenuItem("Allgemein", $menu_help)
For $i = 0 To 17
For $k = 0 To 23
If $i > 0 And $i < 16 And $k < 23 And $k > 0 Then
$cur_pic[($i - 1) * 22 + ($k - 1)] = GUICtrlCreatePic("images\raster.bmp", $pos_x, $pos_y, 40, 40)
$codesave[$i][$k] = 2
Else
$wand_pic[$wand_counter] = GUICtrlCreatePic("images\wand.gif", $pos_x, $pos_y, 40, 40)
$wand_counter += 1
$codesave[$i][$k] = 9
EndIf
$pos_x += 40
Next
$pos_y += 40
$pos_x = 0
Next
GUISetState(@SW_SHOW, $game_window)
[/autoit] [autoit][/autoit] [autoit]$winpos = WinGetPos($win_title)
$editor_window = GUICreate("Models", 251, 230, $winpos[0] + $winpos[2] + 10, $winpos[1])
$itemlist = GUICtrlCreateList("", 8, 8, 235, 215)
GUISetState(@SW_SHOW, $editor_window)
_GUICtrlListBox_BeginUpdate($itemlist)
For $i = 0 To UBound($listnames) - 1
_GUICtrlListBox_AddString($itemlist, StringFormat("s : " & $listnames[$i], $i + 1))
Next
_GUICtrlListBox_EndUpdate($itemlist)
GUISwitch($game_window)
[/autoit] [autoit][/autoit] [autoit]While 1
If _IsPressed("02", $dll) And WinActive($win_title) Then
$cur_mousepos = GUIGetCursorInfo($game_window)
Working($cur_mousepos[0], $cur_mousepos[1], 15)
EndIf
If _IsPressed("01", $dll) And WinActive($win_title) Then
$cur_mousepos = GUIGetCursorInfo($game_window)
Working($cur_mousepos[0], $cur_mousepos[1], $selecteditem)
EndIf
$nMsg = GUIGetMsg(1)
Select
Case $nMsg[0] = $GUI_EVENT_CLOSE
If $nMsg[1] = $game_window Or $nMsg[1] = $editor_window Then
If MsgBox(36, "", "Beenden?") = 6 Then Exit
EndIf
Case $nMsg[0] = $itemlist
$selecteditem = _GUICtrlListBox_GetCurSel($itemlist)
$getlisttext = _GUICtrlListBox_GetText($itemlist, $selecteditem)
$pfad = "images\" & $listpaths[$selecteditem]
Case $nMsg[0] = $menu_codegen
GenerateLevelCode()
Case $nMsg[0] = $menu_mapname
MapName()
Case $nMsg[0] = $menu_credits_coderver
MsgBox(64, "Coder - Info", "Copyright by Jautois" & @CRLF & "Verbesserungen: bernd670" & @CRLF & @CRLF & "Version: 1.1")
Case $nMsg[0] = $menu_help_general
MsgBox(64, "Hilfe", "Model platzieren:" & @CRLF & "- Model auswählen und mit der linken Maustaste im Editorfeld platzieren (Mehrere: gedrückt halten + auf ein Feld bewegen)" & @CRLF & @CRLF & "Model löschen:" & @CRLF & " - Rechte Maustaste auf das Feld")
EndSelect
WEnd
Func Working($func_x = 0, $func_y = 0, $func_select = "")
If $func_x > 39 And $func_x < 920 And $func_y > 39 And $func_y < 640 Then
$pos_x = Int(Floor($func_x / 40))
$pos_y = Int(Floor($func_y / 40))
GUISwitch($game_window)
If $func_select = 15 Then
GUICtrlSetImage($cur_pic[($pos_y - 1) * 22 + ($pos_x - 1)], "images\raster.bmp")
$codesave[$pos_y][$pos_x] = $listcodes[14]
Else
GUICtrlSetImage($cur_pic[($pos_y - 1) * 22 + ($pos_x - 1)], $pfad)
$codesave[$pos_y][$pos_x] = $listcodes[$func_select]
EndIf
EndIf
EndFunc ;==>Working
Func GenerateLevelCode()
$filepath = FileSaveDialog("Karte speichern unter ...", @ScriptDir, "Knoblix-Karten (*.kmp)", 2, "Karte-")
If @error Then Return
If $mapname = "" Then
Do
MapName()
Until $mapname <> ""
EndIf
If StringRight($filepath, 4) <> ".kmp" Then $filepath &= ".kmp"
$file = FileOpen($filepath, 2)
FileWrite($filepath, "Kartenname: " & $mapname & @CRLF)
For $i = 1 To 18
For $k = 0 To 23
If $k = 23 Then
FileWrite($filepath, $codesave[$i - 1][$k] & @CRLF)
Else
FileWrite($filepath, $codesave[$i - 1][$k])
EndIf
Next
Next
FileClose($file)
EndFunc ;==>GenerateLevelCode
Func MapName()
$inputstr = InputBox("Kartenname", "Geben Sie einen Kartennamen ein:")
If @error = 0 And $inputstr <> "" Then
$mapname = $inputstr
Else
MsgBox(64, "Error", "Keine gültige Eingabe!", 2)
EndIf
EndFunc ;==>MapName
Version 1.0:
[autoit];****************************************************
;
; Script: Mapeditor zum Spiel Knoblix
; Version: 1.0
; Author: Jautois
;
;****************************************************
#include <GUIListBox.au3>
#include <GuiConstantsEx.au3>
#include <Misc.au3>
#include <Timers.au3>
$dll = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{F5}", "GenerateLevelCode")
[/autoit] [autoit][/autoit] [autoit]Dim $listnames[15] = ["Baum - [Begrenzung]", _
"Münze - [Gegenstand]", _
"Münze/Eis - [Gegenstand]", _
"Box - [Hindernis]", _
"Eis - [Umbegbung]", _
"Falle - [Hindernis]", _
"Schloss Rot - [Hindernis]", _
"Schloss Blau - [Hindernis]", _
"Schloss Grün - [Hindernis]", _
"Schlüssel Rot - [Gegenstand]", _
"Schlüssel Blau - [Gegenstand]", _
"Schlüssel Grün - [Gegenstand]", _
"Spieler/Startposition - [System]", _
"Sanduhr/Gewinnzone - [System]", _
"Leer - [System]"]
Dim $listpaths[15] = ["baum.gif", _
"münze.gif", _
"münze_eis.gif", _
"box.gif", _
"eis.gif", _
"loch.gif", _
"schloss2.gif", _
"schloss3.gif", _
"schloss1.gif", _
"schlüssel2.gif", _
"schlüssel3.gif", _
"schlüssel1.gif", _
"figur.gif", _
"sanduhr.gif", _
"leer.bmp"]
Dim $listcodes[15] = [0, 7, 8, 6, 4, 5, "d", "e", "f", "a", "b", "c", 1, 3, 2]
[/autoit] [autoit][/autoit] [autoit]Dim $wand_pic[1], $cur_pic[330], $idlist[330], $cur_pic_counter = 1, $working = 1, $wand_counter = 0, $emptyarea_counter = 0, $emptyarea_pic[1], $codesave[18][24], $pfad = "images\baum.gif", $selecteditem = 0, $pos_x = 0, $pos_y = 0, $win_title = "Knoblix - Mapeditor"
Global $mapname
$game_window = GUICreate($win_title, 960, 740)
GUISetBkColor(0x8da62b)
$menu = GUICtrlCreateMenu("Karte")
$menu_mapname = GUICtrlCreateMenuItem("Name", $menu)
$menu_codegen = GUICtrlCreateMenuItem("Code Generieren", $menu)
$menu_credits = GUICtrlCreateMenu("Credits")
$menu_credits_coderver = GUICtrlCreateMenuItem("Coder / Version", $menu_credits)
$menu_help = GUICtrlCreateMenu("Hilfe")
$menu_help_general = GUICtrlCreateMenuItem("Allgemein",$menu_help)
For $i = 0 To 17
For $k = 0 To 23
If $i > 0 And $i < 16 And $k < 23 And $k > 0 Then
$emptyarea_pic[$emptyarea_counter] = GUICtrlCreateGraphic($pos_x, $pos_y, $pos_x, $pos_y)
GUICtrlSetColor(-1, 0)
$emptyarea_counter += 1
ReDim $emptyarea_pic[$emptyarea_counter + 1]
$codesave[$i][$k] = 2
Else
$wand_pic[$wand_counter] = GUICtrlCreatePic("images\wand.gif", $pos_x, $pos_y, 40, 40)
$wand_counter += 1
ReDim $wand_pic[$wand_counter + 1]
$codesave[$i][$k] = 9
EndIf
$pos_x += 40
Next
$pos_y += 40
$pos_x = 0
Next
GUISetState(@SW_SHOW, $game_window)
[/autoit] [autoit][/autoit] [autoit]$winpos = WinGetPos($win_title)
$editor_window = GUICreate("Models", 251, 230, $winpos[0] + $winpos[2] + 10, $winpos[1])
$itemlist = GUICtrlCreateList("", 8, 8, 235, 215)
GUISetState(@SW_SHOW, $editor_window)
_GUICtrlListBox_BeginUpdate($itemlist)
For $i = 0 To UBound($listnames) - 1
_GUICtrlListBox_AddString($itemlist, StringFormat("s : " & $listnames[$i], $i + 1))
Next
_GUICtrlListBox_EndUpdate($itemlist)
GUISwitch($game_window)
[/autoit] [autoit][/autoit] [autoit]While 1
If _IsPressed("02", $dll) And WinActive($win_title) And $working = 1 Then
Delete($cur_pic_counter)
EndIf
If _IsPressed("01", $dll) And WinActive($win_title) And $working = 1 Then
$cur_mousepos = GUIGetCursorInfo($game_window)
Working($working, $cur_mousepos[0], $cur_mousepos[1], $selecteditem)
EndIf
$nMsg = GUIGetMsg(1)
Select
Case $nMsg[0] = $GUI_EVENT_CLOSE
If $nMsg[1] = $game_window Or $nMsg[1] = $editor_window Then
If MsgBox(36, "", "Beenden?") = 6 Then Exit
EndIf
Case $nMsg[0] = $itemlist
$selecteditem = _GUICtrlListBox_GetCurSel($itemlist)
$getlisttext = _GUICtrlListBox_GetText($itemlist, $selecteditem)
$pfad = "images\" & $listpaths[$selecteditem]
$working = 1
Case $nMsg[0] = $menu_codegen
GenerateLevelCode()
Case $nMsg[0] = $menu_mapname
MapName()
Case $nMsg[0] = $menu_credits_coderver
MsgBox(64, "Coder - Info", "Copyright by Jautois" & @CRLF & "Version: 1.0")
Case $nMsg[0] = $menu_help_general
MsgBox(64, "Help", "Model platzieren:" & @CRLF & "- Model auswählen und mit der linken Maustaste im Editorfeld platzieren (Mehrere: gedrückt halten + auf ein Feld bewegen)" & @CRLF & @CRLF & "Model löschen:" & @CRLF & " - Rechte Maustaste um Models einzeln zu löschen (Mehrere: gedrückt halten)")
EndSelect
WEnd
Func Working($func_status = 0, $func_x = 0, $func_y = 0, $func_select = "")
If $func_status = 1 Then
If $func_x > 39 And $func_x < 921 And $func_y > 39 And $func_y < 641 Then
$func_temp_x = $func_x
Do
$func_temp_x -= 1
$temp_x = Mod(Round(Floor(($func_temp_x / 40) * 40), 0), 40)
Until $temp_x = 0
$func_temp_y = $func_y
Do
$func_temp_y -= 1
$temp_y = Mod(Round(Floor(($func_temp_y / 40) * 40), 0), 40)
Until $temp_y = 0
GUISwitch($game_window)
$cur_pic[$cur_pic_counter] = GUICtrlCreatePic($pfad, $func_temp_x, $func_temp_y, 40, 40)
$idlist[$cur_pic_counter] = ($func_temp_x / 40) & "|" & ($func_temp_y / 40)
$codesave[$func_temp_y / 40][$func_temp_x / 40] = $listcodes[$func_select]
$working = 0
$cur_pic_counter += 1
EndIf
EndIf
Debug()
EndFunc ;==>Working
Func Debug()
$working = 0
Local $starttime = _Timer_Init()
Do
Until (_Timer_Diff($starttime) / 1000) > 0.4
$working = 1
EndFunc ;==>Debug
Func GenerateLevelCode()
$path = FileSaveDialog("Karte speichern unter ...", @ScriptDir, "Knoblix-Karten (*.kmp)", 2, "Karte-")
If @error = 1 Then
Else
If $mapname = "" Then
Do
MapName()
Until $mapname <> ""
EndIf
$filepath = $path & ".kmp"
$file = FileOpen($filepath, 2)
FileWrite($filepath, "Kartenname: " & $mapname & @CRLF)
For $i = 1 To 18
For $k = 0 To 23
If $k = 23 Then
FileWrite($filepath, $codesave[$i - 1][$k] & @CRLF)
Else
FileWrite($filepath, $codesave[$i - 1][$k])
EndIf
Next
Next
FileClose($file)
EndIf
EndFunc ;==>GenerateLevelCode
Func MapName()
$inputstr = InputBox("Kartenname", "Geben Sie einen Kartennamen ein:")
If @error = 0 And $inputstr <> "" Then
$mapname = $inputstr
Else
MsgBox(64, "Error", "Keine gültige Eingabe!", 2)
EndIf
EndFunc ;==>MapName
Func Delete($func_count)
GUICtrlDelete($cur_pic[$func_count - 1])
$splitid = StringSplit($idlist[$func_count - 1], "|")
If Not @error Then
$codesave[$splitid[2]][$splitid[1]] = 2
$cur_pic[$func_count - 1] = ""
Else
If $func_count <> 1 Then
MsgBox(64, "Error", "Fehler beim Rücksetzten der Variablen" & @CRLF & @CRLF & "Fehlernummer: 0x" & @error & @ScriptLineNumber & @CRLF & @CRLF & "Der Levelcode ist nun ungültig!")
EndIf
EndIf
If $cur_pic_counter > 1 Then $cur_pic_counter -= 1
Debug()
EndFunc ;==>Delete
Bugliste zur Beta 1.0.1:
Spoiler anzeigen
- Löcher/Münzen werden teilweise beim Neustart eines Levels nicht richtig gesetzt - Level 4 (Danke an Canon10)
Wenn ihr noch Ideen habt könnt ihr diese natürlich gerne schreiben.
Lg Jautois