Większy projekt na wakacje

0

Mam teraz sporo wolnego czasu i chcę zrobić sobie jakiś większy projekt w C++, żeby się nauczyć, lepiej poznać język i nabrać trochę doświadczenia.
Nie mam jednak pomysłu co mógłbym zrobić, żeby trochę przy tym posiedzieć. Podpowiedzcie mi, czym można się zająć, może mieliście na studiach jakieś większe programiki do zrobienia, nie bardzo skomplikowane, ale takie gdzie trzeba trochę posiedzieć i pisać :)

0

najlepiej jak napisz coś co Cię wciąga np. prosta gierka, potem bardziej złożone (na początek bez interfejsu graficznego)

może też być coś dostatecznie złożonego, a jednocześnie nietrudnego np. klasa DuzaLiczba z operacjami + - * / i te działania są dostatecznie szybkie

0

napisz prosta gierke rpg, to daje duzo frajdy imo

0

Jakie gry macie na mysli? Konsolõwka? Czy z jakąs biblioteka graficzną?

0

polecam prosty symulator redstone'a z minecrafta :) albo rozbudowana wersja... nie potrzebujesz do tego zaawansowanej grafiki, za to można się pobawić logiką

0

mam na mysli tekstowa gre rpg pod windowsa lub linuxa, jesli czujesz sie na silach to dorzuc jakas grafike

0

Napisz co już umiesz i w którą stronę chcesz iść.

0

Nigdy nie robiłem niczego z biblioteką graficzną :) W C++ coś tam już umiem, może nie dużo. Ogólnie mógłbym spróbować. A coś poza grami? Jakiś pomysł na program?
Jeśli te RPG to jakie?

0

Czujesz że kiepsko kumasz klasy, to napisz coś gdzie będzie trzeba jakąś dosyć przemyślaną hierarchie klas.
Może chcesz poćwiczyć szablony, to napisz sobie np. jakieś klasy macierzy i wektorów.
Co do pytania o RPG, to chyba nie pytasz o fabułe, nie?
Przecież to ma być twoja gra, i z tą fabułą to jest tak, że nie warto zaczynać pisać RPG-a jak nie ma sie jej dokładnie obmyślanej. Sam sie na tym przejechałem ;p

0

Zrób platformówkę. Układ jest prosty. Możesz tez wspomóc sie układem UML.

https://www.google.com/cse?cx=013493258683483688568:xhfa6ctm1ki&q=C++%20game#gsc.tab=0&gsc.q=C%2B%2B%20game&gsc.sort=

0

Co do RPG to właśnie nie mam koncepcji ;)

0
Bartolinho10 napisał(a):

Co do RPG to właśnie nie mam koncepcji ;)

Postać porusza się po mapie globalnej i w losowych miejscach(albo nie losowych) atakują ją przeciwnicy. Systemu walki turowy(coś jak w margonem walka). Oczywiście są miasta, ale proste statyczne tło z budynkami gdzie tylko klikamy myszką albo proste menu z wyborem coś à la Heroes III. Zawartość sklepu zmieniana co 5 minut. Jakaś prosta mini-gra(np. kości) Wszystko oprawione w grafikę wzorowaną na lata 90/pierwszy Final Fantasy.

0
Bartolinho10 napisał(a):

Nigdy nie robiłem niczego z biblioteką graficzną :) W C++ coś tam już umiem, może nie dużo. Ogólnie mógłbym spróbować.

Ogólnie to możesz spróbować z QT, ewenatualnie GTK albo wxWidgets ale chyba najlepiej z QT, bo z tego co przeglądałem dema ma ciekawe możliwości i motywy graficzne.

A coś poza grami? Jakiś pomysł na program?

To mam dla Ciebie propozycję napisania prawdziwego kilera :-) Zamiast gry która nie wiadomo czy będzie użyteczna napisz np. odtwarzacz mp3 taki który będzie miał:

  • regulację głośności z loudness, regulacja głośności liniowa i logarytmiczna
  • regulacja balansu
  • regulacja bazy stereo (od mono do super stereo)
  • korektor graficzny (np. 3 pasmowy albo najlepiej profesjonalny na 31 pasm)
  • ładowanie predefiniowanych ustawień equalizera oraz zapis własnych
  • echo
  • zniekształcenia (skrośne, przesterowanie, może nawet emulacja wzmacniacza lampowego)
  • odtwarzanie randomowe
  • ulubione utwory i ich częstsze odtwarzanie
  • ładna szata graficzna

Jak by co mogę pomóc bo sam coś takiego napisałem, tylko nie w C++ :-) Ale Ty możesz się sporo na czymś takim nauczyć, możesz zareklamować i może się spodoba. Nie wiem tylko z jakiej biblioteki trzeba by skorzystać pod C++ żeby odtwarzać mp3.

0

Zgłoś się do @fasadin. Z tego co wiem on nadal szuka ludzi do projektu (gry).

0
drorat1 napisał(a):

Ogólnie to możesz spróbować z QT, ewenatualnie GTK albo wxWidgets ale chyba najlepiej z QT, bo z tego co przeglądałem dema ma ciekawe możliwości i motywy graficzne.

QT to QuickTime. Ja wiem czy to dobre do programowania gier.

Co innego Qt. Cross-platformowe IDE.

0

Proszę bardzo. Zacznij od początku. FizzBuzza polecam - ale odnośnie niego radziłbym Ci abyś sam i tylko sam go rozwiązywał/próbował i dopiero wtedy gdy będziesz pewny/prawie pewny swego kodu, sprawdził na internetach czy myślisz poprawnie. Pracodawcy lubią dawać fizzbuzza jako zadanko czy potrafisz klepnąć jakąś pętle poprawnie. +gdn8

0

<quote="1155515">

drorat1 napisał(a):

Co innego Qt. Cross-platformowe IDE.

Chyba chodziło Ci o Qt Creator.

1
Michalk001 napisał(a):
Bartolinho10 napisał(a):

Co do RPG to właśnie nie mam koncepcji ;)

Systemu walki turowy

Możesz się powzorować na tym:

using System;
using System.Collections.Generic;
using System.Text;

namespace RPGFightSystem
{
    class Monster
    {
        public string Name { get; set; }
        public int baseDamage { get; set; }
        public int diceSides { get; set; }
        public int damageBonus { get; set; }
        public int health { get; set; }
        public int givenExperience { get; set; }

        public Monster Clone()
        {
            Monster m = new Monster();
            m.Name = this.Name;
            m.baseDamage = this.baseDamage;
            m.diceSides = this.diceSides;
            m.damageBonus = this.damageBonus;
            m.health = this.health;
            m.givenExperience = this.givenExperience;

            return m;
        }
    }

    class Game
    {
        public List<Monster> availableMonsters = new List<Monster>()
        {
            new Monster() { Name = "Rat", baseDamage = 1, diceSides = 3, damageBonus = 0, health = 15, givenExperience = 3},
            new Monster() { Name = "Bat", baseDamage = 1, diceSides = 2, damageBonus = 0, health = 15, givenExperience = 4},
            new Monster() { Name = "Goblin", baseDamage = 1, diceSides = 4, damageBonus = 0, health = 25, givenExperience = 7},
            new Monster() { Name = "Wolf", baseDamage = 1, diceSides = 5, damageBonus = 0, health = 30, givenExperience = 9}
            //add new monsters here
        };

        public void Fight(Monster monster)
        {
            bool lastAttackerWasPlayer = false;

            Random r = new Random();

            while (monster.health > 0 && playerHealth > 0)
            {
                if (lastAttackerWasPlayer)
                {
                    int damage = (monster.baseDamage * r.Next(1, monster.diceSides)) + monster.damageBonus;

                    if (r.Next(0, 100) < 70)
                    {
                        playerHealth -= damage;
                        Console.WriteLine(monster.Name + " hits you and gives " + damage.ToString() + " damage.");
                    }
                    else //missed
                    {
                        Console.WriteLine(monster.Name + " missed to hit you.");
                    }

                    lastAttackerWasPlayer = false;
                }
                else
                {
                    int damage = (baseDamage * r.Next(1, diceSides)) + damageBonus;

                    if (r.Next(0, 100) < 70)
                    {
                        monster.health -= damage;
                        Console.WriteLine("You hit " + monster.Name + " and give " + damage.ToString() + " damage.");
                    }
                    else //missed
                    {
                        Console.WriteLine("You missed to hit.");
                    }

                    lastAttackerWasPlayer = true;
                }
                if (playerHealth <= 0)
                {
                    Console.WriteLine("You died.");
                    Console.ReadKey();
                    return;
                }

                if (monster.health <= 0)
                {
                    Console.WriteLine("You killed " + monster.Name + "! (Experience +" + monster.givenExperience.ToString() + ")");
                    playerExperience += monster.givenExperience;
                    if(playerExperience >= experienceToNextLevel)
                    {
                        playerLevel++;
                        Console.WriteLine("You advanced to level " + playerLevel.ToString());
                    }
                }

                Console.ReadKey();
            }
        }

        public int playerHealth { get; set; }
        public int playerMaxHealth { get; set; }
        public int playerLevel { get; set; }
        public int playerExperience { get; set; }
        public int experienceToNextLevel { get { return 8 * (playerLevel + 1) * (playerLevel + 1) - 8 * (playerLevel + 1); } set { value = 0; } }
        public int baseDamage { get; set; }
        public int diceSides { get; set; }
        public int damageBonus { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Game game = new Game();
            game.baseDamage = 2;
            game.diceSides = 3;
            game.damageBonus = 0;
            game.playerExperience = 5;
            game.playerHealth = 30;
            game.playerLevel = 1;
            game.playerMaxHealth = 30;

            Random r = new Random();
            string choice = "y";
            while (choice == "" || choice[0] != 'n')
            {
                if(game.playerHealth <= 0)
                {
                    Console.WriteLine("You fight great but you died.");
                    Console.ReadKey();
                    return;
                }

                Console.WriteLine("Do You want to go deeper in the dungeon? (y/n)");
                choice = Console.ReadLine();
                if (choice == "")
                    continue;

                if (choice[0] == 'y')
                {
                    Monster monster = game.availableMonsters[r.Next(0, game.availableMonsters.Count)];
                    Console.WriteLine("You meet " + monster.Name + "!");
                    game.Fight(monster.Clone());
                    Console.WriteLine("Your statistics:");
                    Console.WriteLine("Health: " + game.playerHealth.ToString() + "/" + game.playerMaxHealth.ToString());
                    Console.WriteLine("Damage: " + game.baseDamage.ToString() + "d" + game.diceSides.ToString() + "+" + game.damageBonus.ToString());
                    Console.WriteLine("Experience: " + game.playerExperience.ToString() + "/" + game.experienceToNextLevel.ToString());
                    Console.WriteLine("Level: " + game.playerLevel.ToString());
                    if(r.Next(0, 100) < 40)
                    {
                        Console.WriteLine("You found a Health Potion!");
                        game.playerHealth = game.playerMaxHealth;
                    }
                }
            }
        }
    }
}
/* http://psychotic.pl/ */
0
Console.WriteLine("Health: " + game.playerHealth.ToString() + "/" + game.playerMaxHealth.ToString());

Czytelniej tak:

Console.WriteLine("Health: {0}/{1}", game.playerHealth, game.playerMaxHealth);
0

Aaa okej takie coś to robiliśmy na lekcjach kiedyś na zaliczenie, że ma się niby postać, walka jakaś losowa itd i poprawia się statystyki albo zmniejsza jak się przegra :)

3

@Bartolinho10 cos mi sie wydaje ze ty nie chcesz nic zrobic tylko pogadac o tym co moglbys. wez sie lepiej do roboty bo ci wakacje mina

0

Najpierw trzeba zaplanować co zrobić.

0

pytales sie mnie o projekt a nie odezwales sie po wiecej detali ;)

0

Te 2 miesiące wakacji to stanowczo za mało żeby można było stworzyć jakąś sensowną aplikację desktopową w C++ jak się robi tylko proste konsolowe projekty. Generalnie mógłbym polecić może tego C++ Buildera albo MS Visual Studio i są to w zasadzie chyba jedyne sensowne narzędzia. Z QT mogą być problemy pod GCC, bo próbowałem coś zrobić w CodeBlocks pod MinGW, i QT 4.3.5, co prawda się skompilowało jednak wyskakuje jakiś błąd związany z brakiem zainstalowanego JIT debugera Visual Studio. Z NetBeans 8 jest nie lepiej, nawet nie chce się zlinkować do EXE, bo G++ nie ma jakiejś tam opcji w linii poleceń. Same problemy.

Nie wiem na podstawie czego wybierany jest do nauki ten C++ i nie sądzę żeby to był jakiś racjonalny wybór. Gry można równie dobrze pisać i w pascalu a FreePascal jest zresztą bardzo szybki. C++ jest jednym z najtrudniejszych języków programowania a już operowanie na jakichś tam open sourcowych narzędziach i GCC to już prawdziwa porażka.

Zamiast tego polecam C# bo jest znacznie prostszy do opanowania a można w nim zrobić naprawdę wiele. No ale jak ktoś chce się babrać w C++ to droga wolna.

0

Umiem coś w C++, C# nie znam w ogóle. Mam w planach nauczyć się podstaw C# i Javy, i później wybrać co najlepiej mi odpowiada.
Dopóki co, chciałem stworzyć coś poważniejszego bo znudziło mi się robić ciągle proste konsolówki.

1

@drorat1
C++ Builder... no tak nie ma to jak polecac cos w czym sie pisalo jakies 10 lat temu...
Visual studio w C++? Mowisz o CLI? Przeciez tego praktycznie sie nie uzywa... Duzo lepiej zaczac pisac w C#
qt jest bardzo dobrym wyborem jezeli chodzi o bibloteke graficzna do C++
Tez mozna napisac w wxWidgetds

0
Bartolinho10 napisał(a):

Umiem coś w C++, C# nie znam w ogóle. Mam w planach nauczyć się podstaw C# i Javy, i później wybrać co najlepiej mi odpowiada.
Dopóki co, chciałem stworzyć coś poważniejszego bo znudziło mi się robić ciągle proste konsolówki.

Masz tu jakiś tutorial dla początkujących w C#
http://www.homeandlearn.co.uk/csharp/csharp.html

W Google znajdziesz zresztą wiele przykładów.

0

@Proxima

Jak mam rozumieć rozsiana po całym internecie pomoc to ma być jedyne słuszne rozwiązanie problemów dla tych wszystkich technologii i narzędzi open source? Co do wxWidgets, w zasadzie można by zainstalować sobie wxDEV C++, v. 7.4.2 full, niestety po instalacji tego okazało się, że były jakieś bugi, aplikacja się potrafiła i zamknąć po jakimś komunikacie o błędzie. Oczywiście można sobie szukać rozwiązania problemu na Stacku czy innych forach, jeśli tylko ma się na to ochotę.

Niestety wydaje mi się że to nie składnia samego C++ i te magiczne gwiazdki są aż tak istotnym problemem tylko konfiguracja i poprawna instalacja tych wszystkich dostępnych i potrzebnych bibliotek i narzędzi a jeszcze większy problem jest wtedy, gdy się okazuje że coś się gdzieś tam na czymś wywala i albo trzeba szukać błędów, albo instalować inne wersje, albo szukać pomocy na forach, gdzie nie zawsze porady są skuteczne. No chyba że ktoś ma duże doświadczenie, to sobie jeszcze poradzi.

0

Co do zapotrzebowania na rynku pracy w jaki język proponujecie uderzyć? C++ chyba zostaje trochę wyparte?

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