Prosta gra konsolowa – symulator spotkania piłki nożnej

0

Cześć,
piszę projekt na zaliczenie przedmiotu. Ogólnie dość opornie idzie mi programowanie ale bardzo chciałbym zrobić postępy w tej dziedzinie. Dostałem za zadanie stworzenie mini gry (bardzo prostej...), która będzie symulacją spotkania meczu piłki nożnej. Chodzi o to, że po wybraniu odpowiedniej drużyny rozpoczyna się mecz i my jako gracz mamy możliwość poprzez wybór odpowiedniej cyfry na zdecydowanie jakiego typu zagrywkę będziemy chcieć zrobić i tak np. kiwka 70% szans na powodzenie, podanie 85%, podanie bezpieczne 95%.

Zaraz pokażę ile mam kodu wiem, że to praktycznie nic ale...nie potrafię dalej.

Rozumiem, że idea ma być taka, żeby teraz umieścić piłkarzy na odpowiednich polach (metrach kwadratowych nazwanych 1,2,3,4,5,6 - jeśli użytkownik podał boisko o 10x10 to takich pól mamy 100.

Podpowie ktoś / pomoże co dalej ? przystępnym językiem...? :)
dziękuje! PS. Tak wiem, kod jest ohydny i odrażający, ale tak jak mówię ciężko i opornie idzie mi programowanie a to dopiero początki.

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<cstdlib>
#include<windows.h>
#include<malloc.h>

void druzyna_Niemiec()
{
	char nbr[] = "Neuer";
	char nlo[] = "Hector";
	char nso[] = "Hummels";
	char nso2[] = "Boateng";
	char npo[] = "Howedes";
	char nsp[] = "Kross";
	char nsp2[] = "Khedira";
	char nls[] = "Draxler";
	char npomo[] = "Ozil";
	char nps[] = "Muller";
	char nn[] = "Gomez";
	printf("Wybrales druzyne Niemcow! Podstawowy sklad:\n");
	printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", nbr, nlo, nso, nso2, npo, nsp, nsp2, nls, npomo, nps, nn);
}
void druzyna_Polski()
{
	char pbr[] = "Szczesny";
	char ppo[] = "Piszczek";
	char pso[] = "Glik";
	char pso2[] = "Pazdan";
	char plo[] = "Jedrzejczyk";
	char psp[] = "Krychowiak";
	char psp2[] = "Milik";
	char pls[] = "Kapustka";
	char pps[] = "Blaszczykowski";
	char ppomo[] = "Grosicki";
	char pn[] = "Lewandowski";
	printf("Wybrales druzyne Polski! Podstawowy sklad:\n");
	printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", pbr, plo, pso, pso2, ppo, psp, psp2, pls, ppomo, pps, pn);
}

void boisko()
{

	int **tab;
	int x, y = 0;
	printf("Podaj szerokosc boiska:\n");
	scanf("%d", &x);
	printf("Podaj dlugosc boiska:\n");
	scanf("%d", &y);

	tab = (int**)malloc(x * sizeof(int*)); // alokacja pamięci dla wierszy
	for (int i = 0; i<x; i++)
		tab[i] = (int*)malloc(y * sizeof(int)); // alokacja pamięci dla kolumn

	int id = 0;
	for (int i = 0; i<x; i++) {
		for (int j = 0; j<y; j++)
		{

			id++;
			tab[i][j] = id;
			//printf("%d", id);
		}
	}

	// Czyszczenie pamięci
	for (int i = 0; i<y; i++)
		free(tab[i]);
	free(tab);
}
int main()
{
	
	// wywal cale boisko po za main .
	//int boisko[100][70]; // boisko 100x70m. //dynamiczna alokacja tablicy 2 wymiary przez uzytkownika z opcji w menu
	printf("Witaj w symulatorze meczu pilkarskiego!\n");
	printf("W dzisiejszym spotkaniu spotkaja sie druzyny Polski i Niemiec!\n");
	printf("Kim chcesz rozegrac spotkanie? Wybierz 1 - Niemcy, 2 - Polska:\n");
	int w;
	scanf("%d", &w);
	if (w == 1)
	{
		druzyna_Niemiec();
	}
	else if (w == 2)
	{
		druzyna_Polski();
	}
	else printf("Podales zly numer!");
	printf("\n\n\n");
	srand(time(NULL));
	int a;
	int b;
	a = rand() % 2 + 1;
	printf("Kto rozpocznie spotkanie? Wybierz Orzel - 1 lub Reszka - 2:\n");
	scanf("%d", &b);
	if (a == b) printf("Rozpoczynasz spotkanie!\n");
	else printf("Przeciwnik rozpoczyna!\n");
	printf("*************************************************************\n");

	int time = 5; // czas spotkania w sekundach
	while (true)
	{
		Sleep(1000);
		time--;
		system("cls");
		if (time == 0)
		{
			printf("KONIEC SPOTKANIA!");
			break;
		}
	}
}

: furious programming, dziękuje ;)

1

Słuchaj, a napisałbyś to samo w pseudokodzie? Na przykład:

  1. Coś robimy.
  2. Robimy coś innego.
  3. Sprawdzamy coś, i jeśli x, to y, a jeśli z, to v.

Bo moim zdaniem Tobie niekoniecznie chodzi o kod w C (choć trzeba czymś zaliczyć), ile o algorytm.

Nie musisz podawać inicjalizacji zmiennych (chyba że tak Ci będzie prościej).

0

jutro się tym zajmę i zrobię update : ) dziękuje za odpowiedź!

1

Obczaj grę Tecmo Cup Soccer/Tecmo Cup Football na sega mega drive.

Lata temu stworzenie takiej gry to było wyzwanie. Przy współczesnych technologiach nie powinieneś mieć z tym większych problemów!

A przynajmniej mogłbyś się wzorować na mechanice tej gry. Piłkarze mają swoje statsy, część z nich lepiej przejmuje piłkę ślizgiem, część blokiem itd.

1

również dziekuje za Twoją odpowiedź :) cieszę się, że pomagacie to dla mnie jako początkującego dużo znaczy! Duże piwko dla Was :)

0
Silv napisał(a):

Słuchaj, a napisałbyś to samo w pseudokodzie? Na przykład:

  1. Coś robimy.
  2. Robimy coś innego.
  3. Sprawdzamy coś, i jeśli x, to y, a jeśli z, to v.

Bo moim zdaniem Tobie niekoniecznie chodzi o kod w C (choć trzeba czymś zaliczyć), ile o algorytm.

Nie musisz podawać inicjalizacji zmiennych (chyba że tak Ci będzie prościej).

Jesli zaczynasz {
wcisnij 1 by podac pilke do kolegi (75% szans)
wcisnij 2 by podac bezpiecznie 90% szans
wcisnij 3 by przejsc przeciwnika
}
jesli suma podan > 6
{
wcisnij 1 by oddac mocny strzal pod poprzeczke (50% szans)
wcisnij 2 by oddac strzal techniczny (65% szans)
}
nie wiem jak za bardzo wlaczyc do zabawy druzyne przeciwna... wydaje mi sie ze to strasznie skomplikowane...

0
Spine napisał(a):

Obczaj grę Tecmo Cup Soccer/Tecmo Cup Football na sega mega drive.

Lata temu stworzenie takiej gry to było wyzwanie. Przy współczesnych technologiach nie powinieneś mieć z tym większych problemów!

A przynajmniej mogłbyś się wzorować na mechanice tej gry. Piłkarze mają swoje statsy, część z nich lepiej przejmuje piłkę ślizgiem, część blokiem itd.

Grę obczaiłem stworzenie takiego czegoś to by było coś...może być nawet prostsze..ale niestety nie potrafię przełożyć tego na napisanie kodu...a z gry nie znajduje nigdzie ;c

1
Mentos15 napisał(a):

niestety nie potrafię przełożyć tego na napisanie kodu...

Z pustego to nawet Salomon nie naleje. Nauczysz się podczas robienia. Masz 100 razy łatwiejszy start niż twórcy gier 25 lat temu.
Nie tylko masz narzędzia pokroju Unity, ale też masz pełno materiałów do nauki za darmo.
Trzeba tylko poświęcić trochę czasu i cierpliwie dążyć do celu.

a z gry nie znajduje nigdzie ;c

Trzeba trochę poszperać, ale da radę znaleźć. Tylko pamiętaj, że chodzi o wersję na Segę Mega Drive/Segę Genesis, bo ta z NESa nie ma numerków zawodników na boisku ;)

1

Jesli zaczynasz {
wcisnij 1 by podac pilke do kolegi (75% szans)
wcisnij 2 by podac bezpiecznie 90% szans
wcisnij 3 by przejsc przeciwnika
}
jesli suma podan > 6
{
wcisnij 1 by oddac mocny strzal pod poprzeczke (50% szans)
wcisnij 2 by oddac strzal techniczny (65% szans)
}

Na początek to może być. Zobacz, jakbym ja to widział (nie patrzę w tej chwili na Twój kod, pewnie coś już masz). Główne założenia (dobrze zawsze te główne założenia wypisywać sobie, w Windowsowym notatniku, długopisem na kartce, na GitHubie – gdzie chcesz, byleś widział, ogarnął całą listę):

  • W grze biorą udział 2 drużyny, każda po 11 zawodników.
  • Każdy zawodnik może wykonać 5 akcji: podanie, podanie bezpieczne, przejście przeciwnika, mocny strzał pod poprzeczkę, strzał techniczny.
  • Każdy zawodnik ma odpowiedni procent szans na wykonanie każdej akcji (np. zawodnik nr 1 – 50% szans na podanie, 60% szans na podanie bezpieczne itd., zawodnik nr 2 – 45% szans na podanie, 90% szans na podanie bezpieczne itd.).
  • Każdy zawodnik może albo mieć piłkę (true), albo jej nie mieć (false).
  • Żeby strzelić gol, drużyna musi wykonać 6 podań bez przejęcia piłki przez drużynę przeciwną.
  • Program działa w pętli.

Najpierw musisz wylosować podane procenty dla każdego zawodnika. Potem program ma takie instrukcje:

  1. Wyświetl stosowne informacje (nazwę drużyny, liczbę podań pozostałych do oddania strzału, nr zawodnika z piłką, listę akcji, tzw. "zachętę" – np. "Podaj nr akcji: " oraz co tam jeszcze chcesz, byle dotyczące gry) i czekaj na naciśnięcie klawisza z numerem (albo też wpisanie numeru i naciśnięcie enter – to dwa podejścia, ja wolę to drugie, bo jest dla mnie bardziej intuicyjne i ma więcej możliwości).
    1.1. Jeśli został wciśnięty klawisz "1" (podanie):
    1.1.1. wylosuj zawodnika;
    1.1.2. wylosuj, czy podanie dojdzie, czy nie (true albo false), biorąc pod uwagę procent szans wylosowanego zawodnika na podanie (na przykład ze wzoru: if (procent_szans_zawodnika * losuj(0, 1) > 0.5) then czy_dojdzie := true else czy_dojdzie := false);
    1.1.3. jeśli podanie dojdzie (wylosowano true):
    1.1.3.1. ustaw piłkę na wylosowanym zawodniku;
    1.1.3.2. zmniejsz liczbę podań do strzału o jeden;
    1.1.4. wróć do punktu nr 1.
    1.2. Jeśli został wciśnięty klawisz "2" (podanie bezpieczne):
    1.2.1. wylosuj zawodnika;
    1.2.2. ...i tak dalej.

Co dalej:

  • Gdy liczba podań osiągnie 0, należy zmienić wyświetlane instrukcje na przykład na "Podaj sposób strzału", a potem wylosować, czy strzał doszedł, czy nie.
  • Gdy podanie nie dojdzie, dla uproszczenia od razu piłkę przejmuje zawodnik drużyny przeciwnej – następuje:
    • reset liczby podań do wartości początkowej (6),
    • zmiana drużyny,
    • zmiana numeru zawodnika (numer możesz za każdym razem losować).

Dasz radę z taką koncepcją? :)

Dobrze by było, byś napisał do końca tę listę instrukcji w pseudokodzie, zanim zaczniesz pisać w C.

Pisz, jak coś niejasno napisałem.

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