none
Mathematischer Beweis

    Frage

  • Hallo Leute,

    folgender Code zeigt auf, dass beim Brettspiel Risiko der Angreifer mit seinen drei Würfeln im Vorteil ist gegenüber dem Verteidiger mit seinen zwei Würfeln( bei gleicher Würfelzahl gewinnt der Verteidiger). Statistisch gesehen lohnt sich ein Angriff eigentlich immer. Ein Sieg ist immer wahrscheinlicher als eine Niederlage oder ein Unentschieden. Ich stelle mir jetzt die Frage, wie man das mathematisch beweisen könnte.....

    Quellcode Designer:

    //Form1-Designer
    namespace RisikoWuerfel
    {
        partial class Form1
        {
            /// <summary>
            /// Erforderliche Designervariable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Verwendete Ressourcen bereinigen.
            /// </summary>
            /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Vom Windows Form-Designer generierter Code
    
            /// <summary>
            /// Erforderliche Methode für die Designerunterstützung.
            /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
            /// </summary>
            private void InitializeComponent()
            {
                this.button1 = new System.Windows.Forms.Button();
                this.pictureBox1 = new System.Windows.Forms.PictureBox();
                this.label1 = new System.Windows.Forms.Label();
                this.textBox1 = new System.Windows.Forms.TextBox();
                this.listBox1 = new System.Windows.Forms.ListBox();
                this.textBox2 = new System.Windows.Forms.TextBox();
                this.pictureBox2 = new System.Windows.Forms.PictureBox();
                this.pictureBox3 = new System.Windows.Forms.PictureBox();
                this.trackBar1 = new System.Windows.Forms.TrackBar();
                this.label2 = new System.Windows.Forms.Label();
                this.label3 = new System.Windows.Forms.Label();
                this.checkBox1 = new System.Windows.Forms.CheckBox();
                this.label4 = new System.Windows.Forms.Label();
                this.pictureBox4 = new System.Windows.Forms.PictureBox();
                this.pictureBox5 = new System.Windows.Forms.PictureBox();
                this.menuStrip1 = new System.Windows.Forms.MenuStrip();
                this.menuToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
                this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
                this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
                this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
                this.checkBox2 = new System.Windows.Forms.CheckBox();
                this.radioButton1 = new System.Windows.Forms.RadioButton();
                this.radioButton2 = new System.Windows.Forms.RadioButton();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
                this.menuStrip1.SuspendLayout();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.BackColor = System.Drawing.Color.Yellow;
                this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
                this.button1.ForeColor = System.Drawing.Color.Red;
                this.button1.Location = new System.Drawing.Point(212, 20);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(75, 23);
                this.button1.TabIndex = 1;
                this.button1.Text = "Run";
                this.button1.UseVisualStyleBackColor = false;
                this.button1.Click += new System.EventHandler(this.button1_Click);
                // 
                // pictureBox1
                // 
                this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
                this.pictureBox1.Location = new System.Drawing.Point(29, 65);
                this.pictureBox1.Name = "pictureBox1";
                this.pictureBox1.Size = new System.Drawing.Size(89, 84);
                this.pictureBox1.TabIndex = 2;
                this.pictureBox1.TabStop = false;
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(12, 25);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(67, 13);
                this.label1.TabIndex = 3;
                this.label1.Text = "Simulationen";
                // 
                // textBox1
                // 
                this.textBox1.Location = new System.Drawing.Point(85, 20);
                this.textBox1.Name = "textBox1";
                this.textBox1.Size = new System.Drawing.Size(100, 20);
                this.textBox1.TabIndex = 4;
                // 
                // listBox1
                // 
                this.listBox1.FormattingEnabled = true;
                this.listBox1.Location = new System.Drawing.Point(752, 43);
                this.listBox1.Name = "listBox1";
                this.listBox1.Size = new System.Drawing.Size(36, 381);
                this.listBox1.TabIndex = 5;
                // 
                // textBox2
                // 
                this.textBox2.Location = new System.Drawing.Point(286, 219);
                this.textBox2.Multiline = true;
                this.textBox2.Name = "textBox2";
                this.textBox2.ReadOnly = true;
                this.textBox2.Size = new System.Drawing.Size(106, 192);
                this.textBox2.TabIndex = 7;
                this.textBox2.Text = "DebugBox";
                // 
                // pictureBox2
                // 
                this.pictureBox2.BackColor = System.Drawing.Color.Transparent;
                this.pictureBox2.Location = new System.Drawing.Point(135, 65);
                this.pictureBox2.Name = "pictureBox2";
                this.pictureBox2.Size = new System.Drawing.Size(89, 84);
                this.pictureBox2.TabIndex = 8;
                this.pictureBox2.TabStop = false;
                // 
                // pictureBox3
                // 
                this.pictureBox3.BackColor = System.Drawing.Color.Transparent;
                this.pictureBox3.Location = new System.Drawing.Point(246, 65);
                this.pictureBox3.Name = "pictureBox3";
                this.pictureBox3.Size = new System.Drawing.Size(89, 84);
                this.pictureBox3.TabIndex = 9;
                this.pictureBox3.TabStop = false;
                // 
                // trackBar1
                // 
                this.trackBar1.AllowDrop = true;
                this.trackBar1.Location = new System.Drawing.Point(29, 219);
                this.trackBar1.Maximum = 1000;
                this.trackBar1.Minimum = 10;
                this.trackBar1.Name = "trackBar1";
                this.trackBar1.RightToLeft = System.Windows.Forms.RightToLeft.No;
                this.trackBar1.Size = new System.Drawing.Size(222, 45);
                this.trackBar1.TabIndex = 10;
                this.trackBar1.TickStyle = System.Windows.Forms.TickStyle.Both;
                this.trackBar1.Value = 100;
                this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll);
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(26, 192);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(63, 13);
                this.label2.TabIndex = 11;
                this.label2.Text = "Dice-Speed";
                // 
                // label3
                // 
                this.label3.AutoSize = true;
                this.label3.Location = new System.Drawing.Point(44, 283);
                this.label3.Name = "label3";
                this.label3.Size = new System.Drawing.Size(0, 13);
                this.label3.TabIndex = 12;
                // 
                // checkBox1
                // 
                this.checkBox1.AutoSize = true;
                this.checkBox1.Location = new System.Drawing.Point(397, 26);
                this.checkBox1.Name = "checkBox1";
                this.checkBox1.Size = new System.Drawing.Size(89, 17);
                this.checkBox1.TabIndex = 13;
                this.checkBox1.Text = "Don\'t present";
                this.checkBox1.UseVisualStyleBackColor = true;
                // 
                // label4
                // 
                this.label4.AutoSize = true;
                this.label4.Font = new System.Drawing.Font("Modern No. 20", 27.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                this.label4.ForeColor = System.Drawing.Color.Red;
                this.label4.Location = new System.Drawing.Point(341, 83);
                this.label4.Name = "label4";
                this.label4.Size = new System.Drawing.Size(66, 38);
                this.label4.TabIndex = 14;
                this.label4.Text = "Vs.";
                // 
                // pictureBox4
                // 
                this.pictureBox4.BackColor = System.Drawing.Color.Transparent;
                this.pictureBox4.Location = new System.Drawing.Point(426, 65);
                this.pictureBox4.Name = "pictureBox4";
                this.pictureBox4.Size = new System.Drawing.Size(89, 84);
                this.pictureBox4.TabIndex = 15;
                this.pictureBox4.TabStop = false;
                // 
                // pictureBox5
                // 
                this.pictureBox5.BackColor = System.Drawing.Color.Transparent;
                this.pictureBox5.Location = new System.Drawing.Point(542, 65);
                this.pictureBox5.Name = "pictureBox5";
                this.pictureBox5.Size = new System.Drawing.Size(89, 84);
                this.pictureBox5.TabIndex = 16;
                this.pictureBox5.TabStop = false;
                // 
                // menuStrip1
                // 
                this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
                this.menuToolStripMenuItem});
                this.menuStrip1.Location = new System.Drawing.Point(0, 0);
                this.menuStrip1.Name = "menuStrip1";
                this.menuStrip1.Size = new System.Drawing.Size(800, 33);
                this.menuStrip1.TabIndex = 17;
                this.menuStrip1.Text = "menuStrip1";
                // 
                // menuToolStripMenuItem
                // 
                this.menuToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
                this.menuToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
                this.helpToolStripMenuItem,
                this.exitToolStripMenuItem,
                this.helpToolStripMenuItem1});
                this.menuToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                this.menuToolStripMenuItem.Name = "menuToolStripMenuItem";
                this.menuToolStripMenuItem.Size = new System.Drawing.Size(73, 29);
                this.menuToolStripMenuItem.Text = "Menu";
                // 
                // helpToolStripMenuItem
                // 
                this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
                this.helpToolStripMenuItem.Size = new System.Drawing.Size(135, 30);
                this.helpToolStripMenuItem.Text = "About";
                this.helpToolStripMenuItem.Click += new System.EventHandler(this.helpToolStripMenuItem_Click);
                // 
                // exitToolStripMenuItem
                // 
                this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
                this.exitToolStripMenuItem.Size = new System.Drawing.Size(135, 30);
                this.exitToolStripMenuItem.Text = "Exit";
                this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
                // 
                // helpToolStripMenuItem1
                // 
                this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1";
                this.helpToolStripMenuItem1.Size = new System.Drawing.Size(135, 30);
                this.helpToolStripMenuItem1.Text = "Help";
                this.helpToolStripMenuItem1.Click += new System.EventHandler(this.helpToolStripMenuItem1_Click);
                // 
                // checkBox2
                // 
                this.checkBox2.AutoSize = true;
                this.checkBox2.Location = new System.Drawing.Point(510, 26);
                this.checkBox2.Name = "checkBox2";
                this.checkBox2.Size = new System.Drawing.Size(109, 17);
                this.checkBox2.TabIndex = 18;
                this.checkBox2.Text = "Don\'t Show dices";
                this.checkBox2.UseVisualStyleBackColor = true;
                // 
                // radioButton1
                // 
                this.radioButton1.AutoSize = true;
                this.radioButton1.Checked = true;
                this.radioButton1.Location = new System.Drawing.Point(629, 23);
                this.radioButton1.Name = "radioButton1";
                this.radioButton1.Size = new System.Drawing.Size(108, 17);
                this.radioButton1.TabIndex = 19;
                this.radioButton1.TabStop = true;
                this.radioButton1.Text = "Einzelauswertung";
                this.radioButton1.UseVisualStyleBackColor = true;
                // 
                // radioButton2
                // 
                this.radioButton2.AutoSize = true;
                this.radioButton2.Location = new System.Drawing.Point(629, 43);
                this.radioButton2.Name = "radioButton2";
                this.radioButton2.Size = new System.Drawing.Size(117, 17);
                this.radioButton2.TabIndex = 20;
                this.radioButton2.TabStop = true;
                this.radioButton2.Text = "Massenauswertung";
                this.radioButton2.UseVisualStyleBackColor = true;
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(800, 450);
                this.Controls.Add(this.radioButton2);
                this.Controls.Add(this.radioButton1);
                this.Controls.Add(this.checkBox2);
                this.Controls.Add(this.pictureBox5);
                this.Controls.Add(this.pictureBox4);
                this.Controls.Add(this.label4);
                this.Controls.Add(this.checkBox1);
                this.Controls.Add(this.label3);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.trackBar1);
                this.Controls.Add(this.pictureBox3);
                this.Controls.Add(this.pictureBox2);
                this.Controls.Add(this.textBox2);
                this.Controls.Add(this.listBox1);
                this.Controls.Add(this.textBox1);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.pictureBox1);
                this.Controls.Add(this.button1);
                this.Controls.Add(this.menuStrip1);
                this.MainMenuStrip = this.menuStrip1;
                this.Name = "Form1";
                this.Text = "Form1";
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
                this.menuStrip1.ResumeLayout(false);
                this.menuStrip1.PerformLayout();
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.PictureBox pictureBox1;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.TextBox textBox1;
            private System.Windows.Forms.ListBox listBox1;
            private System.Windows.Forms.TextBox textBox2;
            private System.Windows.Forms.PictureBox pictureBox2;
            private System.Windows.Forms.PictureBox pictureBox3;
            private System.Windows.Forms.TrackBar trackBar1;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.Label label3;
            private System.Windows.Forms.CheckBox checkBox1;
            private System.Windows.Forms.Label label4;
            private System.Windows.Forms.PictureBox pictureBox4;
            private System.Windows.Forms.PictureBox pictureBox5;
            private System.Windows.Forms.MenuStrip menuStrip1;
            private System.Windows.Forms.ToolStripMenuItem menuToolStripMenuItem;
            private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
            private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
            private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem1;
            private System.Windows.Forms.CheckBox checkBox2;
            private System.Windows.Forms.RadioButton radioButton1;
            private System.Windows.Forms.RadioButton radioButton2;
        }
    }
    
    //Form2_Designer
    namespace RisikoWuerfel
    {
        partial class Form2
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    
            #region Windows Form Designer generated code
    
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
    
    
            #endregion
    
    
        }
    }
    //Form3 Designer
    namespace RisikoWuerfel
    {
        partial class Form3
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
    
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.textBox1 = new System.Windows.Forms.TextBox();
                this.SuspendLayout();
                // 
                // textBox1
                // 
                this.textBox1.Font = new System.Drawing.Font("Modern No. 20", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                this.textBox1.Location = new System.Drawing.Point(0, 0);
                this.textBox1.Multiline = true;
                this.textBox1.Name = "textBox1";
                this.textBox1.Size = new System.Drawing.Size(807, 455);
                this.textBox1.TabIndex = 0;
                // 
                // Form3
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(800, 450);
                this.Controls.Add(this.textBox1);
                this.Name = "Form3";
                this.Text = "Help";
                this.Load += new System.EventHandler(this.Form3_Load);
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.TextBox textBox1;
        }
    }
    

    Quellcode:

    //Form1
    using System;
    using System.Drawing;
    using System.Collections.Generic;
    using System.Windows.Forms;
    
    namespace RisikoWuerfel
    {
        public partial class Form1 : Form
        {
            //initialisiert die Anzahl der Würfe durch eine Usereingabe. Letztere wird ersterer kumulativ zugewiesen
            private int wiederholungen, SummeWiederholungen;
            // wird innerhalb des TickEvents inkrementiert und dient der Abbruchbedingung
            private int iteration;
            //initialisiert die Liste der virtuellen Würfe(erster Würfel)
            private List<int> DiceList = new List<int>();
            //initialisiert die Liste der ersten drei Würfel. Die Liste wird(später) aufsteigend sortiert.
            private List<int> SortDice = new List<int>();
            //initialisiert die Liste der letzten zwei Würfel. Die Liste wird(später) aufsteigend sortiert.
            private List<int> DiceList2 = new List<int>();
            //instanziert ein Objekt der Klasse Timer
            private Timer timer = new Timer();
            //instanziert über einen Kostruktor ein Objekt der Klasse Random. Die Konstruktoren sind jeweils unterschiedlich
            private Random rndW1 = new Random(10 * DateTime.Now.Millisecond);
            private Random rndW2 = new Random(100 * DateTime.Now.Millisecond);
            private Random rndW3 = new Random(200 * DateTime.Now.Millisecond);
            private Random rndW1for2 = new Random(300 * DateTime.Now.Millisecond);
            private Random rndW2for2 = new Random(400 * DateTime.Now.Millisecond);
            // initialisiert sechs Würfel
            private double Dice1 = 0;
            private double Dice2 = 0;
            private double Dice3 = 0;
            private double Dice4 = 0;
            private double Dice5 = 0;
            private double Dice6 = 0;
            //initialisiert ein Array, in welche(später) die Häufigkeit der gezogenen Würfel verfrachtet wird
            private double[] Calc = new double[6];
            //initialisiert eine Variable, die bestimmt, ob die Häufigkeitangaben und die Anzeigebox dargestellt werden
            private bool ShowDice = true;
            //initialisiert eine Variable, die bestimmt, ob die Würfelbilder dargestellt werden
            private bool ShowDicePic = true;
            //initialisert eine dynamische Anzeigeliste, in der die Siege, Niederlagen etc.. aufgezeigt werden
            ListBox Gewinnerliste = new ListBox();
            //initialisiert eine Variable, anhand derer bestimmt wird, wer gewonnen, verloren etc.. hat
            private byte PunkteDreier = 2;
            private byte PunkteZweier = 2;
            //initialisert Variablen, anhand derer bestimmt wird, wieviel mal gewonnen, verloren etc.. wurde
            private int SiegDreier = 0, SiegZweier = 0, Unentschieden = 0;
    
            //Konstruktor der Klasse
            public Form1()
            {
                InitializeComponent();
                timer.Tick += new EventHandler(timer_Tick);
                label3.Text = trackBar1.Value.ToString();
            }
            //verarbeite Klick auf den Run-Button
            private void button1_Click(object sender, EventArgs e)
            {
                textBox2.Text = "";
                bool isDigit = false;
                timer.Interval = trackBar1.Value;
                Gewinnerliste.Items.Clear();
                //prüfe, ob Eingabe eine Zahl ist
                foreach (char x in textBox1.Text)
                {
                    if (Char.IsDigit(x))
                        isDigit = true;
                }
                if (textBox1.Text != "" && isDigit)
                    wiederholungen = Convert.ToInt32(textBox1.Text);
                else
                {
                    MessageBox.Show("Bitte Simulationsanzahl eingeben!", "Important Note", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    return;
                }
                if (checkBox1.Checked && wiederholungen <= 100)
                {
                    MessageBox.Show("Diese Option ist nur bei mehr als hundert Würfen zulässig!", "Important Note", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    textBox1.BackColor = Color.Red;
                    return;
                }
                else
                    textBox1.BackColor = Color.White;
                if (radioButton2.Checked && wiederholungen <= 50)
                {
                    MessageBox.Show("Diese Option ist nur bei mehr als fünfzig Würfen zulässig!", "Important Note", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    textBox1.BackColor = Color.Red;
                    return;
                }
                else
                    textBox1.BackColor = Color.White;
                //Sofern die checkbox Don't present aktiviert wurde, deaktiviere alle Anzeigen
                if (checkBox1.Checked)
                {
                    ShowDice = false;
                    listBox1.Enabled = false;
                    listBox1.Visible = false;
                }
                //andernfalls aktivere sie
                else
                {
                    ShowDice = true;
                    listBox1.Enabled = true;
                    listBox1.Visible = true;
                }
                //Sofern die checkbox ShowWinner&Stat nicht deaktiviert wurde,aktiviere die Textbox
                this.Controls.Add(Gewinnerliste);
                Gewinnerliste.Size = new Size(206, 192);
                Gewinnerliste.Location = new Point(450, 223);
                Gewinnerliste.BackColor = Color.YellowGreen;
                Gewinnerliste.Visible = true;
                //Sofern die checkbox Don't Show dices aktiviert wurde, deaktiviere alle Bilder(PictureBoxen)
                if (checkBox2.Checked)
                {
                    ShowDicePic = false;
                    pictureBox1.Enabled = false;
                    pictureBox2.Enabled = false;
                    pictureBox3.Enabled = false;
                    pictureBox4.Enabled = false;
                    pictureBox5.Enabled = false;
                    pictureBox1.Visible = false;
                    pictureBox2.Visible = false;
                    pictureBox3.Visible = false;
                    pictureBox4.Visible = false;
                    pictureBox5.Visible = false;
                }
                //andernfalls zeige sie an
                else
                {
                    ShowDicePic = true;
                    pictureBox1.Enabled = true;
                    pictureBox2.Enabled = true;
                    pictureBox3.Enabled = true;
                    pictureBox4.Enabled = true;
                    pictureBox5.Enabled = true;
                    pictureBox1.Visible = true;
                    pictureBox2.Visible = true;
                    pictureBox3.Visible = true;
                    pictureBox4.Visible = true;
                    pictureBox5.Visible = true;
                }
                //setze die inkrementierte Variable wieder auf 0
                iteration = 0;
                listBox1.Items.Clear();
                //lege kummulativ den Wert von wiederholungen in SummeWiederholungen ab
                SummeWiederholungen += wiederholungen;
                // starte den Timer und damit das Tickevent
                timer.Start();
            }
            //Tickevent
            void timer_Tick(object sender, EventArgs e)
            {
                int dice3_1, dice3_2, dice3_3, dice2_1, dice2_2;
                //setze die Counter immer wieder auf Ihren Anfangswert
                PunkteZweier = 2;
                PunkteDreier = 2;
                //sofern Usereingabe erreicht, stoppe das Event
                if (iteration > wiederholungen - 1)
                {
                    timer.Stop();
                    //sofern Checkbox nicht gesetzt, werte die Würfelgruppen aus       
                    Gewinnerliste.Items.Add("++++++++++++++++++++++++" + Environment.NewLine);
                    Gewinnerliste.Items.Add("Siege der Dreiergruppe:" + SiegDreier + " (" + Math.Round(Convert.ToDouble(SiegDreier) / (Convert.ToDouble(SiegDreier) + Convert.ToDouble(SiegZweier) + Convert.ToDouble(Unentschieden)), 3) * 100 + "%)" + Environment.NewLine);
                    Gewinnerliste.Items.Add("Siege der Zweiergruppe:" + SiegZweier + " (" + Math.Round(Convert.ToDouble(SiegZweier) / (Convert.ToDouble(SiegDreier) + Convert.ToDouble(SiegZweier) + Convert.ToDouble(Unentschieden)), 3) * 100 + "%)" + Environment.NewLine);
                    Gewinnerliste.Items.Add("Unentschieden:" + Unentschieden + " (" + Math.Round(Convert.ToDouble(Unentschieden) / (Convert.ToDouble(SiegDreier) + Convert.ToDouble(SiegZweier) + Convert.ToDouble(Unentschieden)), 3) * 100 + "%)" + Environment.NewLine);
                    Gewinnerliste.Items.Add("++++++++++++++++++++++++");
                    if (ShowDice)
                    {
                        textBox2.BackColor = Color.White;
                        this.Auswerten();
                    }
                    else
                    {
                        textBox2.Text = "Anzeige wurde deaktiviert";
                        textBox2.BackColor = Color.Red;
                    }
                    return;
                }
                //Erzeuge Zufallszahlen für alle fünf Würfel
                dice3_1 = rndW1.Next(1, 7);
                dice3_2 = rndW2.Next(1, 7);
                dice3_3 = rndW3.Next(1, 7);
                dice2_1 = rndW1for2.Next(1, 7);
                dice2_2 = rndW2for2.Next(1, 7);
                if (SortDice.Count > 0)
                    SortDice.Clear();
                if (DiceList2.Count > 0)
                    DiceList2.Clear();
                //Füge die zwei Würfelzahlen der Liste bei
                DiceList2.Add(dice2_1);
                DiceList2.Add(dice2_2);
                //Füge die drei Würfelzahlen der anderen Liste bei
                SortDice.Add(dice3_1);
                SortDice.Add(dice3_2);
                SortDice.Add(dice3_3);
                //sortiere die Liste absteigend
                DiceList2.Sort();
                //sortiere die Liste aufsteigend
                DiceList2.Reverse();
                // dasselbe für die andere Liste
                SortDice.Sort();
                SortDice.Reverse();
                //füge der Liste den virtuellen Würfel(den Ersten der Fünfen, unsortiert) bei. Wird zur Anzeige des Würfelauges benötigt
                DiceList.Add(dice3_1);
                try
                {
                    //Werte den virtuellen Würfel(den Ersten der Fünfen,unsortiert) aus, indem inkrementiert wird
                    switch (dice3_1)
                    {
                        case 1:
                            Dice1++;
                            break;
                        case 2:
                            Dice2++;
                            break;
                        case 3:
                            Dice3++;
                            break;
                        case 4:
                            Dice4++;
                            break;
                        case 5:
                            Dice5++;
                            break;
                        case 6:
                            Dice6++;
                            break;
                    }
                    //verfrachte die relativen Häufigkeiten in das Array
                    Calc[0] = (Dice1 / SummeWiederholungen) * 100;
                    Calc[1] = (Dice2 / SummeWiederholungen) * 100;
                    Calc[2] = (Dice3 / SummeWiederholungen) * 100;
                    Calc[3] = (Dice4 / SummeWiederholungen) * 100;
                    Calc[4] = (Dice5 / SummeWiederholungen) * 100;
                    Calc[5] = (Dice6 / SummeWiederholungen) * 100;
                    //sofern die globale Boolean nicht aktiviert ist, also TRUE
                    if (ShowDicePic)
                    {
                            //werte ersten Würfel der Zweiergruppe aus
                            switch (DiceList2[0])
                            {
                                case 1:
                                    pictureBox4.Image = Properties.Resources.Wuerfel_1;
                                    break;
                                case 2:
                                    pictureBox4.Image = Properties.Resources.Wuerfel_2;
                                    break;
                                case 3:
                                    pictureBox4.Image = Properties.Resources.Wuerfel_3;
                                    break;
                                case 4:
                                    pictureBox4.Image = Properties.Resources.Wuerfel_4;
                                    break;
                                case 5:
                                    pictureBox4.Image = Properties.Resources.Wuerfel_5;
                                    break;
                                case 6:
                                    pictureBox4.Image = Properties.Resources.Wuerfel_6;
                                    break;
                            }
                        //werte zweiten Würfel der Zweiergruppe aus
                        switch (DiceList2[1])
                            {
                                case 1:
                                    pictureBox5.Image = Properties.Resources.Wuerfel_1;
                                    break;
                                case 2:
                                    pictureBox5.Image = Properties.Resources.Wuerfel_2;
                                    break;
                                case 3:
                                    pictureBox5.Image = Properties.Resources.Wuerfel_3;
                                    break;
                                case 4:
                                    pictureBox5.Image = Properties.Resources.Wuerfel_4;
                                    break;
                                case 5:
                                    pictureBox5.Image = Properties.Resources.Wuerfel_5;
                                    break;
                                case 6:
                                    pictureBox5.Image = Properties.Resources.Wuerfel_6;
                                    break;
                            }
                        //werte ersten Würfel der Dreierergruppe aus
                        switch (SortDice[0])
                            {
                                case 1:
                                    pictureBox1.Image = Properties.Resources.Wuerfel_1;
                                    break;
                                case 2:
                                    pictureBox1.Image = Properties.Resources.Wuerfel_2;
                                    break;
                                case 3:
                                    pictureBox1.Image = Properties.Resources.Wuerfel_3;
                                    break;
                                case 4:
                                    pictureBox1.Image = Properties.Resources.Wuerfel_4;
                                    break;
                                case 5:
                                    pictureBox1.Image = Properties.Resources.Wuerfel_5;
                                    break;
                                case 6:
                                    pictureBox1.Image = Properties.Resources.Wuerfel_6;
                                    break;
                            }
                            // werte zweiten Würfel der Dreierergruppe aus
                            switch (SortDice[1])
                            {
                                case 1:
                                    pictureBox2.Image = Properties.Resources.Wuerfel_1;
                                    break;
                                case 2:
                                    pictureBox2.Image = Properties.Resources.Wuerfel_2;
                                    break;
                                case 3:
                                    pictureBox2.Image = Properties.Resources.Wuerfel_3;
                                    break;
                                case 4:
                                    pictureBox2.Image = Properties.Resources.Wuerfel_4;
                                    break;
                                case 5:
                                    pictureBox2.Image = Properties.Resources.Wuerfel_5;
                                    break;
                                case 6:
                                    pictureBox2.Image = Properties.Resources.Wuerfel_6;
                                    break;
                            }
                          // werte dritten Würfel der Dreierergruppe aus
                            switch (SortDice[2])
                            {
                                case 1:
                                    pictureBox3.Image = Properties.Resources.Wuerfel_1;
                                    break;
                                case 2:
                                    pictureBox3.Image = Properties.Resources.Wuerfel_2;
                                    break;
                                case 3:
                                    pictureBox3.Image = Properties.Resources.Wuerfel_3;
                                    break;
                                case 4:
                                    pictureBox3.Image = Properties.Resources.Wuerfel_4;
                                    break;
                                case 5:
                                    pictureBox3.Image = Properties.Resources.Wuerfel_5;
                                    break;
                                case 6:
                                    pictureBox3.Image = Properties.Resources.Wuerfel_6;
                                    break;
                            }
                    }
                    //Sofern erster Würfel der Dreiergruppe größer als erster Würfel der Zweiergruppe
                    if (SortDice[0] > DiceList2[0])
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add(SortDice[0] + " ist größer als " + DiceList2[0] + Environment.NewLine);
                        PunkteZweier--;
                    }
                    //Sofern erster Würfel der Dreiergruppe kleiner als erster Würfel der Zweiergruppe
                    else if (SortDice[0] < DiceList2[0])
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add(SortDice[0] + " ist kleiner als " + DiceList2[0] + Environment.NewLine);
                        PunkteDreier--;
                    }
                    //Sofern beide Würfel gleiche Augenzahl
                    else
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add(SortDice[0] + " ist genau so groß wie " + DiceList2[0] + Environment.NewLine);
                        PunkteDreier--;
                    }
                    //Sofern zweiter Würfel der Dreiergruppe größer als zweiter Würfel der Zweiergruppe
                    if (SortDice[1] > DiceList2[1])
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add(SortDice[1] + " ist größer als " + DiceList2[1] + Environment.NewLine);
                        PunkteZweier--;
                    }
                    //Sofern zweiter Würfel der Dreiergruppe kleiner als zweiter Würfel der Zweiergruppe
                    else if (SortDice[1] < DiceList2[1])
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add(SortDice[1] + " ist kleiner als " + DiceList2[1] + Environment.NewLine);
                        PunkteDreier--;
                    }
                    //Sofern beide Würfel gleiche Augenzahl
                    else
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add(SortDice[1] + " ist genau so groß wie " + DiceList2[1] + Environment.NewLine);
                        PunkteDreier--;
                    }
                    //Packe die Auswertung in die ListBox, sofern RadioButton Einzelauswertung aktiviert wurde
                    if (radioButton1.Checked)
                    {
                        Gewinnerliste.Items.Add("Dreiergruppe:" + PunkteDreier + " Punkte" + Environment.NewLine);
                        Gewinnerliste.Items.Add("Zweiergruppe:" + PunkteZweier + " Punkte" + Environment.NewLine);
                    }
                    // Sofern Dreiergruppe mehr Punkte hat, hat sie den totalen Sieg
                    if (PunkteDreier > PunkteZweier)
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add("Zweiergruppe verliert zwei Einheiten" + Environment.NewLine);
                        SiegDreier++;
                    }
                    // Sofern Dreiergruppe weniger Punkte hat, hat sie die totale Niederlage
                    else if (PunkteDreier < PunkteZweier)
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add("Dreiergruppe verliert zwei Einheiten" + Environment.NewLine);
                        SiegZweier++;
                    }
                    //sonst ist es ein Unentschieden
                    else
                    {
                        if (radioButton1.Checked)
                            Gewinnerliste.Items.Add("Beide Gruppen verlieren jeweils eine Einheit" + Environment.NewLine);
                        Unentschieden++;
                    }
                    iteration++;
                    //sofern die globale Boolean nicht aktiviert ist, also TRUE
                    if (ShowDice)
                    {
                        //iteriere über die Liste und verfrachte deren Inhalt in die Anzeigebox
                        for (int i = DiceList.Count - 1; i >= 0; i--)
                        {
                            listBox1.Items.Add(DiceList[i]);
                            break;
                        }
                    }
                }
                //Ausnahmebehandlung im Falle eines Fehlers
                catch (Exception ex)
                {
                    timer.Stop();
                    string messageText = String.Format(
                        "Unknown Error:" +
                    Environment.NewLine + Environment.NewLine + ex);
                    MessageBox.Show(this, messageText, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
            }
            //weise den Wert der Trackbar dem Anzeigelabel zu
            private void trackBar1_Scroll(object sender, EventArgs e)
            {
                label3.Text = trackBar1.Value.ToString();
            }
    
            private void exitToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            //lade das Aboutformular
            private void helpToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form2 fm = new Form2();
                fm.Show();
            }
            //lade das Hilfeformular
            private void helpToolStripMenuItem1_Click(object sender, EventArgs e)
            {
                Form3 fm = new Form3();
                fm.Show();
            }
            // werte den virtuellen Würfel (den Ersten der Fünfen) aus
            private void Auswerten()
            {
                double summe = 0;
                //iteriere über das globale Array
                for (int i = 0; i < Calc.Length; i++)
                {
                    //berechne und zeige die relative und absolute Häufigkeitsvertreilung an
                    textBox2.Text += Math.Round(Calc[i], 2) + "%(" + Calc[i] * SummeWiederholungen / 100 + ")" + Environment.NewLine;
                    summe += Calc[i];
                }
                textBox2.Text += Environment.NewLine;
                textBox2.Text += "++ Summe:" + Math.Round(summe, 2) + "%";
                textBox2.Text += Environment.NewLine;
                textBox2.Text += "++ Würfe:" + SummeWiederholungen.ToString();
            }
        }
    }
    
    //Form2
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;
    using System.Speech.Synthesis;
    using System;
    using System.Runtime.InteropServices;
    
    namespace RisikoWuerfel
    {
        public partial class Form2 : Form
        {
            [DllImport("user32.dll")]
            public static extern int ShowWindow(int Wnd, int Flags);
            [DllImport("user32.dll")]
            public static extern int FindWindow(string strCName, string strWndName);
            private System.ComponentModel.IContainer components;
    
            public Form2()
            {
                InitializeComponent();
    
            }
            #region Windows Form Designer generated code
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.timer1 = new System.Windows.Forms.Timer(this.components);
                this.SuspendLayout();
                // 
                // timer1
                // 
                this.timer1.Enabled = true;
                this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
                // 
                // Form2
                // 
                this.ClientSize = new System.Drawing.Size(448, 392);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.Name = "Form2";
                this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
                this.Text = "About";
                this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
                this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form2_MouseClick);
                this.ResumeLayout(false);
    
            }
            #endregion
            private System.Windows.Forms.Timer timer1;
            private float angle = 0;
    
            private LinearGradientBrush GetBrush()
            {
                return new LinearGradientBrush(
                  new Rectangle(1, 1, 1024, 700),
                  Color.Red,
                  Color.Yellow,
                  0.0F,
                  true);
            }
    
            private void Rotate(Graphics graphics, LinearGradientBrush brush)
            {
                brush.RotateTransform(angle);
                brush.SetBlendTriangularShape(.5F);
                graphics.FillRectangle(brush, brush.Rectangle);
            }
    
            private void Rotate(Graphics graphics)
            {
                angle += 5 % 360;
                Rotate(graphics, GetBrush());
            }
    
            private void timer1_Tick(object sender, System.EventArgs e)
            {
                Rotate(CreateGraphics());
                Graphics g = this.CreateGraphics();
                Icon IconPhone = new Icon("phone.ico");
                Icon IconUrl = new Icon("web.ico");
                Icon IconMail = new Icon("mail.ico");
                using (Font bigFont = new Font(SystemFonts.DefaultFont.FontFamily, 28, FontStyle.Regular))
                using (Font mediumFont = new Font(SystemFonts.DefaultFont.FontFamily, 18, FontStyle.Regular))
                using (Font smallFont = new Font(SystemFonts.DefaultFont.FontFamily, 14, FontStyle.Regular))
                using (Font VsmallFont = new Font(SystemFonts.DefaultFont.FontFamily, 10, FontStyle.Regular))
                {
                    g.DrawString("Risiko-DiceChecker", bigFont, Brushes.Green, 30, 30);
                    g.DrawString("© by Thomas Kipp", mediumFont, Brushes.Blue, 30, 70);
                    g.DrawIcon(IconMail, 20, 140);
                    g.DrawIcon(IconPhone, 25, 165);
                    g.DrawIcon(IconUrl, 20, 195);
                    g.DrawString("Contact:" + Environment.NewLine +
                    "    t.kipp@eisvogel-online-software.de" + Environment.NewLine +
                    "    0152/37389041" + Environment.NewLine +
                    "    http://tklustig.ddns.net:1026", mediumFont, Brushes.Black, 30, 110);
                    g.DrawString("programming language: C# (WindowsForms)", smallFont, Brushes.Turquoise, 30, 225);
                    g.DrawString("click me to get closed", VsmallFont, Brushes.Beige, 30, 255);
                }
                ShowWindow(FindWindow("Progman", "Program Manager"), 1);
            }
            private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
            {
                Rotate(e.Graphics);
            }
    
            private void Form2_MouseClick(object sender, MouseEventArgs e)
            {
                timer1.Enabled = false;
                using (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer())
                {
                    speechSynthesizer.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Child);
                    speechSynthesizer.Rate = -2;
                    speechSynthesizer.Speak("For questions, please contact me by phone, or by email");
                }
                this.Close();
            }
        }
    }
    //Form3
    using System;
    using System.Windows.Forms;
    
    namespace RisikoWuerfel
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }
    
            private void Form3_Load(object sender, EventArgs e)
            {
                textBox1.ReadOnly = true;
                textBox1.Enabled = false;
                textBox1.Text = "Dieses Applikation eruiert, was günstiger ist (bekannt aus dem Spiel Risiko):"+Environment.NewLine+"3 Würfel gegen 2 Würfel. Der höhere gewinnt. Die zwei Würfel gewinnen bei gleicher Würfelzahl!"+Environment.NewLine+"Die Würfel werden prinzipiell aufsteigend sortiert." + Environment.NewLine + Environment.NewLine +
         "So steuern Sie das Programm:" + Environment.NewLine +
         "1.1: Simulationen: Hier bestimmen Sie, wieviel mal gewürfelt wird." + Environment.NewLine +
         "1.2: Run: Startet den Prozess. Auf falsche Eingaben werden Sie hingewiesen." + Environment.NewLine +
         "1.3: Don't present: Würfelt, ohne einen virtuellen Würfel(den ersten der Fünfen, unsortiert) auszuwerten. Diese Option kann erst bei mehr als 100 Würfen aktiviert werden. Ist sie deaktivert, wird die Häufigkeitsverteilung des virtuellen Würfels angezeigt." + Environment.NewLine +
         "1.4:Dice-Speed: Bestimmt die Anzeigefrequenz in Milisekunden(Default=100) " + Environment.NewLine +
         "1.5:Einzelauswertung: Zeigt eine detaillierte Auswertung eines jeden einzelnen Wurfes des Angreifers vs. des Verteidigers." + Environment.NewLine +
         "1.6:Massenauswertung: Zeigt nur eine Gesamtauswertung des Angreifers vs. des Verteidigers.(nur bei mehr als 50 Würfen erlaubt)" + Environment.NewLine +
         "1.7: Don't show dices: Die Würfel werden nicht bildlich angezeigt. Ist sie deaktiviert, werden alle Würfel bildlich angezeigt.";
    
            }
        }
    }
    
    





    • Bearbeitet tklustig Freitag, 14. September 2018 07:10
    Donnerstag, 13. September 2018 18:29

Antworten

  • Hi,
    da ich jegliche Kriegsspiele ablehne, scheine ich erst jetzt zu verstehen, was Du meinst.

    Ein Wurf eines Angreifers beinhaltet 3 Würfel, deren höchste und zweithöchste Augenzahl für die Bewertung genutzt werden.

    Ein Wurf eines Verteidigers beinhaltet 2 Würfel, die beide beginnend mit der höchsten Augenzahl mit denen des Angreifers (beginnend mit der höchsten Augenzahl) verglichen werden.

    Wenn die höchste Augenzahl des Verteidigers größer als die höchste Augenzahl des Angreifers ist, hat der Verteidiger gewonnen.

    Wenn die höchste Augenzahl des Verteidigers gleich der höchsten Augenzahl des Angreifers ist, werden die zweithöchsten Augenzahlen verglichen. Da gilt dann wieder, dass der Verteidiger gewonnen hat, wenn sein zweithöchste Augenzahl größer ist als die des Angreifers.

    Wenn sowohl die höchste Augenzahl des Verteidigers gleich der höchsten Augenzahl des Angreifers ist und das auch bei den zweithöchsten Augenzahlen zutrifft, dann hat auch der Verteidiger gewonnen. 

    In allen anderen Fällen hat der Angreifer gewonnen. Der Begriff "Einheit" bezeichnet da nur eine Armee, die aus dem Spiel beim Verlierer zu entfernen ist.

    Mathematisch so etwas zu beweisen, kann man, indem man die Wahrscheinlichkeiten der Varianten für Sieg und Verlust addiert.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert tklustig Mittwoch, 26. September 2018 08:50
    Freitag, 14. September 2018 12:34

Alle Antworten

  • Hi,
    ich kann mir nicht vorstellen, dass jemand die Mathematik in Deinem Code versteht.

    folgender Code zeigt auf, dass beim Brettspiel Risiko der Angreifer mit seinen drei Würfeln im Vorteil ist gegenüber dem Verteidiger mit seinen zwei Würfeln( bei gleicher Würfelzahl gewinnt der Verteidiger). Statistisch gesehen lohnt sich ein Angriff eigentlich immer. Ein Sieg ist immer wahrscheinlicher als eine Niederlage oder ein Unentschieden. Ich stelle mir jetzt die Frage, wie man das mathematisch beweisen könnte.....

    Da Du schreibst "Statistisch gesehen lohnt sich ein Angriff eigentlich immer", sollte auch die Beschreibung der Mathematik für diese Behauptung kein Problem sein.

    Die Wahrscheinlichkeit, zweimal hintereinander die gleiche Zahl zu würfeln beträgt 1/36, dreimal hintereinander die gleich Zahl zu würfeln beträgt 1/216.

    Was ist mathematisch beschrieben Risiko, Vorteil, Verteidigung, Angriff, Sieg? Und was soll mathematisch gesehen bewiesen werden?


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 13. September 2018 18:56
  • Nun, dass p(x)=1/6, weiss ich selber. Dass das Ganze stochastisch unabhängig ist, weiss ich auch. Letzlich gilt es, folgendes zu beweisen

    X: Würfeln

    FallA: Drei Würfel, absteigend sortiert(Angreifer)

    FallB: Zwei Würfel, absteigend sortiert(Verteidiger):

    Bedingung: Höhere Würfelzahl gewinnt. Bei gleicher Würfelzahl gewinnt der Verteidiger

    A:Sieg(für Angreifer): Erste Würfelzahl && Zweite Würfelzahl ist größer

    B:Sieg(für Verteidiger):Erste Würfelzahl ist größer oder gleich && Zweite Würfelzahl ist größer oder gleich

    C:Unentschieden: Mehrere Konstellationen möglich(z.B. erste Würfelzahl ist größer && zweite Würfelzahl ist gleich oder aber erste Würfelzahl ist kleiner && zweite Würfelzahl ist größer......)

    Behauptung: p(A) > p(B) > p(C) für X-> +oo

    Nachgewiesen durch obigen Quellcode. Mathematischer Beweis fehlt....










    • Bearbeitet tklustig Freitag, 14. September 2018 11:23
    Freitag, 14. September 2018 06:58
  • Hi,
    der Angreifer gewinnt immer, da die Zahl seiner Würfel 3 ist, wogegen der Verteidiger nur 2 Würfel zur Verfügung hat.

    Oder meinst Du mit Würfelzahl nicht die Anzahl der Würfel?

    Falls Du mit Würfelzahl die Augenzahl meinst, dann ergeben sich für den Fall, dass mit dem nachfolgenden Wurf eine höhere Augenzahl erreicht wurde, folgende Wahrscheinlichkeiten (gerundet):

    2 Würfe: 0,417

    3 Würfe: 0,046

    4 Würfe: 0,005

    5 Würfe: 0.0003858

    6 Würfe: 0,0000214


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    • Bearbeitet Peter Fleischer Freitag, 14. September 2018 07:41 Zahlen korrigiert
    Freitag, 14. September 2018 07:26
  • Du hast mich nicht richtig verstanden:

    Der Vorteil des Angreifers(3 Würfel) wird dadurch "ausgeglichen", dass bei gleicher Augenzahl der Verteidiger gewinnt. Letzlich wiegt allerdings das Argument des zusätzlichen Würfels stärker als der Sieg bei Augengleichheit. Das gilt es zu beweisen ! Ferner gilt es zu beweisen, dass die relative Häufigkeitsverteilung so ist:

    A:totaler Sieg für Angreifer B: totaler Sieg Verteidiger C: Unentschieden

    E(A) > E(B) > E(C) 

    Prozentual sieht das Ganze nach 3000 Würfen etwa so aus:

    p(A)=0,372

    p(B)=0,299

    p(C)=0,329

    Diese Werte ändern sich bei zunehmenden Würfen nur noch marginal !










    • Bearbeitet tklustig Freitag, 14. September 2018 07:52
    Freitag, 14. September 2018 07:36
  • Hi,
    wieder ist unklar, was Du meinst.

    Was ist mathematisch ausgedrückt: totaler Sieg für Angreifer?

    Was ist mathematisch ausgedrückt: totaler Sieg Verteidiger

    Was ist mathematisch ausgedrückt: Unentschieden?

    Letztlich wiegt allerdings das Argument des zusätzlichen Würfels stärker als der Sieg bei Gleichheit.

    Wie ist das mathematisch zu verstehen?

    Was ist dabei "Gleichheit"?


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Freitag, 14. September 2018 07:53
  • Das hatte ich doch bereits erläutert:

    alle Würfel sind absteigend sortiert/List.Sort() und dann List.Reverse() 

    Totaler Sieg für Angreifer: Erste Würfelauge && Zweite Würfelauge ist größer als die des Verteidigers.

    Totaler Sieg Verteidiger: Erste Würfelauge ist größer oder gleich && Zweite Würfelauge ist größer oder gleich als die des Angreifers

    Unentschieden: Wenn jeder der beiden Partien eine Einheit abgezogen bekommt, so ist das ein Unentschieden. Beispielsweise, der Angreifer würfelt 6,6,4 der Verteidiger 6,2 

    6 ist gleich groß wie 6, also verliert der Angreifer eine Einheit. 6 ist größer als 2,also verliert der Verteidiger eine Einheit. 

    Hier ein Screenshot der Applikation:




    • Bearbeitet tklustig Freitag, 14. September 2018 11:28
    Freitag, 14. September 2018 11:18
  • Hi,
    da Du immer die Begriffswelt änderst, ist es schwer zu verstehen was Du meinst:

    Würfelauge = Würfelzahl = Anzahl der Würfel? Oder Augenzahl eines Wurfes?

    Einheit = Wurf? Oder Einheit = Augenzahl? Oder Gleichheit der Augenzahl beider Gegner in der gleichen Wurfrunde?

    Wenn nur 2 Wurfrunden verglichen werden, was soll dann die dritte Wurfrunde des Angreifers?


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Freitag, 14. September 2018 11:34
  • Würfelauge=Würfelzah=Augenzahl eines Würfelsl(Synonym)

    Die Anzahl der Würfel beträgt 5 (3 Angreifer + 2 Verteidiger. Ein Einheit ist weder ein Wurf, noch eine Augenzahl. Jeder der beiden Partien hat zu Beginn quasi 2 Einheiten, die auf dem Spiel stehen. Gewinnt der Angreifer, verliert der Verteidiger 2 Einheiten. Gewinnt der Verteidiger, verliert der Angreifer 2 Einheiten. Beim Unentschieden verlieren beide jeweils eine Einheit(siehe auch hier )

    Was du mit Wurfrunde meinst, verstehe ich nicht. Der Angreifer hat drei Würfel, die jeweils in einer Wurfrunde(=Spielrunde=Angriff) gegen 2 Würfel antreten!

    Wikipedia meint folgendes:

    Bei drei Angreifern gegen zwei Verteidiger betragen die zu erwartenden Verluste pro

    Einzelangriff 0,92 für den Angreifer und 1,08 für den Verteidiger. Die Standardabweichung

    beträgt 0,81. Es ist also in jedem Fall von Vorteil, mit einer möglichst großen Übermacht anzugreifen.

    Die Wahrscheinlichkeiten, den Gesamtangriff auf ein Land zu gewinnen, lassen sich rekursiv

    oder mit einer Approximation auf Basis des Zentralen Grenzwertsatzes mit Hilfe der

    Normalverteilung berechnen.

    Berechnet wird das so:

    p(A)=2890 günstige Fälle/7776 mögliche Fälle. Das deckt sich mit meiner Applikation. Wie die aber auf diese Zahlen kommen, entzieht sich meiner Kenntnis :=(








    • Bearbeitet tklustig Freitag, 14. September 2018 12:20
    Freitag, 14. September 2018 12:02
  • Hi,
    da ich jegliche Kriegsspiele ablehne, scheine ich erst jetzt zu verstehen, was Du meinst.

    Ein Wurf eines Angreifers beinhaltet 3 Würfel, deren höchste und zweithöchste Augenzahl für die Bewertung genutzt werden.

    Ein Wurf eines Verteidigers beinhaltet 2 Würfel, die beide beginnend mit der höchsten Augenzahl mit denen des Angreifers (beginnend mit der höchsten Augenzahl) verglichen werden.

    Wenn die höchste Augenzahl des Verteidigers größer als die höchste Augenzahl des Angreifers ist, hat der Verteidiger gewonnen.

    Wenn die höchste Augenzahl des Verteidigers gleich der höchsten Augenzahl des Angreifers ist, werden die zweithöchsten Augenzahlen verglichen. Da gilt dann wieder, dass der Verteidiger gewonnen hat, wenn sein zweithöchste Augenzahl größer ist als die des Angreifers.

    Wenn sowohl die höchste Augenzahl des Verteidigers gleich der höchsten Augenzahl des Angreifers ist und das auch bei den zweithöchsten Augenzahlen zutrifft, dann hat auch der Verteidiger gewonnen. 

    In allen anderen Fällen hat der Angreifer gewonnen. Der Begriff "Einheit" bezeichnet da nur eine Armee, die aus dem Spiel beim Verlierer zu entfernen ist.

    Mathematisch so etwas zu beweisen, kann man, indem man die Wahrscheinlichkeiten der Varianten für Sieg und Verlust addiert.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert tklustig Mittwoch, 26. September 2018 08:50
    Freitag, 14. September 2018 12:34