11. april 2006 - 12:21Der er
10 kommentarer og 1 løsning
forklaring af mere kode
hej eksperter - i følgende kode er der nogle ting jeg ikke helt kan se, hvorfor bliver gjort som de gøres. I kan eventuelt se den foregående tråd omkring "forklaring af kode" - det er samme emne
function TfrMain.GamePlay(xo_Move : Integer):integer; var x, y : 1..3; iWin : integer; begin Result := -1;
Inc(iMove); x := (xo_Move Div 3) + 1; // hvorfor skal der lægges 1 til? y := (xo_Move Mod 3) + 1;
if sPlaySign = 'O' then begin iOPos[x,y] := 1; // hvorfor omregnes det til 1? iWin := CheckWin(iOPos); end else begin iXPos[x,y] := 1; iWin := CheckWin(iXPos); end;
if sPlaySign = 'X' then begin iXScore := iXScore + 1; end else begin iOScore := iOScore + 1; end;
ShowMessage(sPlaySign + ' - Wins!'); end;
if (iMove = 9) AND (bGameOver = False) Then begin ShowMessage('It''s a Draw!'); bGameOver := True end;
if sPlaySign = 'O' Then sPlaySign := 'X' else sPlaySign := 'O'; end;
procedure TfrMain.lblCell0Click(Sender: TObject); var iWin : integer; CellIndex : 0..8; begin if bGameOver = True Then Exit; if TLabel(Sender).Caption <> '' then begin ShowMessage('Cell ocupied!'); Exit; end; CellIndex := StrToInt(RightStr(TLabel(Sender).Name,1)); iWin := GamePlay(CellIndex); // hvad gør dette?! end;
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Inc(iMove); x := (xo_Move Div 3) + 1; // hvorfor skal der lægges 1 til? y := (xo_Move Mod 3) + 1;
Fordi at "xo_Move Div 3" og "xo_Move Mod 3" giver tal i intervallet 0-2. Imidlertid er matricen indekseret 1-3.
B)
if sPlaySign = 'O' then begin iOPos[x,y] := 1; // hvorfor omregnes det til 1? iWin := CheckWin(iOPos); end else begin iXPos[x,y] := 1; iWin := CheckWin(iXPos); end;
Den troede jeg at vi havde været igennem?
Der er to matricer iOPos og iXPos som indeholder positionerne for hhv. O'erne og X'erne. Hvis der står et 1-tal i en matrice så er der et O/X og hvis der står 0 så er der ikke noget (jo måske i den anden matrice).
Variablen sPlaySign indeholder et 'O' hvis det er O-spilleren som placere sin brik (og sikkert et 'X' hvis det er den anden spiller). Derfor testes der på om sPlaySign er lig med 'O' og hvis det er, så placeres der et 1-tal i iOPos-matricen for at markere at det var et O. Og ellers placeres et 1-tal i iXPos-matricen for at markere at det var et X i stedet.
C)
procedure TfrMain.lblCell0Click(Sender: TObject); var iWin : integer; CellIndex : 0..8; begin if bGameOver = True Then Exit; if TLabel(Sender).Caption <> '' then begin ShowMessage('Cell ocupied!'); Exit; end; CellIndex := StrToInt(RightStr(TLabel(Sender).Name, 1)); iWin := GamePlay(CellIndex); // hvad gør dette?! end;
Meningen er vist at "den næste spiller" indtaster sit træk i et felt i brugergrænsefalden. Dette havner i variablen CellIndex.
Kaldet til GamePlay() sørger så for at den rigtige brik indsættes på feltet. Det svare simpelthen til at der spilles en runde.
Hmm, glem det - jeg kiggede ikke på koden ordentligt. Jeg ser meget gerne, at du lægger et svar. Iøvrigt er der vist også en foregående tråd, hvor du også gerne må lægge et svar
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.