Würfeln + Anzahl der Erfolge ausgeben

MsvP@habdichliebhasi

Erfahrenes Mitglied
Hi und hallo,

nen kleines prob.

Und zwar habe ich ein script für unsere Rollenspielrunde gebastelt, mit dem es möglich ist Würfelvorrat und Schwierigkeit des Erfolgs ausgeben zu lassen.

Ich versuche nun gerade noch das der auch Automatisch nun würfelt.

Ausgangs Variablen sind dabei:
var Würfelvorrat + var Modischwierigkeit

die eine gibt an mit wievielen Würfelt der Spieler würfelt. Und die Andere ab welchem Ergebniss der Wurf als erfolg gilt.

Angenommen ich hätte also 4 Würfel und müsste Gleich oder Höher der Schwierigkeit 6 Würfeln, und die Würfel haben 10 Seiten müsste es ja in etwa so sein (jeder würfel zählt einzeln, es geht dabei dann um die Anzahl der Würfel die als Erfolg gelten):

erfolge=0;
for (var i = 0; i > Würfelanzahl; i++)
{
gewürfelt = random(10);
trace(gewürfelt);
if (gewürfelt >= Modischwierigkeit)
{
erfolge = erfolge +1;
}
}
 
Hi,

hmm, wenn ich das recht verstanden habe, müsste das in etwa so etwas sein:
PHP:
function doDice(amt, thresh, eyes) {
	var dice = new Array(amt);
	var result = 0;
	for (var i=0; i<dice.length; i++) {
		dice[i] = int(Math.random() * eyes) + 1;
		trace("Würfel " + (i + 1) + ": " + dice[i]);
		result += dice[i];
	}
	trace("Ergebnis: " + result);
	if (result >= thresh) {
		trace("-> Gewonnen");
	} else {
		trace("-> Verloren");
	}
	return result;
}

doDice(4, 30, 10);
// 4 Würfel, Schwierigkeit 30, 10 Seiten
?

Gruß
.
 
wow... ok!

Das ist jetzt ein wenig komplizierter als meins.

Könntest du das evtl etwas aufspalten und näher erklären.

Am Ende brauch ich übrigens das Ergebniss, sprich wieviele Würfel einen Erfolg anzeigen.
 
Hallo!

Also worin besteht dein Problem? Was hat bei dir nicht funktioniert?

Folgender Vorschlag:

Du baust eine Funktion, die als Parameter die Anzahl Seiten und den Grenzwert zugewiesen bekommt, sozusagen die Funktion "1*Würfeln". Das codierst du etwa wie folgt:

PHP:
function Würfeln (Seiten, Grenzwert) {
  var Ergebnis = Math.round(Math.random()*((Seiten-1)*10)+1;
  if (Ergebnis >=Grenzwert) {
      trace ("Erfolg mit" add Ergebnis add "Würfelpunkten");
  } else {
      trace ("Misserfolg mit" add Ergebnis add "Würfelpunkten");
  }
}

Die Rechnerei erklär ich schnell:
Grundsätzlich solltest du bei Rechnereien immer die Math-Klasse verwenden, ist aktueller und eleganter.

Du generierst mit Math.random immer einen Zufallswert zwischen 0 und 1. Nun multiplizierst du den Zufallswert mit zehn, damit nach dem Runden auch eine Ganzzahl herauskommt und nicht entweder 0 oder 1. Nun wird (oh wie logisch) gerundet.
Nun habe ich aber als Faktor nicht die Anzahl Seiten angegeben sondern Letztere -1, damit ein Wert von z.B. 0-9 herauskommt. Würd ich das nicht tun, gäbe es Werte von 0-10, das willst du ja wohl kaum. Zum Schluss addier ich wieder um 1, damit auch wirklich 1-10 herauskommt und nicht 0-9.

Diese Funtion kannst du nun so oft wie du willst aufrufen, mit den entsprechenden Parametern natürlich.
PHP:
Würfeln (10,8);


(nicht getestet!)
Gruss

EDIT: Wie soll denn da einer antworten können, wenn der andere da die ganze Zeit mit TurboBoost postet?

@Datic: Tipp von einem Ex-Anfänger:
Du kannst dir viel Erklärungsarbeit sparen, indem du die Variabeln in Deutsch anschreibst. Ist zwar nicht voll professionell, aber du sparst echt Zeit!
 
Zuletzt bearbeitet:
@lue_the_duke: Im Prinzip hast Du recht. ;) Bei mir ist es halt eine Sache der Gewöhnung, ich schreibe Code aus diversen Gründen generell in Englisch. Flash mag z.B. einen Funktionenamen wie "Würfeln()" akzeptieren, andere Interpreter/Compiler stellen sich da aber eher quer.

Allerdings ist Dein Ansatz echt fixer und eleganter! :) - zumal ich die Frage auch falsch verstanden habe: es werden nicht alle Augen addiert und mit dem Grenzwert verglichen, sondern für jeden Wurf gibt es das Ergebnis "geschafft/versagt" und zurückgegeben wird die Anzahl der erfolgreichen Würfe?

Gruß
.
 
So hab ich es jedenfalls verstanden. Aber das ist ja nun wohl sehr einfach zu implementieren:

PHP:
function Würfeln (Seiten, Grenzwert) {
  var Ergebnis = Math.round(Math.random()*((Seiten-1)*10)+1;
  if (Ergebnis >=Grenzwert) {
      Erfolge++; //trace ("Erfolg mit" add Ergebnis add "Würfelpunkten");
  } else {
      Misserfolge--;  //trace ("Misserfolg mit" add Ergebnis add "Würfelpunkten");
  }
} 

function Würfelrunde (Seiten, Grenzwert, Würfe) {
   var Erfolge = 0;
   var Misserfolge = 0;
   for (i=0;i<Würfe;i++) {
      Würfeln (Seiten, Grenzwert);
   }
   trace ("Auf" add Würfe add "Würfe feierst du " add Erfolge add "Erfolge und bedauerst " add Misserfolge add "Misserfolge");
}   

Würfelrunde (10, 8, 3);

Gruss
 
Hey!

Super danke schön, hab egrade bemerkt das ich einfach nur nen mega patzer gemacht hatte.

Hät mal lieber nur fragen sollen warum die schleife die ich oben gepostet habe nicht funktioniert!

Hatte nämlich ausversehen for (i=0; i>Würfelanzahl; i++) "wenn i > als Würfelanzahl ist" geschrieben.. hab noch nicht oft mit schleifen gearbeitet und dachte da steht wann der die schleife beenden soll. Aber anscheinend steht da wie lange der die shcleife ausführen soll! *gg

Ok super jungs trotzdem danke so wie ihrs gemacht habt ists auf jednefall etwas proffesioneller! =)
 
Hallo!

Ok super jungs trotzdem danke so wie ihrs gemacht habt ists auf jednefall etwas proffesioneller! =)

Naja, so würd ich das nicht unbedingt unterschreiben. Wenn du mit deinen ca. 10 Zeilen dasselbe erreichst, wie ich mit 50, dann ist das eindeutig nicht arg professionell. Was aber bei meiner Lösung definitiv professioneller ist als bei dir, ist die Rechtschreibung. Watch out!

Gruss
 
Ich gebe es zu! Ich schreibe schnell und etwas Chat lastig! =)

Noch eine Kleinigkeit (*gg), wie bekomme ich es hin, dass ich jedes einzelne Würfelergebniss in einem Textfeld angezeigt bekomme.
Bzw. dass ich sehen kann, was ich alles gewürfelt habe?

Da man den "trace" Befehl nicht angezeigt bekommt, außer im Debugger, oder?
 

Neue Beiträge

Zurück