AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Vier Gewinnt Anfängerbeispiel
Thema durchsuchen
Ansicht
Themen-Optionen

Vier Gewinnt Anfängerbeispiel

Ein Thema von boozzz · begonnen am 1. Apr 2005 · letzter Beitrag vom 2. Apr 2005
Antwort Antwort
boozzz

Registriert seit: 14. Feb 2005
13 Beiträge
 
#1

Re: Vier Gewinnt Anfängerbeispiel

  Alt 2. Apr 2005, 10:35
Vielen Dank für eure Hilfe
Ich hab jetzt mal die Fehler von Binärbaum und Wuaegner korrigiert, stoße aber immer noch auf fünf Fehler :
(habe die Fehlermeldungen in die entsprechende Programmzeile kopiert, wäre klasse wenn ihr euch das nochmal anschauen könntet)



Code:
program VierGewinnt7;

{$APPTYPE CONSOLE}    //Ausgabe auf Konsole

uses
  SysUtils,
  System;

var AktuellesBrett: array[1..7, 1..6] of Integer;
var ergebnisliegtvor: Boolean;
var gewinner: String;
var i, Q, P: Integer;    //i=Z�lvariable; Q=Spalte des Spielers; P=Spalte des Computers
var spalte1, spalte2, spalte3, spalte4, spalte5, spalte6, spalte7: Integer;
    //Hier wird gespeichert, wieviele Steine bereits in der jeweiligen Spalte sind

const breite=7;
      hoehe=6;


procedure eingangsabfrage; //Unterprogramm zur Abfrage der Eing�ge
begin
//der Spieler wirft seinen Stein in Spalte Q. (0<Q<8)
//zum testen nehmen wir an, der Spieler wirft seinen Stein in Feld 3:
Q:=3
end;


procedure brettanalyse;
var x, y: Integer;

begin
  if i=0 then
    for x:=1 to breite do
      for y:=1 to hoehe do
        AktuellesBrett[x,y]:=0        //Am Anfang des Spiels wird das Array mit Nullen gefllt

  else
    if Q=1 then                      //Wenn Spieler in die erste Spalte wirft..
      case spalte1 of
        0: AktuellesBrett[Q,1]:=3;  //..wird berprft, wieviele Steine sich dort befinden und dementsprechend gesetzt.
        1: AktuellesBrett[Q,2]:=3;
        2: AktuellesBrett[Q,3]:=3;
        3: AktuellesBrett[Q,4]:=3;
        4: AktuellesBrett[Q,5]:=3;
        5: AktuellesBrett[Q,6]:=3;
        6: WriteLn ('Spalte 1 ist leider schon voll. Spielzug wird nicht angerechnet!');
      end;
      spalte1:=spalte1+1;
    if Q=2 then                      //Wenn Spieler in die zweite Spalte wirft..
      case spalte2 of
        0: AktuellesBrett[Q,1]:=3;  //..wird berprft, wieviele Steine sich dort befinden und dementsprechend gesetzt.
        1: AktuellesBrett[Q,2]:=3;
        2: AktuellesBrett[Q,3]:=3;
        3: AktuellesBrett[Q,4]:=3;
        4: AktuellesBrett[Q,5]:=3;
        5: AktuellesBrett[Q,6]:=3;
        6: WriteLn ('Spalte 2 ist leider schon voll. Spielzug wird nicht angerechnet!');
      end;
      spalte2:=spalte2+1;
    if Q=3 then                      //Wenn Spieler in die dritte Spalte wirft..
      case spalte3 of
        0: AktuellesBrett[Q,1]:=3;  //..wird berprft, wieviele Steine sich dort befinden und dementsprechend gesetzt.
        1: AktuellesBrett[Q,2]:=3;
        2: AktuellesBrett[Q,3]:=3;
        3: AktuellesBrett[Q,4]:=3;
        4: AktuellesBrett[Q,5]:=3;
        5: AktuellesBrett[Q,6]:=3;
        6: WriteLn ('Spalte 3 ist leider schon voll. Spielzug wird nicht angerechnet!');
      end;
      spalte3:=spalte3+1;
    if Q=4 then                      //Wenn Spieler in die vierte Spalte wirft..
      case spalte4 of
        0: AktuellesBrett[Q,1]:=3;  //..wird berprft, wieviele Steine sich dort befinden und dementsprechend gesetzt.
        1: AktuellesBrett[Q,2]:=3;
        2: AktuellesBrett[Q,3]:=3;
        3: AktuellesBrett[Q,4]:=3;
        4: AktuellesBrett[Q,5]:=3;
        5: AktuellesBrett[Q,6]:=3;
        6: WriteLn ('Spalte 4 ist leider schon voll. Spielzug wird nicht angerechnet!');
      end;
      spalte4:=spalte4+1;
    if Q=5 then                      //Wenn Spieler in die fnfte Spalte wirft..
      case spalte5 of
        0: AktuellesBrett[Q,1]:=3;  //..wird berprft, wieviele Steine sich dort befinden und dementsprechend gesetzt.
        1: AktuellesBrett[Q,2]:=3;
        2: AktuellesBrett[Q,3]:=3;
        3: AktuellesBrett[Q,4]:=3;
        4: AktuellesBrett[Q,5]:=3;
        5: AktuellesBrett[Q,6]:=3;
        6: WriteLn ('Spalte 5 ist leider schon voll. Spielzug wird nicht angerechnet!');
      end;
      spalte5:=spalte5+1;
    if Q=6 then                      //Wenn Spieler in die sechste Spalte wirft..
      case spalte6 of
        0: AktuellesBrett[Q,1]:=3;  //..wird berprft, wieviele Steine sich dort befinden und dementsprechend gesetzt.
        1: AktuellesBrett[Q,2]:=3;
        2: AktuellesBrett[Q,3]:=3;
        3: AktuellesBrett[Q,4]:=3;
        4: AktuellesBrett[Q,5]:=3;
        5: AktuellesBrett[Q,6]:=3;
        6: WriteLn ('Spalte 6 ist leider schon voll. Spielzug wird nicht angerechnet!');
      end;
      spalte6:=spalte6+1;
    if Q=7 then                      //Wenn Spieler in die siebte Spalte wirft..
      case spalte7 of
        0: AktuellesBrett[Q,1]:=3;  //..wird berprft, wieviele Steine sich dort befinden..
        1: AktuellesBrett[Q,2]:=3;  //..und fr den Spieler der Wert '3' ins entsprechende Feld gesetzt.
        2: AktuellesBrett[Q,3]:=3;
        3: AktuellesBrett[Q,4]:=3;
        4: AktuellesBrett[Q,5]:=3;
        5: AktuellesBrett[Q,6]:=3;
        6: WriteLn ('Spalte 7 ist leider schon voll. Spielzug wird nicht angerechnet!');
      end;
      spalte7:=spalte7+1;
end;



procedure zuganalyse;
var x, y: Integer;

begin

  for x:=1 to breite do
    for y:=hoehe downto 1 do    //umgekehrte Reihenfolge! (von oben nach unten)
      if AktuellesBrett[x,y]=1 then
      begin
        AktuellesBrett[x,y+1]:=2; Break;       //Die '2' steht fr einen m&#65533;lichen Zg des PC's
      end

      else if AktuellesBrett[x,y]=3 then
      begin
        AktuellesBrett[x,y+1]:=2; Break;
      end;
end;



procedure ki;
var x, y: Integer;

begin
  for x:=1 to breite do                         //&#65533;erpfrung, ob Computer im n&#65533;hsten Zug gewinnen kann
    for y:=1 to hoehe do                        //Im Folgenden werden alle m&#65533;lichen Zge des Computers und deren Nachbarn betrachtet
      if AktuellesBrett[x,y]=2 then             //Gegenenfalls wird das Viererpaar vollendet und die Prozedur KI beendet
        if AktuellesBrett[x+1,y]=1 and if AktuellesBrett[x+2,y]=1 and if AktuellesBrett[x+3,y]=1 then   //rosa1
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x-1,y]=1 and if AktuellesBrett[x-2,y]=1 and if AktuellesBrett[x-3,y]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x-2,y]=1 and if AktuellesBrett[x-1,y]=1 and if AktuellesBrett[x+1,y]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x-1,y]=1 and if AktuellesBrett[x+1,y]=1 and if AktuellesBrett[x+2,y]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x,y+1]=1 and if AktuellesBrett[x,y+2]=1 and if AktuellesBrett[x,y+3]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x,y-1]=1 and if AktuellesBrett[x,y-2]=1 and if AktuellesBrett[x,y-3]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x,y+1]=1 and if AktuellesBrett[x,y+2]=1 and if AktuellesBrett[x,y-1]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x,y+1]=1 and if AktuellesBrett[x,y-1]=1 and if AktuellesBrett[x,y-2]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x+1,y+1]=1 and if AktuellesBrett[x+2,y+2]=1 and if AktuellesBrett[x+3,y+3]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x-1,y+1]=1 and if AktuellesBrett[x-2,y+2]=1 and if AktuellesBrett[x-3,y+3]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x-1,y-1]=1 and if AktuellesBrett[x-2,y-2]=1 and if AktuellesBrett[x-3,y-3]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x+1,y-1]=1 and if AktuellesBrett[x+2,y-2]=1 and if AktuellesBrett[x+3,y-3]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x+1,y+1]=1 and if AktuellesBrett[x+2,y+2]=1 and if AktuellesBrett[x-1,y-1]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x-1,y+1]=1 and if AktuellesBrett[x-2,y+2]=1 and if AktuellesBrett[x+1,y-1]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x-1,y-1]=1 and if AktuellesBrett[x-2,y-2]=1 and if AktuellesBrett[x+1,y+1]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else if AktuellesBrett[x+1,y-1]=1 and if AktuellesBrett[x+2,y-2]=1 and if AktuellesBrett[x-1,y+1]=1 then
        begin
          AktuellesBrett[x,y]:=1;
          P:=x; ergebnisliegtvor:=True; Exit;
        end
        else ergebnisliegtvor:=False;      //Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar
        end;


//Der Rest der KI ist in Arbeit

P:=2;    //zum testen wirft der Computer in die zweite Spalte
end;



procedure ausgeben;
begin
WriteLn ('Computer wirft in Spalte ',P);
end;                  //Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar


begin
  WriteLn('   Vier Gewinnt   ');
  WriteLn('--------------------');
  WriteLn('');

  i:=0;   //Z&#65533;lvariable, damit KI wei&#65533; wer am Zug ist
  ergebnisliegtvor:=False;  //Dient zum Beenden des Programms, wenn ein Ergebnis vorliegt

  repeat
    eingangsabfrage;
    brettanalyse;
    zuganalyse;
    ki;
    ausgeben;      //Fehlermeldung: Undefinierter Bezeichner: 'ausgeben'
    i:=i+1             //Hochz&#65533;len der Spielzge
  until ergebnisliegtvor=True;       //Solange wiederholen, bis ein Ergebnis vorliegt

  WriteLn (gewinner + ' hat gewonnen');   //Gewinner ausgeben

  ReadLn
end.       //Fehlermeldung: Record, Objekt oder Klassentyp erforderlich







//Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz