Hangman

Mich überkam die Langeweile und da bin ich auf die Idee gekommen mal schnell ein kleines Hangman Spiel zu coden 😉
Ist nichts besonderes, aber vielleicht braucht ja der ein oder andere eine Anregung wie man so was realisieren könnte.
Das ganze ist in Delphi geschrieben und kann bestimmt noch optimiert werden. Kommentare gibt es nicht, da es einfach genug zu verstehen sein sollte.
Eine Datei “datenbank.txt” muss erstellt werden, in der die Wörter eingetragen werden.

unit Unit1;
interface
uses
Windows, SysUtils, Classes, Graphics, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls, Controls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Datei1: TMenuItem;
Start1: TMenuItem;
Beenden1: TMenuItem;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Label4: TLabel;
procedure Beenden1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Start1Click(Sender: TObject);
procedure zeigeChar(Buchstabe: char);
procedure setLoesungswort;
procedure drawHangman;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
Button: array[1..26] of TButton;
procedure disableButton(Sender:TObject);
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
Loesungswort: string;
LoesungswortList: Tstringlist;
DateiEintraege: integer;
FehlVersuche: integer;
f: text;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
help: string;
begin
RANDOMIZE;
Canvas.Pen.Width := 3;
Canvas.Pen.Color := clRed;
DateiEintraege := 0;
FehlVersuche := 0;
loesungswortlist := TStringList.Create;
if fileexists('datenbank.txt') then
begin
Assignfile(f,'datenbank.txt');
Reset(f);
while not Eof(f) do
begin
inc(DateiEintraege);
ReadLn(f, help);
loesungswortlist.Add(help);
end;
CloseFile(f);
end;
for i:=1 to 26 do
begin
Button[i]:=Tbutton.Create(Form1);
Button[i].Parent:=Form1;
Button[i].Caption:=chr(64+i);
Button[i].OnClick:=disableButton;
end;
for i:=1 to 13 do
Button[i].SetBounds(-10+i*41,360,41,41);
for i:=14 to 26 do
Button[i].SetBounds(-10+(i-13)*41,400,41,41);
setLoesungswort;
End;
procedure TForm1.disableButton(Sender:TObject);
begin
TButton(Sender).visible := false;
zeigeChar(TButton(Sender).Caption[1]);
end;
procedure TForm1.zeigeChar(Buchstabe: char);
var
I,J: integer;
labeltext: string;
help: boolean;
begin
setLength(labeltext,length(Loesungswort));
help := false;
for I:= 1 to length(Loesungswort) do
begin
if (Loesungswort[I] = Buchstabe) then
begin
help := true;
labeltext := Label1.Caption;
labeltext[I] := Buchstabe;
label1.Caption := labeltext;
end
else if Loesungswort[I] = chr(ord(Buchstabe)+32) then
begin
help := true;
labeltext := Label1.Caption;
labeltext[I] := chr(ord(Buchstabe)+32);
label1.Caption := labeltext;
end
end;
if help = false then
inc(FehlVersuche);
drawHangman;
end;
procedure TForm1.drawHangman;
begin
case FehlVersuche of
1: begin
Canvas.MoveTo(200,250);
Canvas.LineTo(250,200);
end;
2: Canvas.LineTo(300,250);
3: begin
Canvas.MoveTo(250,200);
Canvas.LineTo(250,50);
end;
4: Canvas.LineTo(375,50);
5: Canvas.LineTo(375,100);
6: Canvas.LineTo(325,150);
7: begin
Canvas.MoveTo(375,100);
Canvas.LineTo(425,150);
end;
8: begin
Canvas.MoveTo(375,100);
Canvas.LineTo(375,175);
end;
9: Canvas.LineTo(325,225);
10:begin
Canvas.MoveTo(375,175);
Canvas.LineTo(425,225);
end;
end;
if FehlVersuche < 10 then
begin
if label1.Caption = Loesungswort then
showmessage('Gewonnen');
end
else
begin
showmessage('Verloren');
setLoesungswort;
end;
end;
procedure TForm1.setLoesungswort;
var
I: integer;
begin
Repaint;
Loesungswort := loesungswortlist[Random(DateiEintraege)];
Label1.Caption := '';
FehlVersuche := 0;
for i:=1 to 26 do
Button[I].visible := true;
for I := 1 to length(Loesungswort) do
Label1.Caption := Label1.Caption + '#';
Label3.Caption:=inttostr(length(Loesungswort));
end;
procedure TForm1.Beenden1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Char(VK_RETURN) then
if Edit1.Text = Loesungswort then
showmessage('Gewonnen!')
else
begin
showmessage('Falsch!');
inc(FehlVersuche);
drawHangman;
end;
end;
procedure TForm1.Start1Click(Sender: TObject);
begin
setLoesungswort;
end;
end;

Alles kann frei und ohne Einschränkungen verwendet werden von mir aus auch für kommerzielle Zwecke 😀

Hier noch der Formcode (ALT + F12)

object Form1: TForm1
<pre> Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 458
ClientWidth = 587
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 40
Top = 270
Width = 6
Height = 25
Color = clWhite
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
Transparent = True
end
object Label2: TLabel
Left = 435
Top = 270
Width = 129
Height = 13
Caption = 'Anzahl der Buchstaben'
Color = clNone
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
Transparent = True
end
object Label3: TLabel
Left = 490
Top = 290
Width = 5
Height = 19
Color = clNone
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
Transparent = True
end
object Label4: TLabel
Left = 40
Top = 307
Width = 55
Height = 13
Caption = 'Vorschlag'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
Transparent = True
end
object Edit1: TEdit
Left = 101
Top = 304
Width = 121
Height = 21
TabOrder = 0
OnKeyPress = Edit1KeyPress
end
object MainMenu1: TMainMenu
Left = 32
Top = 16
object Datei1: TMenuItem
Caption = 'Datei'
object Start1: TMenuItem
Caption = 'N'#228'chstes Wort'
OnClick = Start1Click
end
object Beenden1: TMenuItem
Caption = 'Beenden'
OnClick = Beenden1Click
end
end
end
end

 

Pacman 3D [Update 2]

Das Gemeinschaftsprojekt Pacman 3D von x23b5 und mir ist weiter voran geschritten. Die Performance wurde verbessert und eine Minimap zur besseren Orientierung wurde eingefügt.
Die erste spielbare Version könnt ihr hier herunterladen.

Spiel:
– die Steuerung funktioniert ähnlich wie in CS: Bewegungen mit W, A, S und D
– um ein Spiel zu starten, muss einfach über “Map” und “Öffnen” eine Map geladen werden (Das Menü erreicht man mit ALT)
– nach dem Aufsammeln einer roten Pille, lassen sich mit der linken Maustaste Kugeln abfeuern

Viel Spaß =)

Test: Walkabout

Getestete Version: Walkabout 1.00 auf Samsung Galaxy mit Gaosp (Android 2.2)

Kategorie: Rätsel & Denksport
Verwendbar ab: Android 1.6
Größe: ~5 MB
Preis: 0,69 €
Apps2SD: Ja

Kurzbeschreibung

Heute will ich euch eine ganz neue App vorstellen. Oder besser gesagt ein Spiel.
Es ist eine Art Rätsel & Denksport Spiel. Man steuert Spieler, welche sich auf einer Map bewegen und alle Sterne einsammeln müssen. Die Schwierigkeit besteht darin, dass Felder, welche einmal berührt wurden sofort verschwinden. Daher muss genau überlegt werden, wie das jeweilige Level zu absolvieren ist.

Spielspaß & Bedienung  *****

Wer sein Gehirn auf Trab halten will sollte Walkabout unbedingt testen.

Die Schwierigkeit steigt von Level zu Level und immer es kommen neue Items hinzu, sodass es nie langweilig wird.
Einige Level bestehen aus bis zu 5 Etagen um die Schwierigkeit in späteren Leveln zusätzlich zu erhöhen.
Zudem erhält man 1-3 Sterne pro absolviertem Level, sodass man sich stetig verbessern will.
In einigen Leveln gibt es versteckte Schlüssel, welche zusätzliche Bonuslevel freischalten.

Die Bedienung erfolgt per Touchscreen. Durch wischen in eine Richtung läuft der Spieler in diese.
Außerdem gibt es an der Seite ein Menü um zu zoomen, zwischen Spielern zu wechseln und die Standardfunktionen wie Pause, Restart und Home.

Es mach unheimlich Spaß Walkabout zu spielen. Hier noch ein kleines Video für einen Einblick in die ersten Level.

Grafik & Sound  *****

Die Grafik ist im Comic Stil und passt perfekt zu diesem Spiel. Auch die Sounds sind gut und passend.
Sogar Tablets werden unterstützt, denn dafür bring das Spiel extra Grafiken in hoher Auflösung mit.

Speed & Stabilität  ****

Getestet habe ich das Spiel mit meinem Samsung Galaxy. Es läuft relativ flüssig und stürzte nicht ein mal ab. Lediglich in den komplexen Leveln kann es zu kleineren Rucklern kommen, welche aber den Spielfluss nicht stören. Da das Galaxy eines der ersten Android Handys ist, ist das durchaus zu verkraften. Auf neueren Androiden sollte es ohne jegliche Probleme sehr flüssig laufen.

Preis / Leistung  *****

72 Level voller Spaß und Denken für gerade mal 1,00€ ist super. Zusätzlich soll es noch weitere Levels per Update geben.

Walkabout ist für 0,69€ im Android Market zu erhalten. Eine kostenlose Demo steht ebenfalls zur Verfügung.

Fazit  *****

Absolute Kaufempfehlung! Vor allem Knobel Fans werden auf Ihre Kosten kommen 😉

Pacman 3D [Update 1]

Das Gemeinschaftsprojekt von x23b5 und mir ist weiter voran geschritten. Die Ghosts (Computergegenspieler) wurden implementiert und durch die Powerups ist es nun möglich diese nicht wie in der Classic-Version aufzufressen sondern abzuschießen. Außerdem wurden Sounds eingebaut und das Userinterface verbessert. Auch ist ein Splashscreen dazugekommen. Ab jetzt arbeiten wir an noch zu behebenden Performanceproblemen bei älteren Grafikkarten und den restlichen geplanten Erweiterungen, wie einer Minimap und Nebel / Partikeleffekten.

Pacman 3D

Zusammen mit meinem Kumpel x23b5 bin ich zur Zeit dabei im Rahmen eines Projektes im Informatikunterricht Pacman um eine Dimension zu erweitern 😉

Bis jetzt kann man sich eigene Maps erstellen und in diesen alle Credits einsammeln. Außerdem gibt es auch schon einige PowerUps (rot). In den kommenden Tagen/Wochen werden noch die Geister und vieles mehr eingefügt wie z.B. ein Rückspiegel^^ und eine Minimap. Realisiert wird das ganze in OpenGL.

Stay tuned