|
|
|
|
Arr, der Ostdeutsche ist vor mir :O
Kris
|
|
|
|
|
|
|
Ich will endlich meinen CB.
|
|
|
|
|
|
|
Zumal man als Putzfrau wenigstens immer saubere Lösungen implementieren würde.
|
|
|
|
|
|
|
Solaris 10 ist angekommen :x
Kris
|
|
|
|
|
|
|
| Zitat von Zensiert
Arr, der Ostdeutsche ist vor mir :O
Kris
| |
2 sogar :x
|
|
|
|
|
|
|
Naja, Rügen ist Norddeutsch und Norddeutsch ist nicht Ostdeutsch.
|
|
|
|
|
|
|
Doch doch, auch ich komme aus dunkeldeutschland.
Geboren sogar in Cottbus.
COTTBUS!
|
|
|
|
|
|
|
|
|
|
|
Du bist ja schon fast Pole.
np: Sodom - Ausgebombt
|
|
|
|
|
|
|
|
|
|
|
POLE!
Verdammt, Katzenohren sind verdammt Interessant. Das sieht immer aus wie so ne Radarschüssel die sich um 360° dreht.
np: Sodom - Baptism of Fire
|
|
|
|
|
|
|
Pole, eindeutig: Tigga klaut Threadtitel!
|
|
|
|
|
|
|
| Zitat von TriggerTG
Preuße :x | | Yeah \o/
|
|
|
|
|
|
|
Polen ist doch sooo gesehen auch deutschland
chrrrr chr chr chrrr
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von TriggerTG am 21.04.2007 16:58]
|
|
|
|
|
|
Bzw. wärs noch wenn uns nicht so ein blöder Österreicher einen Strich durch die Rechnung gemacht hätte.
|
|
|
|
|
|
|
Richtig, wir sollten endlich unsere Jungs aus dem Ausland zurückholen und die Ostgebiete zurückerober!
|
|
|
|
|
|
|
hmmm, ich hab grad ne denkblokade.
Bin grad noch an meinem Reversi. Da ist ein Bug beim schlagen (umdrehen feindlicher steine) drin.
Also ich hab das Spielbrett als zweidimensionales array:
|
PHP: |
type reversi = record
table : array[1..8,1..8] of slot;
lastTurn : char;
end;
|
|
aber der code ist eigentlich wurscht wenn ich so nachdenke.
ich hab folgendes spielfeld:
das startbrett sieht so aus:
|
PHP: |
a b c d e f g h
-+-+-+-+-+-+-+-+-+
1| | | | | | | | |
-+-+-+-+-+-+-+-+-+
2| | | | | | | | |
-+-+-+-+-+-+-+-+-+
3| | | | | | | | |
-+-+-+-+-+-+-+-+-+
4| | | |O|O| | | |
-+-+-+-+-+-+-+-+-+
5| | | |X|X| | | |
-+-+-+-+-+-+-+-+-+
6| | | | | | | | |
-+-+-+-+-+-+-+-+-+
7| | | | | | | | |
-+-+-+-+-+-+-+-+-+
8| | | | | | | | |
-+-+-+-+-+-+-+-+-+
X --> Spieler Rot
O --> Spieler Gruen
|
|
wenn ich X auf D3 setze wird korrekt das eingeschlossene O umgedreht.
|
PHP: |
System: X 4 1
a b c d e f g h
-+-+-+-+-+-+-+-+-+
1| | | | | | | | |
-+-+-+-+-+-+-+-+-+
2| | | | | | | | |
-+-+-+-+-+-+-+-+-+
3| | | |X| | | | |
-+-+-+-+-+-+-+-+-+
4| | | |X|O| | | |
-+-+-+-+-+-+-+-+-+
5| | | |X|X| | | |
-+-+-+-+-+-+-+-+-+
6| | | | | | | | |
-+-+-+-+-+-+-+-+-+
7| | | | | | | | |
-+-+-+-+-+-+-+-+-+
8| | | | | | | | |
-+-+-+-+-+-+-+-+-+
Spieler Gruen (o) ist am Zug!
|
|
Neue Situation:
|
PHP: |
System: X 3 2
a b c d e f g h
-+-+-+-+-+-+-+-+-+
1| | | | | | | | |
-+-+-+-+-+-+-+-+-+
2| | | | | | | | |
-+-+-+-+-+-+-+-+-+
3| | | | | | | | |
-+-+-+-+-+-+-+-+-+
4| | |X|O|O| | | |
-+-+-+-+-+-+-+-+-+
5| | | |X|X| | | |
-+-+-+-+-+-+-+-+-+
6| | | | | | | | |
-+-+-+-+-+-+-+-+-+
7| | | | | | | | |
-+-+-+-+-+-+-+-+-+
8| | | | | | | | |
-+-+-+-+-+-+-+-+-+
Spieler Gruen (o) ist am Zug!
|
|
Das X auf C4 hätte er nicht setzen dürfen, da kein stein eingeschlossen wird.
Also kurz gesagt, meine Funktion um zu checken, ob gegnerische spielsteine eingeschlossen sind funktioniert nicht korrekt.
Ich weiß auch genau, dass es so nicht 100%ig gehen kann, mir fällt aber keine richtige möglichkeit ein.
Vielleicht hat ja jemand ne idee wie man das iterativ gut lösen könnte (PASCAL)
// Sind Gegnersteine eingeschlossen, so dass welche geschlagen werden können?
// Direction: "+x" | "-x" | "+y" |
"-y" | "+x+y" | "-x-y" | "-x+y" | "+x-y" um nach rechts, links, oben, unten, diagonal rechts oben, diagonal links unten,
diagalonal links oben, diagonal rechts unten, zu suchen
function isEnemyIncluded(r : reversi; t : turn; direction : string) : boolean;
var i,j : integer;
{s : char;}
begin
isEnemyIncluded := false;
// s ist der jeweilige Gegnerchar
{s := inverseChar(t.c);}
// Horizontal
if direction = '+x' then begin
i := t.x+1;
while (i <= 8) {and (r.table[i, t.y] = s)} do begin
if (r.table[i, t.y] = t.c) then isEnemyIncluded := true;
i := i+1
end
end else if direction = '-x' then begin
i := t.x-1;
while (i > 0) {and (r.table[i, t.y] = s)} do begin
if (r.table[i, t.y] = t.c) then isEnemyIncluded := true;
i := i-1
end
// Vertikal
end else if direction = '+y' then begin
i := t.y+1;
while (i <= 8) {and (r.table[t.x, i] = s)} do begin
if (r.table[t.x, i] = t.c) then isEnemyIncluded := true;
i := i+1
end
end else if direction = '-y' then begin
i := t.y-1;
while (i > 0) {and (r.table[t.x, i] = s)} do begin
if (r.table[t.x, i] = t.c) then isEnemyIncluded := true;
i := i-1
end
// Diagonal
end else if direction = '+x+y' then begin
i := t.x+1;
j := t.y+1;
while (i <= 8) and (j <= 8) {and (r.table[i,j] = s)} do begin
if (r.table[i,j] = t.c) then isEnemyIncluded := true;
i := i+1;
j := j+1
end
end else if direction = '-x-y' then begin
i := t.x-1;
j := t.y-1;
while (i > 0) and (j > 0) {and (r.table[i,j] = s)} do begin
if (r.table[i,j] = t.c) then isEnemyIncluded := true;
i := i-1;
j := j-1
end
end else if direction = '+x-y' then begin
i := t.x+1;
j := t.y-1;
while (i <= 8) and (j > 0) {and (r.table[i,j] = s)} do begin
if (r.table[i,j] = t.c) then isEnemyIncluded := true;
i := i+1;
j := j-1
end
end else if direction = '-x+y' then begin
i := t.x-1;
j := t.y+1;
while (i > 0) and (j <= 8) {and (r.table[i,j] = s)} do begin
if (r.table[i,j] = t.c) then isEnemyIncluded := true;
i := i-1;
j := j+1
end
end
end;
Der Komplette Source-Code:
http://trac.triggertg.de/reversi/browser
Die Kompilierte datei ist auch drin
|
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von TriggerTG am 21.04.2007 17:31]
|
|
|
|
|
|
äh also nochmal ganz kurz gesagt:
ich will in nem 8x8 array das als inhalt entweder 'r', 'g' oder '' enthält gucken, ob ein gewisses r (koordinaten gegeben) in irgendeine richtung direkt und ohne leere felder eins oder mehrere g's einschliesst
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von TriggerTG am 21.04.2007 17:36]
|
|
|
|
|
|
tuts da nicht sowas wie coord[x+1]="g", coord[x-1]="g" etc`?
|
|
|
|
|
|
|
ne muss er ja das komplette spielfeld horizontal, vertikal und diagonal durchlaufen.
das tut er ja eigentlich.
Also nochmal gedanken zusammenfassen:
ich hab vom Spielzug die X und Y koordinaten.
da laufe ich beispielsweise mit ner whileschleife nach rechts los
while (gegnerspielstein) do begin
x+1
if (eigener spielstein) funktion = true
end
aber auf den eigenen spielstein trifft er ja glaub ich nicht, da die whileschleife nur fremde spielsteine abklappert o.O
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von TriggerTG am 21.04.2007 17:54]
|
|
|
|
|
|
for dx:=-1 to +1 do
for dy:=-1 to +1 do
if check_direction(feld,x,y,dx,dy) then er_darf_das:=true;
end
end
und die funktion check_direction sieht ungefähr so aus:
function check_direction(feld,start_x,start_y,dx,dy):boolean;
farbe:=feld[x,y];
kriterium:=gegenteil[farbe];
x:=start_x+dx;
y:=start_y+dy;
check_direction:=false;
repeat
x:=x+dx;
y:=y+dy;
if ((not (x in [1..8]))or(not(y in [1..8]))) then break;
if feld[x,y]=" " then break;
if feld[x,y]=kriterium then begin check_direction:=true; break; end;
until false;
end
so ungefähr sollte es ganz gut gehen.
€: [m] eingefügt. klar soweit? das entkoppelt den prüfvorgang, der mit dx und dy in eine beliebige richtung gelenkt wird. pascal ist eben ein bisschen hässlich, aber man lern ordentlich zu modularisieren, weil es sonst unmachbar wird. esseidenn man hat ein faible für if-partys mit 800 gästen. :-\
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von rABBI am 21.04.2007 18:03]
|
|
|
|
|
|
ahhhhhhhhhhhhhh das ist ein sehr guter ansatz. Danke!
e\ mir ist nämlich auch keine gute lösung eingefallen, das gescheit abzukapseln
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von TriggerTG am 21.04.2007 18:05]
|
|
|
|
|
|
Schalalala lalalalalala!
Gibts hier eigentlich keine Fußball Fans?
|
|
|
|
|
|
|
Ich denke Peacemaker hat sich hier schonmal freiwillig dieser Unterschicht zugeordnet.
|
|
|
|
|
|
|
| Zitat von SirSiggi
Unterschicht
| |
|
|
|
|
|
|
|
Das regt mich doch grad schon wieder auf.
Hausaufgaben, Arbeiten und Lektuere lesen.
Und alles moeglichst noch am Wochenende.
|
|
|
|
|
|
|
Ich bin stolzer Alemannia-Fan, seit 4 Jahren Aber kein Stadion-Gänger. Nur bisher zwei Spiele gesehen, eins war Borussia MG gegen irgendwen (damals 0:0) und Aachen gegen Nürnberg in der zweiten Liga. Jenes Spiel wurde annuliert und als Geisterspiel ausgetragen, da Fans Gegenstände auf das Spielfeld geworfen haben.
|
|
|
|
|
|
|
Bin auch kein wirklicher Stadiongaenger, nur wenn ich mal Zeit habe oder Karten geschenk bekomme bzw. angeboten von Freunden.
Trotzdem seit gut 9 Jahren Stuttgart Fan.
|
|
|
|
|
|
|
Nochmals vielen Dank an Rabbi, sein Ansatz hat mich letztenendlich auf das richtige Ergebnis gebracht:
|
PHP: |
// Sind Gegnersteine eingeschlossen, so dass welche geschlagen werden können?
function isEnemyIncluded(r : reversi; t : turn) : boolean;
var dX,dY : integer;
begin
isEnemyIncluded := false;
writeln('Debugging: isEnemyIncluded (X/Y/Bool)');
for dX := -1 to +1 do begin
for dY := -1 to +1 do begin
if checkDirection(r, t, dX, dY) then isEnemyIncluded := true;
writeln(dX, ':', dY, ' : ', checkDirection(r, t, dX, dY));
end
end
end;
// Hilfsfunktion für isEnemyIncluded: Bestimmte richtung (dx/dy) auf eingeschlossene Gegner überprüfen
function checkDirection(r : reversi; t : turn; dX,dY : integer) : boolean;
var s : char;
x,y : integer;
mayBeTrue : boolean;
begin
// s ist der jeweilige Gegnerchar
s := inverseChar(t.c);
x := t.x + dX;
y := t.y + dY;
checkDirection := false;
mayBeTrue := false;
repeat
if (not(x in [1..8]) or not(y in [1..8])) then break;
if (r.table[x, y] = ' ') then break;
if (r.table[x,y] = s) then mayBeTrue := true;
if mayBeTrue and (r.table[x,y] = t.c) then begin
checkDirection := true;
break
end;
x := x + dx;
y := y + dy;
until checkDirection = true;
end;
|
|
|
Code: |
Spieler Rot (x) ist am Zug!
>> Eingabe: xc3
Debugging: isEnemyIncluded (X/Y/Bool)
-1:-1 : FALSE
-1:0 : FALSE
-1:1 : FALSE
0:-1 : FALSE
0:0 : FALSE
0:1 : FALSE
1:-1 : FALSE
1:0 : FALSE
1:1 : TRUE
g
jetzt erfolgt das schlagen
System: X 3 2
a b c d e f g h
-+-+-+-+-+-+-+-+-+
1| | | | | | | | |
-+-+-+-+-+-+-+-+-+
2| | | | | | | | |
-+-+-+-+-+-+-+-+-+
3| | |X| | | | | |
-+-+-+-+-+-+-+-+-+
4| | | |O|O| | | |
-+-+-+-+-+-+-+-+-+
5| | | |X|X| | | |
-+-+-+-+-+-+-+-+-+
6| | | | | | | | |
-+-+-+-+-+-+-+-+-+
7| | | | | | | | |
-+-+-+-+-+-+-+-+-+
8| | | | | | | | |
-+-+-+-+-+-+-+-+-+
Spieler Gruen (o) ist am Zug!
>> Eingabe: oc4
Debugging: isEnemyIncluded (X/Y/Bool)
-1:-1 : FALSE
-1:0 : FALSE
-1:1 : FALSE
0:-1 : FALSE
0:0 : FALSE
0:1 : FALSE
1:-1 : FALSE
1:0 : FALSE
1:1 : FALSE
System: e 3 2
a b c d e f g h
-+-+-+-+-+-+-+-+-+
1| | | | | | | | |
-+-+-+-+-+-+-+-+-+
2| | | | | | | | |
-+-+-+-+-+-+-+-+-+
3| | |X| | | | | |
-+-+-+-+-+-+-+-+-+
4| | | |O|O| | | |
-+-+-+-+-+-+-+-+-+
5| | | |X|X| | | |
-+-+-+-+-+-+-+-+-+
6| | | | | | | | |
-+-+-+-+-+-+-+-+-+
7| | | | | | | | |
-+-+-+-+-+-+-+-+-+
8| | | | | | | | |
-+-+-+-+-+-+-+-+-+
Spieler Gruen (o) ist am Zug!
>> Eingabe: ogh
System: e 3 2
a b c d e f g h
-+-+-+-+-+-+-+-+-+
1| | | | | | | | |
-+-+-+-+-+-+-+-+-+
2| | | | | | | | |
-+-+-+-+-+-+-+-+-+
3| | |X| | | | | |
-+-+-+-+-+-+-+-+-+
4| | | |O|O| | | |
-+-+-+-+-+-+-+-+-+
5| | | |X|X| | | |
-+-+-+-+-+-+-+-+-+
6| | | | | | | | |
-+-+-+-+-+-+-+-+-+
7| | | | | | | | |
-+-+-+-+-+-+-+-+-+
8| | | | | | | | |
-+-+-+-+-+-+-+-+-+
Spieler Gruen (o) ist am Zug!
>> Eingabe: ob2
Debugging: isEnemyIncluded (X/Y/Bool)
-1:-1 : FALSE
-1:0 : FALSE
-1:1 : FALSE
0:-1 : FALSE
0:0 : FALSE
0:1 : FALSE
1:-1 : FALSE
1:0 : FALSE
1:1 : TRUE
r
jetzt erfolgt das schlagen
System: O 3 3
a b c d e f g h
-+-+-+-+-+-+-+-+-+
1| | | | | | | | |
-+-+-+-+-+-+-+-+-+
2| |O| | | | | | |
-+-+-+-+-+-+-+-+-+
3| | |X| | | | | |
-+-+-+-+-+-+-+-+-+
4| | | |O|O| | | |
-+-+-+-+-+-+-+-+-+
5| | | |X|X| | | |
-+-+-+-+-+-+-+-+-+
6| | | | | | | | |
-+-+-+-+-+-+-+-+-+
7| | | | | | | | |
-+-+-+-+-+-+-+-+-+
8| | | | | | | | |
-+-+-+-+-+-+-+-+-+
Spieler Rot (x) ist am Zug!
>> Eingabe:
|
|
|
|
|
|
|
|
|
INSERT OR REPLACE INTO dumpdb.user_overview (SELECT * FROM user_overview);
was zur hölle ist an diesem sqlquery falsch? und da hier behauptet wurde, die fehlermeldungen seien hilfreich: "near "SELECT": syntax error"
tigga, gern geschehen.
|
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |