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ß =)

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