Hsw Skrevet 9. oktober 2008 Del Skrevet 9. oktober 2008 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
Glenn F. Henriksen Skrevet 9. oktober 2008 Del Skrevet 9. oktober 2008 I steden for å be andre om å løse skoleoppgaven din kommer man ofte lengre med å fortelle litt om løsningen man har kommet frem til selv og forklare litt om hvordan den ikke fungerer. Da er det lettere å få hjelp til problemet sitt. Lenke til kommentar
Velena Skrevet 9. oktober 2008 Del Skrevet 9. oktober 2008 (endret) 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 9. oktober 2008 av Velena Lenke til kommentar
Hsw Skrevet 13. oktober 2008 Forfatter Del Skrevet 13. oktober 2008 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
GeirGrusom Skrevet 13. oktober 2008 Del Skrevet 13. oktober 2008 ... hva er dette godt for? samletrundepoeng = samletrundepoeng * 0; Dette kan byttes ut med samletrundepoeng = 0; Men er det virkelig det du er ute etter? Lenke til kommentar
Hsw Skrevet 13. oktober 2008 Forfatter Del Skrevet 13. oktober 2008 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. Lenke til kommentar
Po[wP]ow Skrevet 13. oktober 2008 Del Skrevet 13. oktober 2008 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
GeirGrusom Skrevet 13. oktober 2008 Del Skrevet 13. oktober 2008 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
Manfred Skrevet 14. oktober 2008 Del Skrevet 14. oktober 2008 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
HDSoftware Skrevet 14. oktober 2008 Del Skrevet 14. oktober 2008 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
Manfred Skrevet 15. oktober 2008 Del Skrevet 15. oktober 2008 Haha Ny konkurranse: Finne den mest tumlete måten å sette en variabel til 0 Lenke til kommentar
BennyXNO Skrevet 12. november 2008 Del Skrevet 12. november 2008 Jeg skulle ønske at TDD ble brukt til undervisning i programmering. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå