Wątek przeniesiony 2018-10-23 17:39 z C/C++ przez furious programming.

Program do gry planszowej

0

Witam,

Mam do zrobienia zadanie. Zacząłem już coś pisać, ale za bardzo nie wiem jak się do tego zabrać.

Treść:

Dwóch graczy rzuca kostką. Gdy wypadnie liczba parzysta to o tę liczbę przesuwają się do przodu, jeśli jest to liczba nieparzysta to przesuwają się o jej wartość do tyłu. Pozycja gracza nie może być mniejsza od zera. Po każdym ruchu wyświetla się pozycja gracza.

Z góry dziękuję za pomoc.

3

Potrzebujesz dwóch intów do przechowywania pozycji graczy. Potrzebujesz też trzeciej zmiennej liczbowej, w której będziesz przechowywał wynik rzutu konstką (czyli zwykłego losowania liczby jakimś randomem). Przyda się też zmienna określająca indeks gracza – czyli czwarta zmienna.

W pętli rzucasz kostką (czyli losujesz liczbę) i prostym warunkiem sprawdzasz czy wylosowana liczba jest patrzysta (czyli czy jest podzielna przez 2) i jeśli tak to zwiększasz pozycję gracza (wartość zmiennej liczbowej), a jeśli nie to pozycję zmniejszasz. Dodatkowo, po aktualizacji pozycji sprawdzasz, czy bieżąca pozycja jest mniejsza od 0 i jeśli tak, to ustawiasz ją na 0. Po tym wszystkim aktualizujesz indeks gracza (czyli wartość zmiennej liczbowej).

Jeśli pozycje graczy przechowasz w prostej dwuelementowej tablicy, to indeks bieżącego gracza powinien zawierać liczbę 0 lub 1. Aby po każdym ruchu indeks ten zmieniał się z 0 na 1 i na 0 i na 1 (i tak w kółko), możesz skorzystać z dodawania i modulo, ale możesz też z xorowania.

0

Jeżeli może to być gra tekstowa to możesz stworzyć takie zmienne: liczba_pol, pozycja_1_gracza, pozycja_2_gracza, czyja_kolej. Ruch graczy może odbywać się w pętli, ruch triggerujesz wpisaniem np. "X" w konsoli, wtedy losowana jest liczba z przedziału 1-6 i zależności od tego czyja jest kolej rusza się właściwy gracz i zmieniasz czyja_kolej na drugiego gracza. Jak pozycja_1_gracza, pozycja_2_gracza będzie >= liczba_pol (warunek ustaw w zależności od tego czy pozycje liczysz od 0 czy 1) to kończysz grę.

0

Wielkie dzięki, coś z tego wyszło. Tylko pytanie jak zrobić tak, żeby nie musieć wprowadzać dwóch różnych cin aby zmieniać pomiędzy graczami, a zamiast tego operować tym za pomocą enter? Potrzebna jest jakaś nowa biblioteka?

#include <cstdlib>
#include <ctime>
#include <conio.h>

using namespace std;

int main()
{
int a=0,b=0,x,n,y,i;
char o,p;
    srand (time(NULL));
    {
        for (int i=0; i<n && a<100 && b<100 ; i++)
        {
            cin>>o;
            x=rand()%6+1;
            if(x%2==0)
                a=a+x;
            else
                a=a-x;
            if(a<0)
                a=0;
            cout<<"Pozycja gracza numer 1 to: "<<a<<endl;
            cin>>p;
            y=rand()%6+1;
            if(y%2==0)
                b=b+y;
            else
                b=b-y;
            if(b<0)
                b=0;
            cout<<"Pozycja gracza numer 2 to: "<<b<<endl;
            if(a=100)
                cout<<"Wygrywa gracz numer 1!";
            if(b=100)
                cout<<"Wygrywa gracz numer 2!";
        }
    }
}
1

Nie wiem o co ci dokładnie chodzi, ale wydziel kod odpowiedzialny za ruch gracza do osobnej funkcji. Wtedy będziesz mógł tę samą funkcję użyć dla obu graczy, przekazując parametry gracza jako argumenty.
A pojedynczy znak możesz pobrać przez cin.get

0

@Asome: dlaczego użyłeś pętli for? W treści zadania nie ma wzmianki o maksymalnej liczbie ruchów. Poważny błąd masz natomist w poniższych dwóch warunkach:

if(a=100)
    cout<<"Wygrywa gracz numer 1!";
if(b=100)
    cout<<"Wygrywa gracz numer 2!";

Zamiast porównania używasz przypisania, a to będzie działać nieprzewidywalnie. Poza tym pozycja gracza wygrywającego może być większa niż 100, więc powinieneś tak właśnie skonstruować warunki.

Nie widzę w tym kodzie zmiennej przechowującej indeks gracza. W ogóle nie rozumiem co te zmienne reprezentują przez swoje jednoznakowe nazwy.

Edit: i klamry grupujące wszystko pod srand są nadmiarowe – niczemu nie służą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1