Spiel: Minesweeper

Infos zu Spielen, Bots und Tools.
1. FC Keller
Moderator
Beiträge: 866
Registriert: 04.07.2004, 17:10
Wohnort: heimat:// Thüringen.Deutschland.eu/ Zeulenroda
Kontaktdaten:

Spiel: Minesweeper

Ungelesener Beitrag von 1. FC Keller » 28.08.2009, 21:55

Ich weiß es nervt langsam aber ich hab schonwieder ein spiel für euch ;-)

Für alle die noch nie an einem PC saßen und langeweile hatten:
In diesem Spiel geht es darum zu "erraten" wo sich die minen befinden. wenn ihr ein feld aufdeckt zeigt es euch an wie viele minen an diesem feld anliegen (horizontal, vertikal oder diagonal) Daher haben die aufgedeckten Felder immer einen wert zwischen 0 und 8. Ist der wert 0, so werden automatisch alle felder aufgedeckt die diesem anliegen.

Der Einbau ist wie immer... den folgenden code angepasst in eine js-Datei speichern und hochladen:

Code: Alles auswählen

mwBlank="http://wktools.net/images/games/4gewinnt/blue/0.gif";
mwFahne="http://wktools.net/images/games/minesweeper/moni/fahne.gif";
mwMineOK="http://wktools.net/images/games/minesweeper/moni/bombe.gif";
mwMineExp="http://wktools.net/images/games/minesweeper/moni/bombee.gif";
mwImgs="http://wktools.net/images/games/minesweeper/moni/";
mwBilder=[mwImgs+"00.gif", mwImgs+"01.gif", mwImgs+"02.gif", mwImgs+"03.gif", mwImgs+"04.gif", mwImgs+"05.gif", mwImgs+"06.gif", mwImgs+"07.gif", mwImgs+"08.gif"];
mwCols=10;
mwRows=12;
mwMines=14;
mwBefehl = "/mw";
mwSpielfeldBorderStyle="1px dotted #006600";
mwTableBorderStyle="";
mwTdBorderStyle="4px outset #444444";
mwAbsolutePosition=1;
mwSpielfeldColor="#aaaaaa";

//feste spielvariablen - nicht aendern!
mwTmpPlayer="";
mwLoesung=[];
mwOffen=[];
mwAnliegend=[];
mwGameRunning=0;

function mwBefehlsAuswertung(eingabe, sender){
  u=strip_tags(eingabe);
  m=strip_tags(sender);
  u2=u.split(" ");
  if(!mwGameRunning && u!=""){
    document.write("im Moment läuft kein Minesweeper-Spiel. Spiel starten per \""+mwBefehl+"\"");
    return;
  }
  if(!mwGameRunning){
    document.write("startet ein Minesweeper-Spiel.");
    tmp="";
    for(i=0;i<mwMines;i++){
      tmp += " "+parseInt(Math.random() * mwCols*mwRows);
    }
    sendeText(mwBefehl+tmp, m);
    mwGameRunning=1;
    mwTmpPlayer=m;
    window.setTimeout("if(mwGameRunning==1)mwGameRunning=0;", 3000); //Wenn kein Spiel innerhalb von 3 Sekunden gestartet wird wird der Status wieder auf "kein Spiel laeuft" gesetzt.
    return;
  }
  if(mwGameRunning==1 && m==mwTmpPlayer){
    mwGameRunning=2;
    mwLoesung=u.split(" ");
    for(i=0;i<mwLoesung.length;i++)mwLoesung[i]=parseInt(mwLoesung[i]);
    mwTmpPlayer="";
    mwZeichneTabelle();
    mwOffen=[];
    mwAnliegend=[];
    mwStatus=0;
    document.getElementsByTagName("table")[document.getElementsByTagName("table").length-1].style.display="none";
    return;
  }
  if(mwGameRunning != 2) return;
  mwZug(u);
}

function mwZug(u){
  u=u.toLowerCase();
  u1=u.split(" ");
  tbls=document.getElementsByTagName("table");
  if(u1.length != 2){
    document.write("ung&uuml;ltiger Zug.");
    return
  }
  u1[0]=parseInt(u1[0]);
  u1[1]=parseInt(u1[1]);
  if(u1[0] == 2){
    parent.rightFrame.document.getElementsByName("mwfeld")[u1[1]].src=mwFahne;
    tbls[tbls.length-1].style.display="none";
    return;
  }
  if(u1[0] == 1){
    if(mwLoesung.inArray(u1[1])){
      document.write("Minesweeper verloren!");
      for(i=0;i<mwLoesung.length;i++)
	parent.rightFrame.document.getElementsByName("mwfeld")[mwLoesung[i]].src=mwMineOK;
      parent.rightFrame.document.getElementsByName("mwfeld")[u1[1]].src=mwMineExp;
      mwGameRunning=0;
      setTimeout('r=parent.rightFrame;r.document.body.removeChild(r.document.getElementById("Minesweeper"))', 3000);
      return;
    }
    if(!mwOffen.inArray(parseInt(u1[1])))mwAufdecken(u1[1]);
    if(mwOffen.length==(mwCols*mwRows-mwMines)){//gewonnen
      document.write("Minesweeper gewonnen!");
      mwGameRunning=0;
      setTimeout('r=parent.rightFrame;r.document.body.removeChild(r.document.getElementById("Minesweeper"))', 3000);
      return;
    }
    else{
      tbls[tbls.length-1].style.display="none";
    }
  }
}

function mwZeichneTabelle(){
  ie=(document.all&&!window.innerWidth && navigator.userAgent.toLowerCase().indexOf("msie") != -1)?1:0;
  r = parent.rightFrame;
  rd=r.document;
  mwTabelle = rd.createElement("table");
  mwTabelle.style.borderCollapse = "collapse";
  mwTabelle.style.borderSpacing = "0px";
  mwTabelle.style.border = mwTableBorderStyle;
  mwTbody = rd.createElement("tbody");
  k=0;
  for(i=0;i<mwRows;i++){
    mwTr = rd.createElement("tr");
    for(j=0;j<mwCols;j++){
      mwTd = rd.createElement("td");
      mwTd.style.border = mwTdBorderStyle;
      if(!ie){
	mwTdImg = new Image();
	mwTdImg.src=mwBlank;
	mwTdImg.style.height = "10px";
	mwTdImg.style.width = "10px";
	mwTdImg.name = "mwfeld";
	eval("mwTdImg.onmouseup = function(e){e=e?e:window.event; k=e.which==1?1:2; parent.mainframe.sendeText('"+mwBefehl+" '+k+' "+k+"');}");
	mwTdImg.oncontextmenu=function(e){return false;};
	mwTd.appendChild(mwTdImg);
      }
      else{
	mwTdImg = "<img src='"+mwBlank+"' style='hight:10px;width:10px;' name='mwfeld' />";
	mwTd.innerHTML += mwTdImg;
	eval('mwTd.getElementsByTagName("img")[0].onmouseup=function(e){e=e?e:parent.rightFrame.event; k=((e.button==1)?1:2); parent.mainframe.sendeText("'+mwBefehl+' "+k+" '+k+'"); return false;}');
	mwTd.getElementsByTagName("img")[0].oncontextmenu=function(e){return false;};
      }
      k++;
      mwTr.appendChild(mwTd);
    }
    mwTbody.appendChild(mwTr);
  }
  mwTabelle.appendChild(mwTbody);
  mwSpielfeld = rd.createElement("p");
  mwSpielfeld.style.backgroundColor=mwSpielfeldColor;
  mwSpielfeld.style.border = mwSpielfeldBorderStyle;
  mwSpielfeld.setAttribute("id", "Minesweeper");
  mwClose = rd.createElement("div");
  mwClose.style.marginBottom="0px";
  mwClose.style.textAlign="right";
  mwCloseLink = rd.createElement("a");
  mwCloseLink.setAttribute("href", "javascript:void(document.body.removeChild(document.getElementById('Minesweeper')));");
  mwCloseLink.appendChild(rd.createTextNode("X"));
  mwClose.appendChild(mwCloseLink);
  mwSpielfeld.appendChild(mwClose);
  mwSpielfeld.appendChild(mwTabelle);
  if(mwAbsolutePosition){
    mwSpielfeld.style.position = "absolute";
    mwSpielfeld.style.zIndex = "2";
    mwSpielfeld.style.bottom = "10px";
    mwSpielfeld.style.right = "15px";
  }
  
  if(rd.getElementById("Minesweeper"))
  rd.body.removeChild(rd.getElementById("Minesweeper"));
  rd.body.insertBefore(mwSpielfeld, rd.getElementsByTagName("p")[0]);
}

function mwAufdecken(mwFeldID){
  var mineCount=0;
  var anliegend=[];
  mwFeldID=parseInt(mwFeldID);
  mwOffen[mwOffen.length]=mwFeldID;
  if(mwFeldID>=mwCols){
    j=mwFeldID-mwCols;
    if(mwFeldID%mwCols)j--;
    for(;(j%mwCols || (mwFeldID%mwCols<2)) && j<(mwFeldID-mwCols+2);j++){
      if(mwLoesung.inArray(j))mineCount++;
      anliegend[anliegend.length]=j;
    }
  }
  if(mwFeldID<(mwCols*(mwRows-1))){
    j=mwFeldID+mwCols;
    if(mwFeldID%mwCols)j--;
    for(;(j%mwCols || (mwFeldID%mwCols<2)) && j<(mwFeldID+mwCols+2);j++){
      //console.log("100ercheck"+j);
      if(mwLoesung.inArray(j))mineCount++;
      anliegend[anliegend.length]=j;
    }
  }
  if(mwFeldID%mwCols){
    //console.log(mwFeldID+"%"+mwCols+"="+(mwFeldID%mwCols))
    if(mwLoesung.inArray(mwFeldID-1))mineCount++;
    anliegend[anliegend.length]=mwFeldID-1;
  }
  if((mwFeldID+1)%mwCols){
    if(mwLoesung.inArray(mwFeldID+1))mineCount++;
    anliegend[anliegend.length]=mwFeldID+1;
  }
  //console.log(mwFeldID + " "+ anliegend + " " + mineCount);
  parent.rightFrame.document.getElementsByName("mwfeld")[mwFeldID].parentNode.style.border="solid 1px #eeeeee";
  //console.log(parent.rightFrame.document.getElementsByName("mwfeld")[mwFeldID].src=mwBilder[mineCount]);
  parent.rightFrame.document.getElementsByName("mwfeld")[mwFeldID].src=mwBilder[mineCount];
  if(mwOffen.length==(mwCols*mwRows-mwMines))return;
  if(mineCount==0){
    for(mwTmp=0;mwTmp<anliegend.length;mwTmp++){
      //console.log("offen:");
      //console.log(mwOffen);
      if(!mwAnliegend.inArray(anliegend[mwTmp]))mwAnliegend[mwAnliegend.length]=(anliegend[mwTmp]);
    }
  }
  for(mwTmp=0;mwTmp<mwAnliegend.length;mwTmp++){
    if(!mwOffen.inArray(mwAnliegend[mwTmp]))mwAufdecken(mwAnliegend[mwTmp]);
  }
}
In den ersten Zeilen stellt ihr die bilder-urls ein. zuerst ein transparentes, dann die fahne , dann die normale und die explodierte mine.
danach kommt das verzeichnis in dem alle zahlen-bilder liegen und anschließend die auflistung der zahlenbilder. für die 0 könnt ihr auch ein transparentes bild nehmen. die bilder haben maße von 10x10 pixel. moni hat wie immer ein paar bildchen für euch vorbereitet: http://wktools.net/images/games/mineswe ... r-moni.zip ladet euch dieses zip-File runter, entpackt es und ladet die bilder auf euren Webspace hoch.

Die Zahl hinter mwCols ist die Anzahl an spalten (nebeneinander), mwRows die Zeilen (höhe) und mwMines die Anzahl der Minen die zufällig im feld verteilt werden.

mwBefehl ist wie bei den letzten 3 Spielen auch der Befehl den ihr euch selbst aussuchen könnt.
In den folgenden 5 Zeilen könnt ihr wie immer das Desgn des Spielfeldes idividuell anpassen. mwSpielfeldColor ist dabei so ziemlich das wichtigste. Das ist die Hintergrundfarbe des spielfeldes. Die anderen style-einstellungen sind eher unwichtig.

anschließend legt ihr wie immer den zuvor eingestellten chatefehl an.

Code: Alles auswählen

<script type=text/javascript>if(parent.info){mwBefehlsAuswertung('%user%','%me%');}else{document.write('spielt Minesweeper')}</script>

craig
Beiträge: 2
Registriert: 01.08.2008, 23:58

Re: Minesweeper

Ungelesener Beitrag von craig » 28.08.2009, 22:24

hab es eingebaut funktioniert super :D

iDark
Beiträge: 21
Registriert: 06.07.2009, 19:50
Kontaktdaten:

Re: Minesweeper

Ungelesener Beitrag von iDark » 29.08.2009, 02:34

bei mir geht es irgendwie nicht.

Wenn ich /ms befehl eingebe, wird das Spiel nach ne Sek. wieder beendet :[

(02:32) iDark startet ein Minesweeper-Spiel.
(02:32) iDark im Moment läuft kein Minesweeper-Spiel. Spiel starten per "/ms"

Bilder eingetragen
Grundscript
JS-Datei
Befehl ist auch in ordnung >.<

1. FC Keller
Moderator
Beiträge: 866
Registriert: 04.07.2004, 17:10
Wohnort: heimat:// Thüringen.Deutschland.eu/ Zeulenroda
Kontaktdaten:

Re: Minesweeper

Ungelesener Beitrag von 1. FC Keller » 29.08.2009, 02:46

das problem hatte ich selbst auch, hab aber den folgenden Lösungsansatz selbst noch nicht getestet. in der ersten Funktion findest du folgende Zeile:

Code: Alles auswählen

window.setTimeout("if(mwGameRunning==1)mwGameRunning=0;", 3000); //Wenn kein Spiel innerhalb von 3 Sekunden gestartet wird wird der Status wieder auf "kein Spiel laeuft" gesetzt.
Diese sorgt dafür dass ein Spielstart-Befehl innerhalb von 3 Sekunden Quittiert werden muss und wenn das nicht passiert dieser als Ungültig angesehen wird. Allerdings kann dies bei zu stark verzögertem Laden des Streams oder auch im Problemmodus zu problemen führen, da die Antwort dann ggf. dann nicht binnen 3 Sekunden ankommt. Um das Problem zu lösen erhöht einfach die 3000 vekiebig (bspw auf 10 000). Bedenkt dabei allerdings dass es, je höher dieses Zeitlimit ist desto einfacher wird bei diesem spiel zu schummeln.

iDark
Beiträge: 21
Registriert: 06.07.2009, 19:50
Kontaktdaten:

Re: Minesweeper

Ungelesener Beitrag von iDark » 29.08.2009, 02:58

Mh.. egal wie hoch ich Zeitlimit setze, ändert sich Ergebnis nicht. :oops:

wieso lief es bei Craig problemlos und bei mir macht es solche probleme ..habe ich vllt doch irgendwas übersehen :-O


EDIT: Nun zeigen die ganze 'Minispiele' + Hangman + Mastermind + Minesweeper gleiche Fehl-Ergebnisse
(07:21) iDark startet ein Hangman-Spiel.
(07:21) iDark im Moment läuft kein Hangman-Spiel
(07:24) iDark startet ein Mastermind-Spiel.
(07:24) iDark im Moment läuft kein Mastermind-Spiel. Spiel starten per "/mm"
Minispiele:
(07:28) iDark
(07:28) iDark schmeisst den einarmigen Banditen an: BILD!

Schreibleiste: /bandit 18
Jetzt spinnen fast alle Spiele [bis auf wordmix-4gewinnt-ttt-dame]

craig
Beiträge: 2
Registriert: 01.08.2008, 23:58

Re: Minesweeper

Ungelesener Beitrag von craig » 29.08.2009, 16:24

probier mal den befehl unter /mw zu speichern :)

DarkModi
Beiträge: 45
Registriert: 08.05.2005, 18:44

Re: Minesweeper

Ungelesener Beitrag von DarkModi » 29.08.2009, 22:45

Ich hab das Script jetzt nicht getestet, aber geh mal bei Minesweeper davon aus, dass es ein Singleplayer-Game ist und auch niemand zusehen kann. Wieso werden die Befehle also dann über den Chatserver zuerst in den Stream gepostet und dann clientseitig interpretiert anstatt einfach direkt clientseitig über JS ausgeführt zu werden?

Keine Kritik oder so, fiel mir halt nur beim Drüberfliegen auf. (Die Frage hat sich natürlich erledigt, falls das Spiel zum Zuschauen gedacht ist.)

TauchBlubba
Beiträge: 79
Registriert: 21.10.2007, 19:04
Wohnort: Altenstadt (Mittelhessen)
Kontaktdaten:

Re: Minesweeper

Ungelesener Beitrag von TauchBlubba » 29.08.2009, 22:46

Ist Multi :wink:

InvaderX
Beiträge: 49
Registriert: 21.08.2009, 00:10

Re: Minesweeper

Ungelesener Beitrag von InvaderX » 09.09.2009, 19:21

1. FC Keller hat geschrieben:das problem hatte ich selbst auch, hab aber den folgenden Lösungsansatz selbst noch nicht getestet. in der ersten Funktion findest du folgende Zeile:

Code: Alles auswählen

window.setTimeout("if(mwGameRunning==1)mwGameRunning=0;", 3000); //Wenn kein Spiel innerhalb von 3 Sekunden gestartet wird wird der Status wieder auf "kein Spiel laeuft" gesetzt.
Diese sorgt dafür dass ein Spielstart-Befehl innerhalb von 3 Sekunden Quittiert werden muss und wenn das nicht passiert dieser als Ungültig angesehen wird. Allerdings kann dies bei zu stark verzögertem Laden des Streams oder auch im Problemmodus zu problemen führen, da die Antwort dann ggf. dann nicht binnen 3 Sekunden ankommt. Um das Problem zu lösen erhöht einfach die 3000 vekiebig (bspw auf 10 000). Bedenkt dabei allerdings dass es, je höher dieses Zeitlimit ist desto einfacher wird bei diesem spiel zu schummeln.
Jetzt geht des bei mir im Chat ohne Probleme thx für die Lösung und des Spiel

Blachy66
Beiträge: 9
Registriert: 10.11.2009, 23:01
Wohnort: Lünen

Re: Spiel: Minesweeper

Ungelesener Beitrag von Blachy66 » 12.11.2009, 12:35

Ein dickes Lob an 1 FC Keller super Game für den Chat und auch ein Danke für die tolle Hilfe. :)
Hilfe indem mit der Tipp gegeben wurde wie man das Spiel weiter nach rechts verschiebt.
Hier die Lösung:
mwSpielfeld.style.zIndex = "2";
mwSpielfeld.style.bottom = "10px";
mwSpielfeld.style.right = "0px"; <-- vorher 15

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 28 Gäste