• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc z pętlą

VPS Starter Arubacloud
0 głosów
136 wizyt
pytanie zadane 20 maja 2020 w C# przez AgentTecza Obywatel (1,810 p.)

Witam,

Moje pytanie jest następujące:

Czy da się zrobić tak żeby w tej pętli suma wyprzedza suma1 i suma dostaje +50 to swojego wyniku a suma1 - 50 

i żeby to wykonało się tylko raz a drugi dopiero wtedy gdy suma znowu wyprzedziła suma1 

 int suma = 0;
                int suma1 = 0;



                while (suma <= 1000 || suma1 <= 1000)
                {

                    licznik++;
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine(gracz1);
                    Console.ResetColor();
                    Console.WriteLine("Podaj liczbę:");
                    int liczba = int.Parse(Console.ReadLine());
                    suma += liczba;
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("NASTĘPNY GRACZ");
                    Console.ResetColor();
                    Console.ForegroundColor = ConsoleColor.DarkGreen;
                    Console.WriteLine(gracz2);
                    Console.ResetColor();
                    int liczba1 = int.Parse(Console.ReadLine());
                    suma1 += liczba1;

                    Console.WriteLine($"Suma punktów {gracz1} wynosi: {suma}");
                    Console.WriteLine($"Suma punktów {gracz2} wynosi: {suma1}\n");

 

1 odpowiedź

0 głosów
odpowiedź 20 maja 2020 przez VBService Ekspert (251,250 p.)
edycja 22 maja 2020 przez VBService

Poprawione: 22.05.2020 12:45 wink

using System;

class MainClass {
  static void pokaz_ktora_runda(int runda) {
    Console.ForegroundColor = ConsoleColor.Blue;
    Console.WriteLine("RUNDA: " + runda);
    Console.WriteLine("--------");
    Console.Beep();
  }

  static void pokaz_suma_liczb_gracz(string gracz, int suma, ConsoleColor kolor) {
    Console.WriteLine();
    Console.Write("Suma liczb ");
    Console.ForegroundColor = kolor;
    Console.Write(gracz);
    Console.ResetColor();
    Console.Write(" wynosi: " + suma);
  }

  static void pokaz_werdykt(string gracz, string werdykt, ConsoleColor kolor) {
    Console.WriteLine();
    switch (werdykt) {
      case "wygrał":
        Console.Write("Runde wygrał: ");
        Console.ForegroundColor = kolor;
        Console.Write(gracz);
        Console.ResetColor();
          break;
      case "remis":
        Console.Write("Runde zakończyła się ");
        Console.ForegroundColor = kolor;
        Console.Write("remisem");
        Console.ResetColor();
          break;
    }
  }

  static void pokaz_punkty_gracz(string gracz, int total, ConsoleColor kolor) {
    Console.WriteLine();
    Console.Write("Zdobyte punkty ");
    Console.ForegroundColor = kolor;
    Console.Write(gracz);
    Console.ResetColor();
    Console.Write(" wynosi: " + total);
  }

  static int podaj_liczbe_gracz(string gracz, ConsoleColor kolor) {
      int liczba;
      Console.ForegroundColor = kolor;
      Console.WriteLine(gracz);
      Console.ResetColor();
      Console.Write("Podaj liczbę: ");
      try {
        liczba = int.Parse(Console.ReadLine());
      } catch {
        liczba = 0;
      }

      return liczba;
  }

  public static void Main (string[] args) {

    int licznik = 1;
    int runda = 1;

    string gracz1 = "Marek gracz 1";
    string gracz2 = "Tomek gracz 2";
    int liczba1 = 0;
    int liczba2 = 0;
    int suma1 = 0;
    int suma2 = 0;
    int total1 = 0;
    int total2 = 0;
    ConsoleColor gracz_kolor1 = ConsoleColor.Cyan;
    ConsoleColor gracz_kolor2 = ConsoleColor.DarkGreen;

    Console.Clear();
    pokaz_ktora_runda(runda);

    while (total1 <= 1000 || total2 <= 1000) { 
      liczba1 = podaj_liczbe_gracz(gracz1, gracz_kolor1);
      suma1 += liczba1;

      Console.ForegroundColor = ConsoleColor.Yellow;
      Console.WriteLine("NASTĘPNY GRACZ");
      Console.ResetColor();

      liczba2 = podaj_liczbe_gracz(gracz2, gracz_kolor2);
      suma2 += liczba2;

      if(licznik % 2 == 0) {
        pokaz_suma_liczb_gracz(gracz1, suma1, gracz_kolor1);
        pokaz_suma_liczb_gracz(gracz2, suma2, gracz_kolor2);

        if(suma1 > suma2) {
          total1 += 50;
          total2 -= 50;
          pokaz_werdykt(gracz1, "wygrał", gracz_kolor1);
        } else if(suma2 > suma1) {   
          total2 += 50;
          total1 -= 50;
          pokaz_werdykt(gracz2, "wygrał", gracz_kolor2);
        } else if(suma1 == suma2) {
          pokaz_werdykt(gracz2, "remis", ConsoleColor.Red);
        }

        suma1 = 0;
        suma2 =0;
        runda++;
        
        Console.WriteLine();
        pokaz_punkty_gracz(gracz1, total1, gracz_kolor1);
        pokaz_punkty_gracz(gracz2, total2, gracz_kolor2);

        Console.WriteLine();
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("Naciśnij SPACJE, aby kontynuować");
        Console.ResetColor();
        Console.ReadKey();
        Console.Clear();

        pokaz_ktora_runda(runda);
      } else {
        Console.WriteLine();
      }

      licznik++;
    }
  }
}

Demo on-line.

(C# Exceptions - Try..Catch), (C# Switch Statements), (C# Tutorial),

komentarz 21 maja 2020 przez AgentTecza Obywatel (1,810 p.)
To co ty tutaj podałeś nie działa w ogóle od sumy całej się to nie odejmuje i nie dodaje poprawnie
komentarz 21 maja 2020 przez VBService Ekspert (251,250 p.)

Już poprawiłem. wink

komentarz 22 maja 2020 przez AgentTecza Obywatel (1,810 p.)
tylko że to się odejmuję i dodaję za każdym obrotem pętli a mi chodziło o to, że gdy suma1 wyprzedzi suma2 w punktach to wtedy suma1 + 50 a suma2 - 50 i drugi raz by się tak działo dopiero gdy znowu suma1 wyprzedzi
komentarz 22 maja 2020 przez VBService Ekspert (251,250 p.)

Przyznam szczerze, że nie bardzo rozumiem o co tobie chodzi i pewnie tak było od początku.
Kiedy pierwszy raz w pierwszym obrocie pętli, gracz1 poda liczbę 9,  gracz2: 5, taki stan jest zapamiętywany w suma1=9, suma2=5 (i już tu suma1 > suma2), ale Ty teraz chciałbyś, żeby dopiero po następnym obrocie pętli gdzie gracz1 poda liczbe 6, a gracz2: 3 (suma1 =9+6, suma2=5+3) czyli w tym przypadku zachodzi, że suma1>suma2. Czy co drugi obrót pętli ma sprawdzać sumę? Poprawiłem według tego schematu. Zobacz czy o to Tobie chodziło. wink

komentarz 22 maja 2020 przez AgentTecza Obywatel (1,810 p.)
Spróbuję ci wyjaśnić o co mi chodzi. Jest gracz1 który wpisuję np 100 i jest gracz2 który wpisuje 50 na drugim obrocie pętli gracz1 wpisuję 20 a gracz2 100 teraz suma1 jest 120 a suma2 150 więc gracz2 wyprzedza gracza1 i odejumuje graczowi1 50 więc suma1 jest 70 a graczowi2 dodaje 50 więc ma 200 teraz te odejmowanie i dodawanie ma się wykonać dopiero wtedy kiedy znowu gracz1 zostanie wyprzedzony przez gracza2. Mam nadzieję że teraz rozumiesz o co mi chodzi i mi pomożesz jeśli jeszcze nie rozumiesz to spróbuję to wyjaśnić jeszcze inaczej
komentarz 22 maja 2020 przez VBService Ekspert (251,250 p.)
edycja 22 maja 2020 przez VBService

Zobacz poprawiony przykład i w oparciu o niego spróbuj coś już sam napisać. wink

A jak sum1 gracz1 po każdym drugim obrocie pętli, będzie zawsze większa, to gracz2 nigdy nie wyprzedzi gracz1 i nigdy nie zostaną odjęte punkty gracza1 i nie zostaną dodane graczowi gracz2. Brałeś to pod uwagę ... a jak będą podawać te same liczby czyli suma1 = suma2 po każdym drugim obrocie pętli, czyli będzie remis ... zakładając, że po każdym drugim obrocie pętli "...wtedy kiedy znowu gracz1 zostanie wyprzedzony przez gracza2.",  a jak gracz2 wprzedzi gracz1 to co? A jak po każdym drugim obrocie pętli gracz2 zawsze, będzie wyprzedzał gracz1, to co?

P.S. BTW można dopisać, żeby komputer symulował wstawianie liczb gracz1 i gracz2, żeby grał "sam ze sobą" wink.

Podobne pytania

+1 głos
3 odpowiedzi 309 wizyt
pytanie zadane 13 stycznia 2021 w C# przez kubaa322 Użytkownik (710 p.)
0 głosów
1 odpowiedź 207 wizyt
pytanie zadane 24 lipca 2021 w C i C++ przez Bartusio445 Początkujący (290 p.)
0 głosów
3 odpowiedzi 198 wizyt
pytanie zadane 2 grudnia 2020 w Java przez nexyz Nowicjusz (210 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...