Gå til innhold

Anbefalte innlegg

Hei

 

Har fått oppgave av IT læreren i å lage et terningsspill, oppgaven lyder:

 

Lag et "terningspill" for to spillere. Spillet går ut på å kaste en terning så mange ganger man ønsker - helt til det kommer en ener eller man slutter frivillig. For hvert kast (hvis det ikke blir en ener), kan man legge sammen det terningen viser, men hvis man får en ener, mister man alle poengene i denne runden.

 

Hvis man gir seg frivillig, kan rundens poengsum legges til det man har samlet opp fra tidligere runder. Når en spiller har gitt seg eller fått en ener, er det den andre spillerens tur til å prøve. Den som først får 100 poeng har vunnet.

 

Noen som har noen smarte løsninger på dette? Har tenkt ut en løsning selv men fungerer ikke 100%.

 

Håper på svar =)

Lenke til kommentar
Videoannonse
Annonse

Har faktisk spillt dette terningspillet med familien. Her har du mitt forslag:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TerningSpill
{
   public partial class Bord : Form
   {
       int splr1Poengsum = 0;
       int splr2Poengsum = 0;
       int terning = 0;
       int midlertidigSum = 0;
       public Bord()
       {
           InitializeComponent();
       }

       private void Bord_Load(object sender, EventArgs e)
       {
           Spiller1Lbl.ForeColor = Color.Red;
       }

       private void KastBtn_Click(object sender, EventArgs e)
       {
               Random hiThere = new Random();
               terning = hiThere.Next(1, 7);
               TerningLbl.Text = terning.ToString();
               if (terning != 1)
               {
                   midlertidigSum += terning;
                   MidlertidigSumLbl.Text = midlertidigSum.ToString();
               }
               else
               {
                   midlertidigSum = 0;
                   MidlertidigSumLbl.Text = midlertidigSum.ToString();
                   if (Spiller1Lbl.ForeColor == Color.Red)
                   {//Leste feil >.>
                   //    splr1Poengsum = 0;
                   //    Poengsum1Lbl.Text = splr1Poengsum.ToString();
                       Spiller1Lbl.ForeColor = Color.Black;
                       Spiller2Lbl.ForeColor = Color.Red;
                   }
                   else
                   {
                   //    splr2Poengsum = 0;
                   //    Poengsum2Lbl.Text = splr2Poengsum.ToString();
                       Spiller2Lbl.ForeColor = Color.Black;
                       Spiller1Lbl.ForeColor = Color.Red;
                   }
               }
       }

       private void StoppBtn_Click(object sender, EventArgs e)
       {
           if (midlertidigSum > 0)
           {
               if (Spiller1Lbl.ForeColor == Color.Red)
               {
                   splr1Poengsum += midlertidigSum;
                   Poengsum1Lbl.Text = splr1Poengsum.ToString();
                   if (splr1Poengsum >= 100)
                   {
                       Spiller1Lbl.ForeColor = Color.Magenta;
                       NyttSpillBtn.Visible = true;
                       KastBtn.Enabled = false;
                       StoppBtn.Enabled = false;
                       MessageBox.Show("Gratulerer spiller 1!");
                   }
                   else
                   {
                       Spiller1Lbl.ForeColor = Color.Black;
                       Spiller2Lbl.ForeColor = Color.Red;
                   }
               }
               else
               {
                   splr2Poengsum += midlertidigSum;
                   Poengsum2Lbl.Text = splr2Poengsum.ToString();
                   if (splr2Poengsum >= 100)
                   {
                       Spiller2Lbl.ForeColor = Color.Magenta;
                       NyttSpillBtn.Visible = true;
                       KastBtn.Enabled = false;
                       StoppBtn.Enabled = false;
                       MessageBox.Show("Gratulerer spiller 2!");
                   }
                   else
                   {
                       Spiller2Lbl.ForeColor = Color.Black;
                       Spiller1Lbl.ForeColor = Color.Red;
                   }
               }
               midlertidigSum = 0;
               terning = 0;
               MidlertidigSumLbl.Text = midlertidigSum.ToString();
               TerningLbl.Text = "??";
           }
       }

       private void NyttSpillBtn_Click(object sender, EventArgs e)
       {
           splr1Poengsum = 0;
           splr2Poengsum = 0;
           midlertidigSum = 0;
           terning = 0;
           Poengsum1Lbl.Text = splr1Poengsum.ToString();
           Poengsum2Lbl.Text = splr2Poengsum.ToString();
           MidlertidigSumLbl.Text = midlertidigSum.ToString();
           TerningLbl.Text = "??";
           NyttSpillBtn.Visible = false;
           KastBtn.Enabled = true;
           StoppBtn.Enabled = true;
           Spiller1Lbl.ForeColor = Color.Red;
           Spiller2Lbl.ForeColor = Color.Black;
       }
   }
}

Endret av Velena
Lenke til kommentar

Hei

 

Dette er hva jeg har nå:

 



public partial class _Default : System.Web.UI.Page
{
int poengspillerA;
int poengspillerB;
int samletrundepoeng;
int terning;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["samletrundepoeng"] != null)
{
samletrundepoeng = (int)Session["samletrundepoeng"];
}
if (Session["poengspillerA"] != null)
{
poengspillerA = (int)Session["poengspillerA"];
}
if (Session["poengspillerB"] != null)
{
poengspillerB= (int)Session["poengspillerB"];

}
if (Session["terning"] != null)
{
terning = (int)Session["terning"];
}
Random minRandomGenerator = new Random();

terning = minRandomGenerator.Next(1, 7);


}

protected void Page_Unload(object sender, EventArgs e)
{
Session["samletrundepoeng"] = samletrundepoeng;
Session["poengspillerA"] = poengspillerA;
Session["poengspillerB"] = poengspillerB;
Session["terning"] = terning;
}
protected void btnTerning_Click(object sender, EventArgs e)
{

int terningpoeng = terning;
labTerning.Text = Convert.ToString(terningpoeng);
if (terning > 1)
{
samletrundepoeng = samletrundepoeng + terning;

labSamletRundePoeng.Text = Convert.ToString(samletrundepoeng);
}
else if (terning == 1)
{

samletrundepoeng = samletrundepoeng * 0;

labSamletRundePoeng.Text = Convert.ToString(samletrundepoeng);
}

}
protected void btnSpillerA_Click(object sender, EventArgs e)
{

labPoengA.Text = Convert.ToString(samletrundepoeng);

poengspillerA = poengspillerA + samletrundepoeng;


samletrundepoeng = samletrundepoeng * 0;


}
protected void btnTilspillerB_Click(object sender, EventArgs e)
{
labPoengB.Text = Convert.ToString(samletrundepoeng);

samletrundepoeng = samletrundepoeng * 0;


}
}

 

Litt usikker videre, får ikke spillerA/spillerB poeng til å huskes

Lenke til kommentar

Her er min kode, slik oppgaven er!

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
int terning;
int sumRunde;
int samletA;
int samletB;
protected void Page_Load(object sender, EventArgs e)
{
	if (Session["terning"] != null)
	{
		terning = (int)Session["terning"];
	}
	if (Session["sumRunde"] != null)
	{
		sumRunde = (int)Session["sumRunde"];
	}
	if (Session["samletA"] != null)
	{
		samletA = (int)Session["samletA"];
	}
	if (Session["samletB"] != null)
	{
		samletB = (int)Session["samletB"];
	}

	Random minRandomGenerator = new Random();
	terning = minRandomGenerator.Next(1, 7);
}
protected void btnTerning_Click(object sender, EventArgs e)
{	  
	sumRunde = sumRunde + terning;
	imgTerning.ImageUrl = "terning" + terning + ".jpg";


	if (terning <= 1)
	{
		sumRunde = 0;

		if (btnA.Enabled == true)
		{
			btnB.Enabled = true;
			btnA.Enabled=false;
		}
		else if (btnB.Enabled == true)
		{
			btnB.Enabled = false;
			btnA.Enabled = true;
		}		   
	}
	labRunde.Text = Convert.ToString(sumRunde);
}
protected void btnA_Click(object sender, EventArgs e)
{
	samletA = sumRunde + samletA;
	labSpillerA.Text = Convert.ToString(samletA);
	sumRunde = 0;
	terning = 0;
	btnA.Enabled = false;
	btnB.Enabled = true;
	labRunde.Text = Convert.ToString(sumRunde);

	if (samletA >= 100)
	{
		labVinn.Text = txtSpiller1.Text + " har vunnet!";
		btnReset.Visible = true;
		btnTerning.Enabled = false;
		btnB.Enabled = false;
		labVinn.Visible = true;
	}
}
protected void btnB_Click(object sender, EventArgs e)
{
	samletB = sumRunde + samletB;
	sumRunde = 0;
	terning = 0;
	labSpillerB.Text = Convert.ToString(samletB);
	btnB.Enabled = false;
	btnA.Enabled = true;
	labRunde.Text = Convert.ToString(sumRunde);

	if (samletB >= 100)
	{
		labVinn.Text = txtSpiller2.Text+" har vunnet!";

		btnReset.Visible = true;
		btnTerning.Enabled = false;
		btnA.Enabled = false;
		labVinn.Visible = true;
	}
}
protected void btnStart_Click(object sender, EventArgs e)
{

	if (txtSpiller1.Text != txtSpiller2.Text)
	{
		start();
		labSumAT.Text = "Sum " + Convert.ToString(txtSpiller1.Text) + ": ";
		labSumBT.Text = "Sum " + Convert.ToString(txtSpiller2.Text) + ": ";
		btnA.Text = "Legg sammen poeng til " + txtSpiller1.Text;
		btnB.Text = "Legg sammen poeng til " + txtSpiller2.Text;
	}
	else
	{
		labVinn.Visible = true;
		labVinn.Text = "Du kan ikke ha to like spillere!";
	}
}
protected void btnReset_Click(object sender, EventArgs e)
{
	start();	 
}
protected void Page_Unload(object sender, EventArgs e)
{
	Session["terning"] = terning;
	Session["sumRunde"] = sumRunde;
	Session["samletA"] = samletA;
	Session["samletB"] = samletB;
}
protected void start()
{
	btnTerning.Visible = true;
	labRunde.Visible = true;
	labRundetekst.Visible = true;
	labSpillerA.Visible = true;
	labSpillerB.Visible = true;
	labSumAT.Visible = true;
	labSumBT.Visible = true;
	btnA.Visible = true;
	btnB.Visible = true;
	labVinn.Visible = true;
	labRegler.Visible = false;
	btnStart.Visible = false;
	btnReset.Visible = false;
	btnA.Enabled = true;
	btnB.Enabled = false;
	btnTerning.Enabled = true;
	txtSpiller1.Visible = false;
	txtSpiller2.Visible = false;
	labSpiller1.Visible = false;
	labSpiller2.Visible = false;
	labNavn.Visible = false;
	labVinn.Visible = false;
	samletA = 0;
	samletB = 0;
	labSpillerA.Text = Convert.ToString(samletA);
	labSpillerB.Text = Convert.ToString(samletB);
}
}

Lenke til kommentar

Vel, jeg løste oppgaven for å sjekke ut mono.

 

using System;

static class Program
{
 static int Main()
 {
int players = 0;
Console.WriteLine("Skriv antall spillere:");

while(!int.TryParse(Console.ReadLine(),out players) && players <= 0)
  Console.WriteLine("Du må skrive et gyldig antall");

App my_app = new App(players);
Console.WriteLine(my_app.Run().Name + " vant spillet!");
return 0;
 }
}

public class Player
{
 protected string m_name;
 protected int m_points;
 public Player(string name)
 {
m_name = name;
m_points = 0;
 }
 public void PlayRound()
 {
Random rnd = new Random(Environment.TickCount);
int val;
int runde_val = 0;
while(true)
{
  ConsoleKeyInfo key = Console.ReadKey(false);
  if(key.Key == ConsoleKey.Escape)
  {
	m_points += runde_val;
	return;
  }
  val = rnd.Next(1, 6);
  Console.WriteLine(val.ToString());
  if(val == 1)
  {
	Console.WriteLine("Runden er over.");
	return;
  }
  else
	runde_val += val;

}

 }
 public string Name { get { return m_name; } }
 public int Points { get { return m_points; } } 

}


public class App
{
 protected Player[] m_players;

 public App(int spillere)
 {
m_players = new Player[spillere];
for(int i = 0; i < m_players.Length; i++)
{
  Console.WriteLine("Vennligst skriv inn navnet til spiller " + 
i.ToString() + ":\n");
  m_players[i] = new Player(Console.ReadLine());
}
 }

 public Player Run()
 {
while(true)
{
  foreach(Player pl in m_players)
  {
	Console.WriteLine(pl.Name + " sin tur med " + pl.Points.ToString() + " poeng.");
	pl.PlayRound();
	if(pl.Points >= 100)
	{
	  return pl;
	}
  }

}
 }

}

 

Jeg brukte kun nano for å skrive den, og det er kun et console program.

Lenke til kommentar
Hver gang man samler poengene sine til A eller B, nullstilles samletrundepoeng seg til å bli 0. Så kan neste spiller samle opp poeng. Derfor tok jeg * 0.

Men det forklarer fortsatt ikke hvorfor du skal skrive

 

samletrundepoeng = samletrundepoeng * 0;

 

og ikke bare

 

samletrundepoeng = 0;

 

Hvorfor i all verden kan du ikke bare gi den verdien??

Lenke til kommentar
Hver gang man samler poengene sine til A eller B, nullstilles samletrundepoeng seg til å bli 0. Så kan neste spiller samle opp poeng. Derfor tok jeg * 0.

Men det forklarer fortsatt ikke hvorfor du skal skrive

 

samletrundepoeng = samletrundepoeng * 0;

 

og ikke bare

 

samletrundepoeng = 0;

 

Hvorfor i all verden kan du ikke bare gi den verdien??

Egentlig burde det stått noe slik:

samletrundepoeng = GetInitialPoints();

private int GetInitialPoints()
{
 int ReturnValue = 10;
 if(ReturnValue = 5)
 {
   throw new exception("Påkkers rør!  Kan jo ikke returnere 5 når jeg må returnere 0!");
 }
 try
 {
int r = 10 / 0;
 }
 catch
 {
ReturnValue = 0;
 }
 return ReturnValue;
}

Det geniale her er jo at verdien vil bli satt til 0 hvis det ikke lar seg gjøre å dele med 0. Dermed er man sikker på at man får verdien 0 som ny verdi.

Lenke til kommentar
  • 4 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...