Würfelfunktion (bbCode?)

  • Seite 2 von 2
16.03.2023 18:23 (zuletzt bearbeitet: 16.03.2023 18:39)
#16 RE: Würfelfunktion (bbCode?)
l2
Mitglied

3D6+4 https://en.m.wikipedia.org/wiki/Dice_notation

Konnte mir lange nix drunter vorstellen ...


Math.random() liefert Werte 0 .. 1, um daraus einen normalen Würfel zu machen

1
 
var x = Math.floor(1+ 6*Math.random());   // liefert 1 .. 6
 





... würde es „Fussball spielen” heissen

vG Bernd‍

 Antworten

 Beitrag melden
16.03.2023 20:10 (zuletzt bearbeitet: 16.03.2023 20:29)
#17 RE: Würfelfunktion (bbCode?)
l2
Mitglied

auf creators Idee aufbauend, ein neuer HTML-Code für die Iconbar

1
2
3
4
5
6
7
8
9
10
11
 
<div id="custom_iconbar_wuerfel" class="xob_icon_cont">Würfel</div>
<script>
document.getElementById("custom_iconbar_wuerfel").addEventListener("click", function(){
function wuerfel() {
let x=Math.floor(1+ 6*Math.random());
return "[size=4] "+String.fromCharCode(0x2680 -1 +x)+"[/size]";
}
xob_insert(wuerfel());
});
</script>
 
 



Ausgabe z.B.: ⚄ ⚃ ⚂ ⚂ ⚀ ⚅ ⚁ ⚀ ⚁ ⚄





... würde es „Fussball spielen” heissen

vG Bernd‍

 Antworten

 Beitrag melden
17.03.2023 19:07
#18 RE: Würfelfunktion (bbCode?)
l2
Mitglied

mit dem obigen Beispiel wird, der 'Wurf' gleich ins Messagefeld kopiert.

und wenn das Ergebnis nicht 'passt', könnte man den 'Wurf' löschen und einen neuen tätigen. Wie lässt sich das verhindern?

wenn nur ein Platzhalter z.B. [3D6] ins Messagefeld geschrieben wird, bleibt das Ergebnis zunächst verborgen

1
2
3
4
5
6
7
8
 
<div id="custom_iconbar_3D6" class="xob_icon_cont">[3D6]</div>
<script>
document.getElementById("custom_iconbar_3D6").addEventListener("click", function(){
let bbc="[3D6]";
xob_insert(bbc);
});
</script>
 
 



so lassen sich noch weitere Buttons definieren

1
2
3
4
5
6
7
 
<div id="custom_iconbar_3D6_4" class="xob_icon_cont">[3D6+4]</div>
<script>
document.getElementById("custom_iconbar_3D6_4").addEventListener("click", function(){
let bbc="[3D6+4]";
xob_insert(bbc);
});
</script>
 



nun muss man nur noch dafür sorgen, dass diese Dice-Regeln ausgeführt (gewürfelt) werden, ohne dass der User das Ergebnis manipulieren kann.
Dazu bekommt der Speicher-Button eine zusätzliche click-Funktion, die das Würfeln übernimmt und das Ergebnis vorm Abspeichern im Messagetext ersetzt.
Der Einfachheit halber definiere ich diese Funktion im Scriptblock eines Würfelbuttons.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
<div id="custom_iconbar_5D10_8" class="xob_icon_cont">[5D10+8]</div>
<script>
document.getElementById("custom_iconbar_5D10_8").addEventListener("click", function(){
let bbc="[5D10+8]";
xob_insert(bbc);
});
 
document.addEventListener('DOMContentLoaded', function(){
const qs="[type='submit'][name='a1'], #submit";
var submit_but=document.querySelector(qs);
if ( ! submit_but) {alert ("wuerfel: submit Button nicht gefunden? "+qs); return}
 
submit_but.addEventListener("click", function() {
let ta=document.getElementById("messagetext");
if ( !ta ) {alert ("wuerfel: kein messagetext"); return}
 
function wuerfel3(anzahl,seiten,bonus) {
let sum=bonus;
let txt="";
for (var n=0; n < anzahl;n++) {
let x=Math.floor(1+ seiten*Math.random());
txt+=" "+(seiten>6 ? ("["+x+"]") : String.fromCharCode(0x2680 -1 +x));
sum +=x;
}
 
txt="[size=4] "+txt+"[/size]";
if (bonus>0) txt +="[+" +bonus+"]";
return txt+" ("+sum+")";
}
 
var r, rg=/\[(\d+)D(\d+)\]/;
while( r=rg.exec(ta.value)) {
// console.log("würfel r:" +r);
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],0));
}
 
rg=/\[(\d+)D(\d+)\+(\d+)\]/;
while( r=rg.exec(ta.value)) {
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],1*r[3]));
}
});
});
</script>
 



wie man sieht, sind auch andere Kombinationen möglich

evtl Code-Änderungen ( falls hier ein Bug drinsteckt) werde ich hier vorstellen https://test-v6.xobor.de/t139f27612-wuerfeln.html
dort kann man es auch ausprobieren ... viel Spaß





... würde es „Fussball spielen” heissen

vG Bernd‍

 Antworten

 Beitrag melden
Bereits Mitglied?
Jetzt anmelden!
Mitglied werden?
Jetzt registrieren!