yorweth Temat założony przez niniejszego użytkownika |
Gra wisielca » 2014-02-05 21:08:41 YO! Mam coś dla was, małe wyzwanie. Otóż miałem do wykonania grę w wisielca na zaliczenie, uwaliłem, jednak postanowiłem że i tak to zrobię, i możliwe że na poprawę dostanę to samo. Jeśli zaś chodzi o wisielca problem jest dość skomplikowany. Otóż: Należy zrobić tablice 10-elementową, od użytkownika pobieramy słowo i wrzucamy do tablicy, następnie wyświetlamy tylko pierwszą i ostatnią litere, na przykład dla słowa, domek byłoby to d_ _ _ _ k, a w miejsce reszty liter wstawiamy takie o to przerywniki. Następnie użytkownik podaje litery jeśli poda literę która pasuję np. m, to program wyświetli nam: d _ m _ k. Jeśli zaś litera nie pasuje to wyświetla po jednej literkę z wyrazu "koniec", z kolejna nie trafioną literą wyświetla o jedna więcej, ąż do końca. I na koniec, jeśli użytkownik odgadnie całe hasło powinien pojawić się jakiś komunikat że wygrał, a gdy straci wszystkie szanse wyświetla się koniec, i miło by było żeby wyświetlał się cały wyraz ale to już nie jest konieczne. Nie rzucę wam oczywiście całego zadania i róbta. Udało mi się napisać już spory kawał programu. Wciąż jednak nie potrafię sobie poradzić z pobieraniem znaków, i ich sprawdzaniem czy są poprawne czy nie. #include <stdio.h> #include <stdlib.h>
int main( int argc, char * argv[] ) { char tab[ 10 ]; char a; char end[ 6 ] = { 'k', 'o', 'n', 'i', 'e', 'c' }; int i, z, j, b, c = 0, d; char pomoc[ 10 ] = { '_', '_', '_', '_', '_', '_', '_', '_', '_', '_' }; printf( "Witam w grze wisielec,podaj slowo na maks 10 liter:" ); scanf( "%s", & tab[ i ] ); do { printf( "%c", tab[ i ] ); i++; } while( tab[ i ] != '\0' ); printf( "\n" ); for( i = 0; i < 10; i++ ) { if( tab[ i ] != '\0' ) z++; else break; } pomoc[ 0 ] = tab[ 0 ]; pomoc[ z - 2 ] = tab[ z - 2 ]; for( i = 0; i < z - 1; i++ ) { printf( "%c ", pomoc[ i ] ); } for( i = 0; i < z - 3; i++ ) { scanf( "%s", & a ); for( d = 0; d < z - 3; d++ ) { if( a = tab[ i ] ) { pomoc[ i ] = tab[ i ]; for( b = 0; b < z - 1; b++ ) { printf( "%c ", pomoc[ i ] ); i--; } } else { c++; for( j = 0; j < c; j++ ) { printf( "%c ", end[ j ] ); } } } } return 0; } Można się troszeczkę pogubić, pod koniec jest poczwórna pętla, ale jak coś to usuńcie to, jeśli mój pomysł na system jest zły. Z góry dziękuje za pomoc. |
|
leon_w |
» 2014-02-06 21:12:42 Możesz podpatrzyć jak ja to rozwiązałem przy grze "koło fortuny". Zasada jest bardzo podobna. Hasło jest "zasłaniane" przez jakiś znak, gdy użytkownik trafi literkę, zostaje odsłoniona. Gra konsolowa - Koło fortuny |
|
alixir |
» 2014-02-07 14:29:47 Jak wyskrobiesz działający kod to pochwal się :) Buduj program małymi kroczkami, upewniając się że wprowadzony kod jest poprawny i działa zgodnie z założeniem. Obecnie masz sporo podstawowych błędów i to już od samego początku kodu. Osobiście napisałem sobie taka gierkę, ale nie chcę ci mieszać w głowie i zbijać z tropu. Człowiek najlepiej rozumie swój własny kod.
A jak masz jakiś konkretny problem to pytaj. |
|
yorweth Temat założony przez niniejszego użytkownika |
» 2014-03-27 11:53:08 A pochwale się. Co prawda temat już zdeczka zaleciał kurzem, ale mam dzialającego wicielca, co prawda program nie jest idealny, ale w odpowiednich warunkach działa jak należy. #include <stdio.h> #include <stdlib.h>
void wyswietlanie( char pomoc[], int z ); int main( int argc, char * argv[] ) { char tab[ 11 ]; char pomoc[ 11 ] = { '_', '_', '_', '_', '_', '_', '_', '_', '_', '_' }; char w; int flaga; int z = 0, i = 0, b = 6, a = 0; printf( "Witaj w wisielc\n" ); printf( "Podaj slowo na maks 10 liter:" ); scanf( "%s", & tab[ i ] ); do { printf( "%c", tab[ i ] ); i++; z++; } while( tab[ i ] != 0 ); printf( "\n" ); pomoc[ 0 ] = tab[ 0 ]; pomoc[ z - 1 ] = tab[ z - 1 ]; system( "cls" ); for( i = 0; i < z; i++ ) { printf( " %c ", pomoc[ i ] ); } fflush( stdin ); do { printf( "pozostaly %d szanse\n", b ); fflush( stdin ); scanf( "%c", & w ); flaga = 0; for( i = 1; i < z - 1; i++ ) { if( w == tab[ i ] ) { printf( "ok!!!\n" ); pomoc[ i ] = tab[ i ]; flaga = 1; } } wyswietlanie( pomoc, z ); if( flaga == 0 ) { b = b - 1; printf( "error!!!\n" ); } if( flaga == 1 ) { a = a + 1; } } while( b > 0 && a < z - 2 ); if( b < 1 ) printf( "Koniec\n" ); if( a > z - 3 ) printf( "Wygrales\n" ); system( "PAUSE" ); return 0; } void wyswietlanie( char pomoc[], int z ) { int i; for( i = 0; i < z; i++ ) { printf( " %c ", pomoc[ i ] ); } }
. |
|
alixir |
» 2014-03-27 13:15:50 Tak jak napisałeś: tylko w sprzyjających warunkach. Można podawać ciągle tą samą literę i też się wygra. Też kiedyś pisałem wężyka. Zapewne ma sporo wad, ale wkleję go dla przykładu. #include <cstdio> #include <cstdlib> #include <cstring> #include <ctype.h>
int readWord( char * ); void printText( char *, int );
int main() { char word[ 21 ]; char progress[] = "____________________"; char endText[] = "KONIEC"; char letter; int chances = 6; bool hit, victory; int word_length = readWord( word ); progress[ 0 ] = word[ 0 ]; progress[ word_length - 1 ] = word[ word_length - 1 ]; do { victory = true; hit = false; printText( endText, strlen( endText ) - chances ); printText( progress, word_length ); printf( " Podaj litere: " ); letter = tolower( getchar() ); while( getchar() != '\n' ) continue; for( int i = 1; i <( word_length - 1 ); i++ ) if(( letter == word[ i ] ) &&( word[ i ] != progress[ i ] ) ) { progress[ i ] = word[ i ]; hit = true; break; } if( !hit ) chances--; for( int i = 0; i < word_length; i++ ) if( word[ i ] != progress[ i ] ) victory = false; } while( chances > 0 && !victory ); if( victory ) printf( "\nBRAWO\n" ); else printf( "KONIEC\n\nNiestety nie udalo ci sie\n" ); printf( "Szukany wyraz to: %s\n", word ); return 0; }
int readWord( char * txt ) { int i; do { printf( "Podaj wyraz skladajacy sie z max 20 znakow: " ); scanf( "%20s", txt ); system( "cls" ); } while(( i = strlen( txt ) ) < 3 ); while( getchar() != '\n' ) continue; int n = 0; while( txt[ n ] ) { txt[ n ] = tolower( txt[ n ] ); n++; } return i; }
void printText( char * tab, int tsize ) { for( int i = 0; i < tsize; i++ ) printf( "%c", tab[ i ] ); printf( "\t" ); }
|
|
« 1 » |