[js] 4op1rij, hoe checken of iemand 4op1rij heeft ?

Pagina: 1
Acties:
  • 348 views sinds 30-01-2008
  • Reageer

  • r0bert
  • Registratie: September 2001
  • Laatst online: 13-12 18:24
Heeft iemand een goed idee, hoe ik mijn scriptje kan laten checken of er binnen het 4op1rij veld, een 4op1rij is gehaald na het toevoegen van een nieuwe steen ?
Hier even een pic om het te verduidelijken:
Afbeeldingslocatie: http://www.sovenewmedia.nl/gathering.tweakers.net/vieropeenrij.gif
Oranje = een rode steen die net toe wordt gevoegd..


Natuurlijk moet er in alle rigtingen gezocht worden, maar ook moet er bijv. gekeken worden of er aan de tegenovergestelde kant ook gelijke stenen zijn..

Psuedo codes zijn zeer welkom :)

  • Grom
  • Registratie: Juli 2002
  • Laatst online: 25-11-2024

Grom

lief hè!

Kijk hier eens (gevonden met google javascript games er zijn er dus meer):
http://www.kielack.de/games/fourwins.htm

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 10-12 15:46

Tim Schuhmacher

abasios

Ik neem aan dat je een 2 dimensionaal array gebruikt met bv 3 mogelijke letters? (l = leeg, r=rood en b=blaauw)? Zo niet dan moet je dat zeker doen. dan kun je met for loopjes rijen doorlopen.

  • r0bert
  • Registratie: September 2001
  • Laatst online: 13-12 18:24
Grom schreef op 27 september 2002 @ 20:23:
Kijk hier eens (gevonden met google javascript games er zijn er dus meer):
http://www.kielack.de/games/fourwins.htm
Die code is nogal smerig :S maar ik zal 'm even door gaan spitten:
Tim Schuhmacher schreef op 27 september 2002 @ 20:24:
Ik neem aan dat je een 2 dimensionaal array gebruikt met bv 3 mogelijke letters? (l = leeg, r=rood en b=blaauw)? Zo niet dan moet je dat zeker doen. dan kun je met for loopjes rijen doorlopen.
Ja zoiets..
objVeld.velden[intY][intX].element.playerValue = de waarde van de player die z'n steen in het veld heeft

  • Grom
  • Registratie: Juli 2002
  • Laatst online: 25-11-2024

Grom

lief hè!

r0bert schreef op 27 september 2002 @ 20:32:
[...]
Die code is nogal smerig :S maar ik zal 'm even door gaan spitten:
Ik heb verder niet naar die code gekeken maar er zijn er meer te vinden.

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-12 12:54

André

Analytics dude

Je hoeft alleen maar te checken vanaf de net gegooide steen. Dus je kunt ook alle mogelijkheden statisch in je code te zetten, dat zijn dan volgens mij 4 + 4 + 4 + 4 = 16 mogelijkheden.

  • Grom
  • Registratie: Juli 2002
  • Laatst online: 25-11-2024

Grom

lief hè!

Yogho schreef op 27 september 2002 @ 20:50:
Je hoeft alleen maar te checken vanaf de net gegooide steen. Dus je kunt ook alle mogelijkheden statisch in je code te zetten, dat zijn dan volgens mij 4 + 4 + 4 + 4 = 16 mogelijkheden.
Volgens mij 8: 2xhorz + 2xvert + 2xdiagR + 2xdiagL :?

  • r0bert
  • Registratie: September 2001
  • Laatst online: 13-12 18:24
Als je alleen maar hoefde te tellen of het vanaf de nieuwe steen één richting op ergens 4 dezelfde stenen lagen, was 't niet zo moeilijk. Maar er moet ook gecheckt worden of er tegenover nog stenen liggen.

En eigenlijk is het de bedoeling dat iedere keer het hele veld gecheckt wordt ivm uitbreidingen die ik later erbij wil doen (tetris idee, dat de 4 op 1 rij verdwijt (1 punt voor speler) en de boel in elkaar zakt)

http://www.sovenewmedia.nl/gathering.tweakers.net/

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-12 12:54

André

Analytics dude

Grom schreef op 27 september 2002 @ 20:57:
[...]


Volgens mij 8: 2xhorz + 2xvert + 2xdiagR + 2xdiagL :?
Dan ga je uit van het speelveld, dat is inderdaad in dit geval sneller, maar met mijn methode ben je direct klaar ook als je een speelveld van (overdreven) 200x200 hebt. ;)

En je hoeft niet als je zo'n speelveld hebt met een loop het hele veld door. Dus ik denk dat statisch checken beter is dan dynamisch.

Verwijderd

Vanaf de net gegooide steen zijn er 8 richtingen. In ieder van die richting kun je het aantal gelijksoortige stenen op rij bepalen. Als daar al 4 tussen zit: -> vier op rij. Zo niet, dan tegenover elkaar liggende richtingen optellen, als dat 5 is: -> vier op rij.

Zoiets is het eerste wat me te binnen schiet.

Om te bepalen hoeveel op rij kun je gebruik maken van 1 functie waaribj je verschillende 'verplaatsingswaarden' (what's in a word... ;)) uit een array haalt.

// omhoog
zoekrichting[0].x = 0;
zoekrichting[0].y = 1;

// rechtsboven
zoekrichting[1].x = 1;
zoekrichting[1].y = 1;

en dan in die richting blijven doorgaan totdat je een andere kleur tegenkomt....

edit
voor zo'n tetris idee zou ik dan alle stenen een property 'hasMoved' of zo geven en dan nadat er stenen ontploft zijn of rijen verdwenen zijn voor elk van de 'hasMoved' items zo'n check doen.

[ Voor 0% gewijzigd door Verwijderd op 27-09-2002 22:04 . Reden: tetris, eh... ]


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

Wat ik met tictactoe eens gedaan heb is eerst een array berekenen met alle mogelijkheden achter elkaar opgesomd. Daar liep ik in een loop elke keer doorheen om te checken (simpel maar snel en effectief).

Tweede mogelijkheid is een recursieve functie schrijven die vanuit het startpunt (nieuwe coords) rondom checkt of er gelijken inzitten. Komt ie nog een rooie tegen dan recursief doorloopen tot je vier op een rij hebt gevonden. Dit is een stuk lastiger dan optie 1, maar wel flexibeler en efficienter.

Wel grappig scriptje om eens uit te proberen als ik niks te doen heb :) Ben wel benieuwd hoe dit zo snel mogelijk is op te lossen.. Klein contestje van maken... moet je wel je resultaten timen :) en een online voorbeeldje maken ;)

Bij nader inzien lijkt de handigste methode overigens toch de eerste.. maak een coord-array met voor ieder punt de mogelijkheden.. dat zijn er niet zoveel. Die kunt je statisch maken, maar handiger is een scriptje te maken die dat voor je doet, onafhankelijk van de grootte van je speelveld en de hoeveelheid van je x-op-een-rij zeg maar :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

Is wel een leuke probleemstelling om je eens lekker in vast te bijten :)
Het idee van exparrot staat me wel aan eigenlijk; ik zal eens kijken of ik er wat van kan maken :)

Intentionally left blank


Verwijderd

r0bert schreef op 27 september 2002 @ 21:04:
(tetris idee, dat de 4 op 1 rij verdwijt (1 punt voor speler) en de boel in elkaar zakt)
volgens mij werkt tetris anders ... daar hoef je alleen maar rijen te checken ... dat is heel makkelijk door er een som van te maken ... je hebt bv. een rij met 8 kollomen, wanneer er een blokje in een kolom ligt dan heeft het de waarde 1, anders 0. Nu tel je alle waarden bij elkaar op, is de uitkomst 8, dan moet de rij weg en lager dan 8 gebeurt er niks ...

tenminste dit lijkt mij de meest logische oplossing

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

Ik ben al bezig; het makkelijkst lijkt me toch om elke keer het hele veld te checken; dat kan je doen met 1 functie die je 4 keer aanroept:
eerste keer om horizontaal te checken
tweede keer om verticaal te checken (array 180 graden transponeren)
derde keer om diagonaal te checken (array 90 graden transponeren)
derde keer om diagonaal te checken (array 270 graden transponeren)

Deze functie returned dan een array van stenen die verwijderd kunnen worden
je verwijderd dan de blokjes en deelt punten uit
vervolgens laat je de overige stenen vallen, en begin je weer met het hele veld checken net zolang tot de array met te verwijderen stenen leeg is :)

Intentionally left blank


  • r0bert
  • Registratie: September 2001
  • Laatst online: 13-12 18:24
Dit heb ik tot nu toe:
http://www.sovenewmedia.nl/gathering.tweakers.net/vierop1rij.html

het werkt wel.. weet alleen niet of het de beste oplossing is :)

edit: hier checkt ie dus via een functie vanuit de geparsede steen.. dus als je gewoon een loopje schrijft die alle stenen van het hele veld bij langs gaat, kun je ook het hele veld checken..

edit2: alleen getest in IE 5.5 op m'n pctje.. dus niet gaan zeuren dat het niet in andere browsers werkt plz :) heeft al genoeg stress gekost :D

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

ok, hier dan mijn w.i.p. : 4 op een rij :)
Erg recht-toe-recht-aan; vooral het veld diagonaal checken kan wel beter, en het veld is nog een beetje klein...
Edit: veldgrootte variabel gemaakt; nu nog de puntentelling :)
Edit2: nu ook met puntentelling :)

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

4 op een rij: nu ook spelen tegen de computer (heeft geen intelligentie, maar wel leuk) :)

Intentionally left blank


Verwijderd

crisp schreef op 30 september 2002 @ 13:56:
4 op een rij: nu ook spelen tegen de computer (heeft geen intelligentie, maar wel leuk) :)
hij is zeker leuk :) mooi gefixed!
de computer houdt het zonder intelligentie nog aardig bij....... (of mijn intelligentie komt aardig overeen met een computer zonder int. O-) ) hehehe

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

Verwijderd schreef op 30 september 2002 @ 14:09:
[...]

hij is zeker leuk :) mooi gefixed!
de computer houdt het zonder intelligentie nog aardig bij....... (of mijn intelligentie komt aardig overeen met een computer zonder int. O-) ) hehehe
Je moet juist zorgen dat je 5 of 6 op een rij haalt; daar krijg je extra punten voor! :)

Intentionally left blank


  • Grom
  • Registratie: Juli 2002
  • Laatst online: 25-11-2024

Grom

lief hè!

r0bert,
Dit is echt een leuke variant op 4 op een rij !
Ook die drie-speler variant is geweldig (iets voor een netwerkje).
Heb je dit zelf bedacht of bestaat er al zoiets (.exe oid),? Ik heb het nog nooit eerder gezien (wat overigens niets zegt).
edit:

Wel ken ik dit spel dat een beetje hier op lijkt (super BounceOut) te vinden op http://www.gamehouse.com/


crisp,
Mooi gemaakt, lijkt me niet simpel om de intelligentie voor de comp. te bouwen (enkele levels diep laten rekenen).
Ben benieuwd of je dat nog gaat uitbreiden. Deze versie is echt al geweldig leuk om te spelen.

(BTW niet om te zeuren en je zult het wel weten maar mozilla 1.1 verslikt zich)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

Grom schreef op 30 september 2002 @ 14:30:
[...](BTW niet om te zeuren en je zult het wel weten maar mozilla 1.1 verslikt zich)
Kwam door die "overflow: auto", is reeds gefixed :)

Intentionally left blank


  • r0bert
  • Registratie: September 2001
  • Laatst online: 13-12 18:24
crisp schreef op 30 september 2002 @ 13:56:
4 op een rij: nu ook spelen tegen de computer (heeft geen intelligentie, maar wel leuk) :)
Ik heb jammergenoeg nog niet echt veel tijd gehad om er mee verder te gaan, maar daar was ik inderdaad ook over aan het denken 'tegen de computer spelen'.
Ik heb even snel je versie getest, maar heeft de computer nog niet door (edit: duh! zei je zelf ook al dat ie geen intelligentie had :)) wanneer ik 3 op een rij heb en hij dus een steen er naast moet leggen om mij te blokkeren. Ook niet als hij(/zij:)) zelf 3 stenen naast elkaar heeft liggen. Da's jammer, maar misschien in de komende versies beter B)
.. verder is je game _/-\o_ :)

Ik ga zelf nou even je code uitprinten en kijken hoe jij alles klaar hebt gespeeld (als je dat tenminste niet erg vind ;))
Grom schreef op 30 september 2002 @ 14:30:
r0bert,
Dit is echt een leuke variant op 4 op een rij !
Ook die drie-speler variant is geweldig (iets voor een netwerkje).
Heb je dit zelf bedacht of bestaat er al zoiets (.exe oid),? Ik heb het nog nooit eerder gezien (wat overigens niets zegt).
Ik ben begonnen met het idee om én vieropeenrij én tetris te maken. Later toen legde ik ineens de link tussen vieropeenrij en tetris, dus dat leek me wel een leuk idee.. zo ist eigenlijk gekomen :)


Maareuh.. andere die denken dat ze 't beter kunnen, mogen natuurlijk ook altijd een kans wagen :+ Kunnen we misschien, zoals Bosmonster al zei, er een minicontest van maken..

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

r0bert schreef op 30 september 2002 @ 14:52:
[...]

Ik heb jammergenoeg nog niet echt veel tijd gehad om er mee verder te gaan, maar daar was ik inderdaad ook over aan het denken 'tegen de computer spelen'.
Ik heb even snel je versie getest, maar heeft de computer nog niet door (edit: duh! zei je zelf ook al dat ie geen intelligentie had :)) wanneer ik 3 op een rij heb en hij dus een steen er naast moet leggen om mij te blokkeren. Ook niet als hij(/zij:)) zelf 3 stenen naast elkaar heeft liggen. Da's jammer, maar misschien in de komende versies beter B)
.. verder is je game _/-\o_ :)

Ik ga zelf nou even je code uitprinten en kijken hoe jij alles klaar hebt gespeeld (als je dat tenminste niet erg vind ;))
[...]
Van mij mag je ermee doen wat je wilt (anders had ik het niet gepost) ;)
Laat even weten als je nog dingen ziet die beter/eenvoudiger/sneller kunnen; vooral het diagonaal checken is nogal complex in mijn code...

Dat checken of de speler al 3 op een rij heeft is inderdaad wel de minimale intelligentie die de computer zou moeten hebben; ga ik over nadenken :)
Maareuh.. andere die denken dat ze 't beter kunnen, mogen natuurlijk ook altijd een kans wagen :+ Kunnen we misschien, zoals Bosmonster al zei, er een minicontest van maken..
In dat geval mag je mijn code natuurlijk niet gebruiken! ;)

Intentionally left blank


  • r0bert
  • Registratie: September 2001
  • Laatst online: 13-12 18:24
crisp schreef op 30 september 2002 @ 15:12:
In dat geval mag je mijn code natuurlijk niet gebruiken! ;)
Dan moet het maar stiekem heh ;)

Trouwens.. mijn 1e eindstand in je game:
100 (moi) - 94 (computer) :?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:29

crisp

Devver

Pixelated

r0bert schreef op 30 september 2002 @ 15:26:
[...]


Dan moet het maar stiekem heh ;)

Trouwens.. mijn 1e eindstand in je game:
100 (moi) - 94 (computer) :?
random is zo dom nog niet dus :)

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 12-12 12:54

André

Analytics dude

crisp schreef op 30 september 2002 @ 15:31:
[...]

random is zo dom nog niet dus :)
Of r0bert is zo slim nog niet dus >:)

NOFI

[ Voor 0% gewijzigd door André op 30-09-2002 15:36 . Reden: type in nick ]


  • Grom
  • Registratie: Juli 2002
  • Laatst online: 25-11-2024

Grom

lief hè!

crisp schreef op 30 september 2002 @ 15:31:
[...]

random is zo dom nog niet dus :)
Ik vraag me zelfs af, crisp, of de computer een beter resultaat zal halen als er gekeken wordt naar 3 op een rij van de tegenstander. Juist de onvoorspelbaarheid maakt de computer nu redelijk sterk. Ga je (beperkt) de voorspelbaarheid van een volgende zet inbouwen dan kan men hierop spelen. Ik denk dat je dan dus ook verder moet gaan met het berekenen van de computerzetten om hem sterker te maken (mijn eerste gedachtegang).

Wellicht dat dit nu juist een leuke contest zou kunnen zijn.
1) Wie maakt de sterkste computerspeler.
2) De snelste afhandeling.
3) De meeste spelvariaties (aantal kolommen en rijen, x op en rij, 3d, ?)
4) Het meest gebruikersvriendelijk.
5) Grafisch het geliktst.
Niet alle punten wegen even zwaar.

Uitgangspunt een 9 kolommen bij 7 rijen grit, browser compatible met IE5+ NS6+, 1 x computer tegen 1 x mens, Javascript als taal (geen flash, java, etc).

Verwijderd

Dat spelen om score en verdwijnende stenen is wel een leuke variant op traditioneel 4 op rij. (had in eerste instantie niet eens door dat het spel eigenlijk zo niet is, ik speel dan ook niet vaak 4 op een rij :P)

Mini-contest lijkt me wel aardig. Het maken van een min-of-meer sterk spelende computer is wel een stuk complexer, maar daardoor wel interessant.

Blijf je natuurlijk zitten met: 'wie gaat dat beoordelen?' maar als een aantal mensen al interesse heeft is het allicht al leuk om wat resultaten naast elkaar te leggen....

Verwijderd

Als je een recursieve check kunt maken op het resultaat van een zet, zou het checken zelf helemaal niet zo moeilijk meer moeten zijn. Dan hoef je alleen maar mee te geven hoeveel levels diep je wilt kijken. Heb ik ook gedaan in mijn spelletje Tsoro.

(En ja, die code is enigszins gegarbled dus dat kun je moeilijk achterhalen. Dat is omdat iedereen 'm mag gebruiken, maar als je gaat wijzigen wil ik dat wel graag ff weten, dus dan kun je de ungarbled code opvragen).

[ Voor 0% gewijzigd door Verwijderd op 30-09-2002 17:00 . Reden: tikfoutje ]


Verwijderd

hij is weer heel erg leuk crisp! verslavend zelfs...

/me Shadow3333 gaat weer spelen

  • r0bert
  • Registratie: September 2001
  • Laatst online: 13-12 18:24
Yogho schreef op 30 september 2002 @ 15:35:
[...]

Of r0bert is zo slim nog niet dus >:)

NOFI
Het is op zich best logisch dat de scores niet ver uit elkaar lopen, omdat iedere keeer als je een rij hebt, een aantal van je stenen verdwijnt. Na een bepaalde tijd heb je dus nog maar zo weinig stenen over, dat je de computer haast niet meer kunt blokkeren. Daarom is het inderdaad belangrijk om rijen van 5 of meer te maken. Want je krijgt dat voor iedere steen extra.. 1 punt ipv 1 punt voor 4 stenen.

Op zich kunnen we deze minicontest denk ik wel doen ipv de contest van enkele dagen geleden ([dHTML] contest ?), hoewel de mogelijkheden tot originele opties e.d. misschien wat beperkt is..

Verwijderd

r0bert schreef op 30 september 2002 @ 17:15:
[...]


Het is op zich best logisch dat de scores niet ver uit elkaar lopen, omdat iedere keeer als je een rij hebt, een aantal van je stenen verdwijnt. Na een bepaalde tijd heb je dus nog maar zo weinig stenen over, dat je de computer haast niet meer kunt blokkeren. Daarom is het inderdaad belangrijk om rijen van 5 of meer te maken. Want je krijgt dat voor iedere steen extra.. 1 punt ipv 1 punt voor 4 stenen.

...
Je kunt het verschil tussen spelen met een strategie en random spelen misschien iets groter maken door toe te staan dat als je een rij van 4 (of meer) maakt en er dus stenen wegvallen, dat je dan nog een steen mag leggen. Eventueel uit te breiden met de regel dat als je een rij van 5 maakt, dat je er dan nog 2 bij mag leggen, als je een rij van 6 maakt, .... enz.

'k Weet niet of dit het spel beter maakt of niet, moet eens proberen of ik in m'n lunchpauze de code van Crisp op bovenstaande manier kan aanpassen, en dan kijken of 't beter is. Maar ik beloof niks. Misschien is Crisp zelf wel sneller als-ie dit heeft gelezen.... :)

Verwijderd

Okay, ik heb 'm effe snel aangepast, hij staat hier.

Als je nu een rij van 4 of meer maakt, mag je nog een steen gooien. 't Is alleen nog niet helemaal correct als je tegenstander door jouw rij (die wegvalt) ook een rij maakt, in dat geval blijf je niet aan de beurt. (Je kan natuurlijk ook zeggen dat dat correct is: degene die de laatste rij maakte mag de volgende steen leggen.)

Enne, moeten we dit nu 4-op-een-retris gaan noemen of zo? >:)
Pagina: 1