It is currently 23 Apr 2014, 09:37


All times are UTC




Post new topic Reply to topic  [ 9 posts ] 
Author Message
 Post subject: Iks Oks igrica
PostPosted: 20 Dec 2012, 08:50 
Upravnik
User avatar

Joined: 25 Oct 2012, 23:22
Posts: 16
Location: Banja Luka
Bilo mi dosadno u busu kad sam isao sa BarCamp-a, pa sam odradio ovo :) Eto, igrajte se malo...

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char** napraviMatricu();
void obrisiMatricu(char**);
void stampajMatricu(char**);
void inicijalizujMatricu(char**);
void unesiX(char**);
void unesiO(char**);
int provjeriKrajX(char**, int);
int provjeriKrajO(char**, int);

int main() {
    char** matrica;
    int brojPoteza = 0;

    matrica = napraviMatricu();
    inicijalizujMatricu(matrica);
    stampajMatricu(matrica);

    while (1) {
        unesiX(matrica);
        stampajMatricu(matrica);
        brojPoteza++;
        if (provjeriKrajX(matrica, brojPoteza)) {
            printf("Prvi igrac je pobjedio!\n");
            break;
        }

        unesiO(matrica);
        stampajMatricu(matrica);
        brojPoteza++;
        if (provjeriKrajO(matrica, brojPoteza)) {
            printf("Prvi igrac je pobjedio!\n");
            break;
        }
    }

    obrisiMatricu(matrica);
    return 0;
}

char** napraviMatricu() {
    char** matrica;
    int i;
    matrica = (char**)malloc(3 * sizeof(char*));
    for (i = 0; i < 3; i++) {
        matrica[i] = (char*)malloc(3 * sizeof(char));
    }
    return matrica;
}

void obrisiMatricu(char** matrica) {
    int i;
    for (i = 0; i < 3; i++) {
        free(matrica[i]);
    }
    free(matrica);
}

void stampajMatricu(char** matrica) {
    int i, j;
    for (i=0; i<3; i++) {
        for (j=0; j<3; j++) {
            printf("%c\t", matrica[i][j]);
        }
        printf("\n\n");
    }
}

void inicijalizujMatricu(char** matrica) {
    int i,j;
    for (i=0; i<3; i++)
    for (j=0; j<3; j++)
    matrica[i][j] = '.';
}

void unesiX(char** matrica) {
    char* s;
    int x, y;
    s = (char*)malloc(sizeof(char));
    printf("=================\n");
    while (1) {
        printf("X: ");
        gets(s);
        x = s[0] - '0';
        y = s[2] - '0';
        if (strlen(s) != 3 || x < 1 || y < 1 || x > 3 || x > 3)
            printf("Neispravna pozicija!\n");
        else if (matrica[x-1][y-1] != '.')
            printf("Mjesto je zauzeto!\n");
        else break;
    }
    printf("=================\n");
    matrica[x-1][y-1] = 'X';
    free(s);
}

void unesiO(char** matrica) {
    char* s;
    int x, y;
    s = (char*)malloc(sizeof(char));
    printf("=================\n");
    while (1) {
        printf("O: ");
        gets(s);
        x = s[0] - '0';
        y = s[2] - '0';
        if (strlen(s) != 3 || x < 1 || y < 1 || x > 3 || x > 3)
            printf("Neispravna pozicija!\n");
        else if (matrica[x-1][y-1] != '.')
            printf("Mjesto je zauzeto!\n");
        else break;
    }
    printf("=================\n");
    matrica[x-1][y-1] = 'O';
    free(s);
}

int provjeriKrajX(char** matrica, int z) {
    if (z == 9) return 1;
    if (matrica[0][0] == 'X' && matrica[0][1] == 'X' && matrica[0][2] == 'X') return 1;
    if (matrica[1][0] == 'X' && matrica[1][1] == 'X' && matrica[1][2] == 'X') return 1;
    if (matrica[2][0] == 'X' && matrica[2][1] == 'X' && matrica[2][2] == 'X') return 1;
    if (matrica[0][0] == 'X' && matrica[1][0] == 'X' && matrica[2][0] == 'X') return 1;
    if (matrica[0][1] == 'X' && matrica[1][1] == 'X' && matrica[2][1] == 'X') return 1;
    if (matrica[0][2] == 'X' && matrica[1][2] == 'X' && matrica[2][2] == 'X') return 1;
    if (matrica[0][0] == 'X' && matrica[1][1] == 'X' && matrica[2][2] == 'X') return 1;
    if (matrica[0][2] == 'X' && matrica[1][1] == 'X' && matrica[2][0] == 'X') return 1;
    return 0;
}

int provjeriKrajO(char** matrica, int z) {
    if (z == 9) return 1;
    if (matrica[0][0] == 'O' && matrica[0][1] == 'O' && matrica[0][2] == 'O') return 1;
    if (matrica[1][0] == 'O' && matrica[1][1] == 'O' && matrica[1][2] == 'O') return 1;
    if (matrica[2][0] == 'O' && matrica[2][1] == 'O' && matrica[2][2] == 'O') return 1;
    if (matrica[0][0] == 'O' && matrica[1][0] == 'O' && matrica[2][0] == 'O') return 1;
    if (matrica[0][1] == 'O' && matrica[1][1] == 'O' && matrica[2][1] == 'O') return 1;
    if (matrica[0][2] == 'O' && matrica[1][2] == 'O' && matrica[2][2] == 'O') return 1;
    if (matrica[0][0] == 'O' && matrica[1][1] == 'O' && matrica[2][2] == 'O') return 1;
    if (matrica[0][2] == 'O' && matrica[1][1] == 'O' && matrica[2][0] == 'O') return 1;
    return 0;
}


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 20 Dec 2012, 13:06 
Боготац
User avatar

Joined: 14 Sep 2012, 16:43
Posts: 38
Location: Пожаревац
Кул... =)

А ђе су ти коментари рођаче? xD

_________________
The individual has always had to struggle to keep from being overwhelmed by the tribe. If you try it, you will be lonely often, and sometimes frightened. But no price is too high to pay for the privilege of owning yourself.
— Friedrich Nietzsche


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 20 Dec 2012, 15:20 
Upravnik
User avatar

Joined: 25 Oct 2012, 23:22
Posts: 16
Location: Banja Luka
Slobodno komentarisite :P


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 06 Jan 2013, 18:34 
Novajlija

Joined: 06 Jan 2013, 17:35
Posts: 8
Fino odradjeno, samo moja sugestija je da se ne koristi break naredba tamo gdje se ne mora, posto to iskace iz strukturiranog programiranja. U slucaju da ne postoji mogucnost izbjegavanja koristenja break naredbe onda je to ok (npr. switch/case blokova), ali ovdje bi bilo finije kada bi bila nekakva bool promjenljiva i kada bi se njena vrijednost ispitivala, jer to ne oduzima previse resursa, sto znaci da program nije nesto zahtjevniji, a postize se bolja preglednost koda i laksa analiza potencijalnih gresaka, npr.
Code:
#include<stdio.h>

#define true 1
#define false 0
typedef char bool;
int main() {
    bool check = true;
/*dio koda*/
    while(check) {
        if (/*uslov za prekid petlje*/)
            check = false;
    }
/*ostatak koda*/
}


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 06 Jan 2013, 23:19 
Upravnik
User avatar

Joined: 25 Oct 2012, 23:22
Posts: 16
Location: Banja Luka
while(1) je ljepse :) Btw, ima tu jos bugova.. Puno copy/paste => desi se, jebi ga... :D


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 09 Jan 2013, 01:11 
Novajlija

Joined: 06 Jan 2013, 17:35
Posts: 8
Ma svako ima svoj stil, to nije upitno. Iz iskustva sam samo napisao komentar, jer kada je veci kod i kada se tu umijesa nekonzistentnost podataka (tredovi, openmpi, openmp, djeljeni resursi i drugo) moze doci do nekakve "glupe greske", pa je bolje sprijeciti, nego lijeciti, sto kaze nas narod. Inace zbog goto i break naredbe je doslo do prve softverske krize, jer ljudi vise nisu mogli efikasno azurirati kod u svim tim silnim skokovima, pa je uvidjevsi to Edsger Wybe Dijkstra napisao clanak "Goto Statement Considered Harmful", pa je 1969. nastao jezik Paskal zaslugom Niklaus-a Wirth-a (malo istorijskih cinjenica nije na odmet)...
U svakom slicaju u ovom programu to ne pravi nikakav problem, a i naravno Vi ste urednik, tako da ja tu nemam puno sta da kazem....


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 14 Jan 2013, 20:40 
Upravnik
User avatar

Joined: 25 Oct 2012, 23:22
Posts: 16
Location: Banja Luka
Svaki dobronamjeran savjet je dobrodosao :) I nemoj da mi persiras... Cisto sumnjam da sam puno stariji od tebe (ako sam i stariji uopste ('91)). Vjerujem da bi i ti mogao napredovati po cinu ako nam zajednica malo zazivi :)


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 15 Jan 2013, 17:39 
Боготац
User avatar

Joined: 27 Sep 2012, 15:41
Posts: 32
Location: Krusevac
Pa da, zivi nam i trebaju :)


Report this post
Top
Offline Profile  
Reply with quote  
 Post subject: Re: Iks Oks igrica
PostPosted: 16 Jan 2013, 23:00 
Novajlija

Joined: 06 Jan 2013, 17:35
Posts: 8
geewid wrote:
Svaki dobronamjeran savjet je dobrodosao :) I nemoj da mi persiras... Cisto sumnjam da sam puno stariji od tebe (ako sam i stariji uopste ('91)). Vjerujem da bi i ti mogao napredovati po cinu ako nam zajednica malo zazivi :)


Ljudi se obicno naljute ako ih ne persiras ako su stariji (po cinu ili po godistu), a pogotovo kad ih se kritikuje.... pa reko da ne pravim pocetnicke greske :D
Sad posto se znamo, mozemo malo slobodnije da diskutujemo ;)


Report this post
Top
Offline Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 9 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 1 guest


You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Theme created StylerBB.net