Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Tris in C++

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    17

    Tris in C++

    A scuola abbiamo iniziato da poco a usare il C++, ma ho gia una buona conoscienza del Pascal

    comunque, mi hanno assegnato da scrivere un codice in c++ per simulare il tris (tictactoe)

    non voglio che me lo facciate voi, ma ho molti dubbi e vorrei chiedervi diverse cose

    1. Come genero un numero casuale? A questa domanda gia ho trovato la risposta, praticamente:

    randomize;
    srand(time(0));
    turno=1+rand()%2;

    questo per generare un numero casuale da 1 a 2, ma è corretto? cioè, è necessario randomize? Togliendo ho notato che quattro volte consecutive usciva 1 e quattro volte consecutive usciva 2, ripetendosi sempre, mentre con randomize escono piu casualmente, non so se è una coincidenza

    srand(time(0)) l'ho trovato su un sito, senza di lui, il random mi generava sempre lo stesso numero


    2. Il professore ci ha consigliato di usare i tasti numerici per scegliere la casella dove vogliamo mettere la X (o il O), ma per fare una cosa piu carina, avevo intenzione di usare le freccette direzionali per indirizzare la scelta dell'utente
    In pascal l'avevo fatto per snake, ma adesso non ricordo come e immagine che comunque per il c++ sia un po diverso!
    Quindi, ricapitolando, io leggo il tasto premuto con cin>>tasto e poi con una serie di if muoverei il cursore sullo schermo a seconda del tasto premuto.. ma nell'if cosa devo mettere? if (tasto== ???)

    per ora basta cosi, sicuramente tornerò a chiedere altre cose

  2. #2
    1. randomize non è né una funzione né una parola chiave standard del C++; per inizializzare il generatore di numeri casuali basta srand.
    2. cin non ti consente di attendere la pressione di singoli tasti, ma piuttosto di acquisire stringhe, caratteri o altri tipi di dati; in ogni caso in tutte le funzioni e le classi di input del C e del C++ l'utente deve premere Invio dopo aver inserito il testo. Per attendere la pressione di singoli tasti devi usare funzioni non incluse nello standard C/C++, come la _getch().
    Ecco un esempio:
    codice:
    #include <iostream>
    #include <conio.h>
    using namespace std;
     
    int main()
    {
        int ch;
        cout<<"Premi ESC per uscire."<<endl;
        do
        {
            ch=_getch();
            if(ch==0 || ch==0xE0) //è stato premuto un tasto-funzione
            {
                cout<<"Hai premuto un tasto funzione: ";
                switch(ch=_getch())
                {
                    case 75:
                        cout<<"freccia sinistra";
                        break;
                    case 77:
                        cout<<"freccia destra";
                        break;
                    case 72:
                        cout<<"freccia in alto";
                        break;
                    case 80:
                        cout<<"freccia in basso";
                        break;
                    default:        
                        cout<<"sconosciuto ("<<ch<<")";
                }
                cout<<endl;
            }
            else
            {
                cout<<"Hai premuto un tasto normale: "<<(char)ch<<endl;        
            }
        } while(ch!=27);
        return 0;
    }
    . Tieni conto però che essendo una funzione non standard il suo comportamento potrebbe variare a seconda del compilatore e della piattaforma su cui la utilizzi. Il mio esempio è stato collaudato con Microsoft Visual C++ .NET 2003 su Windows.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    17
    quindi io come dovrei fare?

    do
    {

    tasto=getch(); //per leggere il tasto senza la pressione di invio

    if (tasto== ??) //freccia sinistra
    { codice per spostare il cursore a sinistra....}
    else if (tasto== ??) //freccia destra
    ecc..

    ma al posto dei "??" cosa devo mettere?

  4. #4
    Ma hai letto l'esempio? L'ho fatto apposta in modo che individui la pressione delle frecce...
    L'unica cosa che potrebbe non essere chiara è questa riga:
    codice:
            if(ch==0 || ch==0xE0) //è stato premuto un tasto-funzione
    .
    La _getch() quando viene premuto un tasto-funzione (ad esempio i vari F1 ... F12, le freccette, ...) restituisce come primo valore 0 o 0xE0. Per ottenere il codice vero e proprio del tasto funzione bisogna chiamare la _getch() una seconda volta (cosa che faccio nello switch).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    17
    Originariamente inviato da MItaly

    codice:
    #include <iostream>
    #include <conio.h>
    using namespace std;
     
    int main()
    {
        int ch;
        cout<<"Premi ESC per uscire."<<endl;
        do
        {
            ch=_getch();   *Qui leggi ch senza la pressione di invio*
            if(ch==0 || ch==0xE0) //è stato premuto un tasto-funzione  *Quindi se premo 
    F1, una freccia, si verifica questo if*
            {
                cout<<"Hai premuto un tasto funzione: ";
                switch(ch=_getch()) *lo switch non lo conosco, cosa fa?*
                {
                    case 75:  *Il case neanche conosco bene, ma se è come 
    il pascal è tipo l'if, giusto?*
                        cout<<"freccia sinistra";
                        break;
                    case 77:
                        cout<<"freccia destra";
                        break;
                    case 72:
                        cout<<"freccia in alto";
                        break;
                    case 80:
                        cout<<"freccia in basso";
                        break;
                    default:        
                        cout<<"sconosciuto ("<<ch<<")";
                }
                cout<<endl;
            }
            else
            {
                cout<<"Hai premuto un tasto normale: "<<(char)ch<<endl;        
            }
        } while(ch!=27);
        return 0;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.