funkcja za pomocą preprocesora

0

W jaki sposób mógłbym poniższy kod przypisać do ciągu liter powiedzmy MENU_DISPLAY. Nie używając funkcji.

    cout << "\nTurn: " << world.getGenQueue(); // powinna to byc tabelka ladna i przerobiona na funkcje
    cout << "\tTurn of player: " << world.getQueue();
    cout << "\tPlayer position: " << p[ world.getQueue() ].getPosition();
    cout << "\tBalance: " << p [ world.getQueue() ].getMoney(); // to jest start tury

to jest jakiś:

#define MENU_DISPLAY // czy cos w tym stylu?

Pozdrawiam,
Unico

0

O co chodzi w tym temacie?

0

Przyłączam się do @n0name_l, przeczytałem kilka razy i chyba mam problem że zrozumieniem :D

0

Dobra poprawiłem. Też nie wiedziałem o co chodzi. Przepraszam.

0

Ale czemu nie mozesz użyć funkcji?

3

można:

#define MENU_DISPLAY {\
    cout << "\nTurn: " << world.getGenQueue(); // powinna to byc tabelka ladna i przerobiona na funkcje \
    cout << "\tTurn of player: " << world.getQueue(); \
    cout << "\tPlayer position: " << p[ world.getQueue() ].getPosition(); \
    cout << "\tBalance: " << p [ world.getQueue() ].getMoney(); // to jest start tury \
   }

Ale stanowczo odradzam takich rozwiązań.

0

W tym przypadku nie chcę używać funkcji bo to jest fragment którego zmieniać na pewno nie będę, a funkcje czasami mi już wychodzą strasznie pogmatwane :(

przykład:

s[p[  world.getQueue() ].getPosition() ].rentStreet(p[ world.getQueue() ], p[ s[ p[ world.getQueue() ].getPosition() ].owner]);

i oczywiście jakoś to sobie skracam tymczasowymi zmiennymi, ale i tak końcowa forma jest ciężka do ogarnięcia:

s[pos].rentStreet(p[qu], p[ s[pos].owner]);

Stąd jakieś takie obrzydzenie do funkcji się pojawiło.

A mogę wyrzucić z maina fragment gdzie ładuje dane bezpośrednio na zmienne? ( w taki sposób żebym w głównej części programu mógł bezpośrednio odwoływać się do s[40]

#import <iostream>
#import <ctime>
#import <cstdlib>
#import <fstream>
#import <sstream>


/*
================================by UnicoRush====================================

TO DO LIST:
      wpadanie na ulice - czesciowo porobione
      kupowanie ulic - porobione
      kupowanie domków:
                check czy aleja nalezy do gracza
                check czy domki nie różnią się wielkościami
      jail
      karty kasa społeczna i szansa
      niestandardowe ulice - dworce, wodociagi i elektrownia, podatek dochodowy
      petla gry - czesciowo porobione
      3 duble - jail
      zastawianie ulic
      
      


*/
using namespace std;

#include "dice.h"
#include "dice.cpp"
#include "game.h"
#include "street.h"
#include "player.h"
#include "player.cpp"
#include "street.cpp"



       
       
       
int main() {
    
    //setting up some basics
    srand(time(NULL));
    int players;
    dice d1, d2;
    char error_1;
    game world;
    int qu, pos, paid;
    
    setting_players:
    
    //choosing number of players
    cout << "Select number of players:\n> ";
    cin >> players;
    
    if (players > 6) {
          cout << "Number of player is not recommended. Do you want to continue? [Y/N]\n";
          cin >> error_1;
          if (error_1 == 89) { cout << "\n\nGoing back... \n\n"; }
          else { cout << "\n\n"; goto setting_players; }
    }
    
    if (players < 1) { goto setting_players; }
          
    player p[13]; // 0 player nieznany, od 1 wchodzą gracze
          
          
    // setting up basics of players variables
    for (int n=1; n <= players; n++) {
    p[n].setID(n);
    p[n].setMoney(1200);
    p[n].setPosition(0);
    }
    // setting up world
    world.setQueue(1);
    world.setGenQueue(1);   
    world.setHouses(32);
    world.setHotels(12);
    
    // setting up streets:D - DONE
    street s[40];
    string parser;
    fstream plik;    

    plik.open( "street3.csv", ios::in );
    
    if ( plik.good() )  //test poprawnosci pliku
    { cout << "\nStreet data opened!"; }
    else { cout << "\nOpening street data failure! :("; }
    
    
    //loop
    for (int i = 0; i < 40; i++)
    {
    s[i].houses = 0;
    s[i].state = 0;
    //wczytujemy name   
    getline(plik, s[i].name,';');
    cout << "\nName: " << s[i].name ; //to comment
    
    //wczytujemy position
    getline(plik, parser, ';');
    s[i].strPosition(parser);
    cout << "\nPosition: " << s[i].position;  //to comment
    
    //wczytujemy typ
    getline(plik, parser, ';');
    s[i].strType(parser);
    cout << "\nType: " << s[i].type; //to comma
    
    //wczytujemy owner
    getline(plik, parser, ';');
    s[i].strOwner(parser);
    cout << "\nOwner: " << s[i].owner;  //to comma
    
    //wczytujemy price
    getline(plik, parser, ';');
    s[i].strPrice(parser);
    cout << "\nPrice: " << s[i].price;
    
        for (int m = 0; m <= 5; m++ )
        {
        getline(plik, parser, ';');
        s[i].strRent( m, parser);
        cout << "\nRent level: " << m <<"  Price size: " << s[i].rent[m];
        } 
    }
    //Hello world here serious programming is going
    
    // nie edytuj players!
    
    cout << "\n\n================================\n";
    cout <<"Hello in Monopoly!\n" << "================================\n~by UnicoRush\n\n";
    int temp;
    bool que_change;
    char a;
    
    while (1)
    {
    cout << "\nTurn: " << world.getGenQueue(); // powinna to byc tabelka ladna i przerobiona na funkcje
    cout << "\tTurn of player: " << world.getQueue();
    cout << "\tPlayer position: " << p[ world.getQueue() ].getPosition();
    cout << "\tPlayer money: " << p [ world.getQueue() ].getMoney(); // to jest start tury
    
    // tu sie kupuje domki
    
    que_change = p[ world.getQueue() ].move(d1, d2, players);
    qu = world.getQueue();
    s[ p[qu].getPosition() ].card();
    pos = p[ qu ].getPosition();
    
    while (1)
    {    //not work properly
    if ((s[pos].owner != 0) && (s[pos].rent[s[pos].houses] != 0) && s[pos].owner != p[qu].ID)    { paid = 0;
       while (paid == 0) {
                      cout << "\n\nYou are obligated to pay: " << s[pos].rent[s[pos].houses] << "\nClick 'r' to rent.\n> "; //w rent zablokowac mozliwosc pieniedzy na -, dodac mortgage sell houses, sell to player w tej petli
                      cin >> a;
                      if (a == 'r') { s[pos].rentStreet(p[qu], p[ s[pos].owner]); cout << "Paid."; paid++; } } }
                      
                      
                      
    cout << "\n'b' to buy \t 'c' to clear \t 'e' to end turn \t 's' to look at street\n> ";
    cin >> a;
    if (a=='b') {     p[ qu ].buyStreet( s[ p[ qu ].getPosition()] ); cout << p[qu].getPosition() << qu; }
    else if (a=='c') { system("cls"); }
    else if (a == 'e') { break; }
    else if (a == 's') { cout << "\nSelect position of street you want to look at:\n> "; cin >> temp; s[ temp ].card(); }
    else { cout << "\n===========ERROR===============" << a; }
    }
    
       
    world.endTurn(que_change, players);
    system("cls");
    } // tymczasowy stopper
    
}

    

i chciałbym cały setting up wyrzucic do innego pliku bo juz nie jest mi tu potrzebny a strasznie denerwuje mnie przewijanie tego wszystkiego

0

Zamień typ tego owner z indeksu na wskaźnik.

0

Dobra problem rozwiązany.

0

A czy mogę stworzyć funkcje luźną taką która nie bd spinać się o swoją zawartość?

Tworzę właśnie funkcje której zadaniem będzie rysowanie menu. Gdybym mógł odnosić się do zmiennych globalnych takich które już występują w kodzie to nie musiałbym podawać tak szalonej liczby argumentów do funkcji. Da się?

void menu(char a, int x = 0, int y = 24, game world, street s[], player p[], int qu, int temp, int pos)
{    
    system("cls"); 
    gotoxy(0, 0); 
    cout << "\nTurn: " << world.getGenQueue();  
    cout << "\tTurn of player: " << world.getQueue(); 
    cout << "\tPlayer position: " << p[ world.getQueue() ].getPosition(); 
    cout << "\tBalance: " << p [ world.getQueue() ].getMoney();  
    gotoxy(x, y);
    if (a=='b') {     p[ qu ].buyStreet( s[ pos ] );  }
    else if (a=='c') { system("cls"); }
    else if (a == 'e') { break; }
    else if (a == 's') { cout << "\nSelect position of street you want to look at:\n> "; cin >> temp; s[ temp ].card(); }
    else if (a == 'a') { cout << "\nAdmin buying mode:\n> "; cin >> temp; p[qu].buyStreet(s[temp]); }
    else if (a == 'z') { cout << "\nAdmin houses:\n> "; cin >> temp; p[qu].buyHouse(s, world, temp); }
}
1

Zapoznaj się ze strukturami - już wystarczy aby to ogarnąć, ale lepiej oczywiście klasy.

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