Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: arvauspeli

Sivun loppuun

jimmyn [23.09.2019 10:41:29]

#

Miten saan sitten kun joku on arvannut tuon oikean numeron niin näyttämään kaikki pelaajan arvaukset?

Lisäys: Eli siis näyttämään eri luvut mitä pelaaja oli arvannut ennen oikeaa vastausta

Grez [23.09.2019 11:55:32]

#

Lisäät kunkin arvauksen esim listalle ja sitten tulostat listan sisällön.

jimmyn [23.09.2019 12:02:06]

#

Grez kirjoitti:

Lisäät kunkin arvauksen esim listalle ja sitten tulostat listan sisällön.

miten tämä onnistuu?

Teuro [23.09.2019 12:04:09]

#

Esimerkiksi näin:

List<int> arvatut = new List<int>();
arvatut.Add(arvaus);
foreach (int vaara in arvatut) {
    Console.WriteLine(vaara);
}

jimmyn [23.09.2019 12:06:40]

#

Teuro kirjoitti:

Esimerkiksi näin:

List<int> arvatut = new List<int>();
arvatut.Add(arvaus);
foreach (int vaara in arvatut) {
    Console.WriteLine(vaara);
}

miten tämä laitetaan tähän koodiriviin?

// esitellään muuttujat
int answer;
string answermessage;
bool endLoop = false;
int xcounter = 0;
int correctanswer;
//asetetaan vastaus
Random rnd = new Random();
correctanswer = rnd.Next(1, 1000);
//pyydetään käyttäjää syöttämään luku
while (!endLoop)
{
    xcounter++;
    Console.Write("anna numero 1-1000 väliltä: ");
    answer = int.Parse(Console.ReadLine());
    // logiikka vastausviestiin
    if (answer == correctanswer)
    {
        answermessage = "arvasit oikein käytit " + xcounter + " arvausta!";
        // tulostetaan vastaus
        Console.WriteLine(answermessage);
        endLoop = true;
    }
    else if (answer > correctanswer)
    {
        answermessage = "arvauksesi on liian suuri...";
        //tulostetaan vastaus
        Console.WriteLine(answermessage);
    }
    else
    {
        answermessage = "arvauksesi on liian pieni...";
        //tulostetaan vastaus
        Console.WriteLine(answermessage);
    }

Teuro [23.09.2019 12:09:07]

#

Suo anteeksi en koodaa C# yleensä, joten voi olla vähän kökköä koodia. Osin arvasin tehtävän sisällön, mutta yllättävän samanlainen siitä silti tuli.

using System;
using System.Collections.Generic;

public class Program {
	public static void Main() {
		Random random = new Random();
		int arvottu = random.Next(1, 100);

		int arvaus = -1;
		List<int> arvatut = new List<int>();

		while (arvaus != arvottu) {
			Console.WriteLine("Arvaa luku väliltä 1 - 100");

			arvaus = Convert.ToInt32(Console.ReadLine());

			if (arvaus > arvottu) {
				Console.WriteLine("luku on pienempi");
				arvatut.Add(arvaus);
			} else if (arvaus < arvottu) {
				Console.WriteLine("luku on suurempi");
				arvatut.Add(arvaus);
			} else {
				Console.WriteLine("oikein");

				foreach (int vaara in arvatut) {
    				Console.WriteLine(vaara);
				}
			}
		}
	}
}

jimmyn [23.09.2019 12:28:58]

#

Teuro kirjoitti:

(23.09.2019 12:09:07): Suo anteeksi en koodaa C# yleensä, joten voi...

en itsekkään ole mikään hyvä sen takia pyysinkin apua... mutta saisiko tämän jotenkin muunnettua tuohon minun omaan koodiini?

Grez [23.09.2019 12:37:46]

#

Saahan sen. Ei todellakaan pitäisi olla vaikeaa kopioida tuolta Teuron koodista 5 riviä tuonne omasi joukkoon ja muuttaa vähän muuttujanimiä.

jimmyn [23.09.2019 12:40:18]

#

Grez kirjoitti:

Saahan sen. Ei todellakaan pitäisi olla vaikeaa kopioida tuolta Teuron koodista 5 riviä tuonne omasi joukkoon ja muuttaa vähän muuttujanimiä.

itse en osaa muuttaa niitä kun vasta aloittelen koodaamaan c#

Grez [23.09.2019 12:43:44]

#

Jep, no sinänäs ihan sama mikä kieli on kyseessä, jossain erimerkissä olevan muuttujanimen muuttaminen toiseksi on sen verran perusasia, että kannattaa tosiaan harjoitella.

jimmyn [23.09.2019 12:44:44]

#

Grez kirjoitti:

Jep, no sinänäs ihan sama mikä kieli on kyseessä, jossain erimerkissä olevan muuttujanimen muuttaminen toiseksi on sen verran perusasia, että kannattaa tosiaan harjoitella.

osaisitko auttaa jonkin verran tässä nyt?

Grez [23.09.2019 12:49:16]

#

No Teuron esimerkissä vastaus on muuttujassa arvaus ja sinun esimerkissäsi answer. Eli kun kopioit tuon arvatut.Add -alkuisen rivin, niin joudut vaihtamaan vastaus tilalle answer.

Lähtökohtaisesti sanoisin että kannattaa joko yrittää vähän enemmän itse tai sitten jos haluat jatkossakin että opiskelu on sitä että joku syöttää sinulle lusikalla niin kannattaa jos tässä vaiheessa lyödä hanskat naulaan.

Teidän kummankin koodissa on muuten looginen virhe satunnaisluvun arvonnassa. Eli Jimmyn koodi arpoo luvun väliltä 1-999 ja Teuron koodi luvun väliltä 1-99. Sinänsä tuo on enemmän tuon Random luokan tekijän vika kuin teidän, mutta sen luokan dokumentaatio on kyllä oikein, eli kannattaa huomioida.

jimmyn [23.09.2019 13:33:43]

#

Grez kirjoitti:

(23.09.2019 12:49:16): No Teuron esimerkissä vastaus on muut­tu­jas­sa...

en ihan saanut vielläkään toimimaan...

Grez [23.09.2019 13:37:13]

#

No suosittelen vaikka käymään tuon Teuron vastauksen rivi riviltä läpi ja miettimään mitä siinä tehdään. Jos et ymmärrä jotain kohtaa niin kokeile googlettaa tai tutkia C# dokumentaatiosta mitä se tekee. Sitten kun ymmärrät mitä mikäkin kohta tekee, osaat myös laittaa oman koodisi tekemään sen saman asian.

Jos joku kohta ei millään avaudu niin kysy sitten vaikka siitä täällä, että mitä tämä kohta itse asiassa tekee.

Teuro [23.09.2019 14:11:41]

#

Tässä nyt vielä sovitettuna tuohon sinun omaan koodiisi luultavasti sopiva versio. Poistin muuttujat, joita ei tarvita. Silmukan loppuehto selviää suoraan, kun verrataan onko arvottu ja arvaus samanlaiset. Arvauksien lukumäärä selviää myös listan koosta.

using System;
using System.Collections.Generic;

public class Program {
	public static void Main() {
	    int answer = -1;
        string answermessage;
        int correctanswer;
        List<int> answers = new List<int>();

        Random rnd = new Random();
        correctanswer = rnd.Next(1, 1001);

        while (answer != correctanswer) {
            Console.Write("anna numero 1-1000 väliltä: ");
            answer = int.Parse(Console.ReadLine());

            if (answer == correctanswer) {
                answermessage = "arvasit oikein käytit " + (answers.Count + 1) + " arvausta!";

                foreach (int wrong in answers) {
    				Console.WriteLine(wrong);
				}
            } else {
                if (answer > correctanswer) {
                    answermessage = "arvauksesi on liian suuri...";
                } else {
                    answermessage = "arvauksesi on liian pieni...";
                }

                answers.Add(answer);
            }

            Console.WriteLine(answermessage);
		}
	}
}

jimmyn [23.09.2019 14:20:39]

#

Teuro kirjoitti:

(23.09.2019 14:11:41): Tässä nyt vielä sovitettuna tuohon sinun omaan...

kiitoksia paljon enköhän tästä opi


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta