Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
20.05.10, 18:12
|
#1
|
Venceremos
Registriert seit: Jan 2010
Ort: NRW
Beiträge: 5.830
Bedankt: 1.069
|
Minesweeper mit C
Tag zusammen!
ich hätte da Folgendes Prob...
Ich muss für die Schule Minesweeper nach Programmierern...
So eigentlich jetzt nicht soooo komplex nur die sache hat nen paar Haken und ich daddel seit Stunden rum...
Problem 1:
Wenn man ein Kästchen auswählt muss er ja gucken wieviele Minen drumherrum sind...
Blöd nur das das array auch die Felder auf der Gegenüberliegenden Seite wertet...
(Feld[8][1] ist ja genau neben Feld[1][1] im array aber in Mienesweeper nunmal nicht -.- hoffe ihr versteht wie ich das meine)...
Problem 2:
Markieren; Mann kann ja so ein Fähnchen setzen da wo man glaubt das da ne Mine ist...
Wie "frezze" ich das Feld so das man es nicht mehr ändern kann...
sind noch weit mehr Probleme da aber das sind die beiden wo mir nix mehr einfällt...
need help
euer FF64
|
|
|
20.05.10, 18:40
|
#2
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
wirklich in C ?
weil dann wärs ja Feld[0][0] und Feld[7][0] oder?
aber nach welcher formel bitte kommst du denn von (0,0) nach (7,0) ???
und zu 2: welches toolkit verwendest du denn (wenns wirklich C ist)? [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
und:
FLAME ON
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
ich würd' nen admin bitten diesen thread zu löschen.
FLAME OFF
__________________
entropie erfordert keine wartung
|
|
|
24.05.10, 11:43
|
#3
|
Anfänger
Registriert seit: Sep 2008
Beiträge: 17
Bedankt: 14
|
ich glaube er checkt immer array[i][i+1], [i][i-1],[i+1][i] usw
bei array[i][0-1] wird dann wohl bei [i][7] gecheckt, was ja auf der anderen seite liegt.
ich würde da da einfach ne bedingung vor der abfrage machen und gut ist. wenn die nicht erfüllt ist, wird die jeweilige seite einfach nicht gecheckt.
|
|
|
24.05.10, 12:29
|
#4
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
seid wann ist 0-1 == 7 ???
__________________
entropie erfordert keine wartung
|
|
|
24.05.10, 18:53
|
#5
|
Anfänger
Registriert seit: Sep 2008
Beiträge: 17
Bedankt: 14
|
Zitat:
Zitat von urga
seid wann ist 0-1 == 7 ??? 
|
ach kein Plan was er sich da zurecht gecodet hat. anders kann ich mir das aber nicht erklären.
|
|
|
24.05.10, 22:33
|
#6
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
hier mal was konstruktives. ich finde die funktion etwas "unelegant" aber sie tut was sie soll. und das nach 6 bier 
wem eine elegantere (und/oder kürzere) version gelingt, bitte posten!
Code:
private Point[] getNeigbours (int x, int y) {
int count = 8; // 8 potentielle nachbarn
// this.size ist das ausmass des spielfeldes
// also im fall von 15x15 == 15
if (x == 0 || x == this.size - 1) count -= 3;
if (y == 0 || y == this.size - 1) count -= 3;
if (count == 2) count = 3; // falls einer der die 4 eckpunkte geklickt
Point[] ps = new Point[count];
Point[] tmp = new Point[8];
int cnt = 0;
tmp[cnt++] = new Point (x + 1, y + 1);
tmp[cnt++] = new Point (x - 1, y - 1);
tmp[cnt++] = new Point (x - 1, y + 1);
tmp[cnt++] = new Point (x + 1, y - 1);
tmp[cnt++] = new Point (x + 1, y);
tmp[cnt++] = new Point (x - 1, y);
tmp[cnt++] = new Point (x, y + 1);
tmp[cnt++] = new Point (x, y - 1);
cnt = 0;
foreach (Point p in tmp) {
if (p.X >= 0 && p.X < this.size && p.Y >= 0 && p.Y < this.size) {
ps[cnt++] = p;
}
}
return ps;
} // getNeigbours()
ich verzichte hier bewusst auf generische typen wie List<T>, da es ja um C als zielsprache geht.
__________________
entropie erfordert keine wartung
|
|
|
24.05.10, 22:38
|
#7
|
Erfahrener Newbie
Registriert seit: Apr 2010
Beiträge: 172
Bedankt: 31
|
Effizientere Lösung:
Prüfung direkt beim Erstellen der Punkt-Objekte. Ansonsten sollte das so funktionieren.
Und noch eine Frage:
Wer benutzt ohne Geschwindigkeitsoptimierung Post/Präfixoperatoren?!
Welcher Anfänger kann dir hier sagen, ob zuerst zugegriffen oder inkrementiert wird?
|
|
|
24.05.10, 22:59
|
#8
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
Zitat:
Prüfung direkt beim Erstellen der Punkt-Objekte.
|
ja stimmt schon. aber eine kaskade
Code:
if (x + 1 < this.size && y + 1 < this.size) {
ps[cnt++] = new Point (x + 1, y + 1);
}
// ..... 7 weitere vergleiche .....
finde ich noch uneleganter. bzw. fehleranfälliger.
und das bisschen overhead auf dem stack (8x2x sizeof (int)) ist wohl verkraftbar.
Zitat:
Welcher Anfänger kann dir hier sagen, ob zuerst zugegriffen oder inkrementiert wird?
|
wer spricht denn hier von anfänger? der autor hat immerhin den "[TUT] Wie werde ich Programierer?" thread gestartet.
__________________
entropie erfordert keine wartung
|
|
|
25.05.10, 14:07
|
#9
|
Erfahrener Newbie
Registriert seit: Apr 2010
Beiträge: 172
Bedankt: 31
|
Zitat:
Zitat von urga
wer spricht denn hier von anfänger? der autor hat immerhin den "[TUT] Wie werde ich Programierer?" thread gestartet.
|
Entschuldige, mein Fehler! Ich nehme alles zurück und behaupte das Gegenteil!
Zitat:
Zitat von urga
ja stimmt schon. aber eine kaskade
[code]
finde ich noch uneleganter. bzw. fehleranfälliger.
und das bisschen overhead auf dem stack (8x2x sizeof (int)) ist wohl verkraftbar.
|
Tendentiell ja. Aber das Instanzieren jedes Objekts verbrät leider mehr Rechenzeit als ne Abfrage zuvor. Ich bin da eher minimalistisch beim Speicherbedarf/bei der Rechenzeit.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
().
|