Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vertaisarvio #2

Open
ossi-hy opened this issue Apr 29, 2022 · 1 comment
Open

Vertaisarvio #2

ossi-hy opened this issue Apr 29, 2022 · 1 comment

Comments

@ossi-hy
Copy link

ossi-hy commented Apr 29, 2022

Ladattu 29.4. commit b15d2e9.

Ohjelman kääntäminen ei onnistu johtuen typosta tiedostossa random_ai.h:

In file included from src/main.c:11:
src/random_ai.h:8:45: error: stray ‘\303’ in program
    8 | int random_ai_play(int delay, int ai, int prnt);
      |                                             ^
src/random_ai.h:8:46: error: stray ‘\255’ in program
    8 | int random_ai_play(int delay, int ai, int prnt);
      |                                              ^
src/random_ai.h:8:47: error: expected ‘;’, ‘,’ or ‘)’ before ‘nt’
    8 | int random_ai_play(int delay, int ai, int prínt);
      |                                               ^~
src/main.c: In function ‘compare’:
src/main.c:36:26: error: implicit declaration of function ‘random_ai_play’ [-Werror=implicit-function-declaration]
   36 |         rand_scores[i] = random_ai_play(0, 0, 0);
      |                          ^~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [Makefile:10: src/main.o] Error 1

Tämä korjattuna ohjelmä kääntyy ongelmitta. Myös kaikki testit menevät läpi.

Koodi on erittäin luettavaa ja jaettu hyvin loogisiin osiin. Kaikki funktiot on hyvin dokumentoituja ja väliin on lisätty auttavia kommentteja monimutkaisemmissa kohdissa. Pelilogiikan testit ovat erittäin kattavia, mutta tietokonepelaajalle olisi mukava nähdä vielä syvempiä testejä (paras siirto ei ole sama kuin minkä yhden siirron syvyinen haku löytäisi).

Tiedoston game.c funktiossa move_all_left on turhaan kaksi if-lauseketta. Jos ohjelma pääsee toiseen konditionaaliin, sen tulos on aina true. Vaikka kääntäjä todennäköisesti optimoi tämän pois, on se luettavuudenkin kannalta selvempi ilman.

Saman tiedoston funktiossa is_tile_empty ei tarvita if-lauseketta, vaan sen voi tiivistää

int is_tile_empty(unsigned int *arr, int y, int x) {
    return arr[idx(y, x)] == 0;
}

Käyttöliittymä on enemmän kuin riittävä. Algoritmi ei ilmeisesti tällä hetkellä osaa odottaa tulevia laattoja? Sen lisääminen voisi olla yksi tavoista parantaa algoritmin tasoa. Toinen kehitysehdotus on välimuistin lisääminen, joka tallentaa jo arvioidut pelitilat.

Kaikenkaikkiaan erittäin lupaava ja helposti lähestyttävä projekti.

@lukxsx
Copy link
Owner

lukxsx commented Apr 30, 2022

Kiitos vertaisarviosta. Huomasin ja korjasin itsekin tuon bugin, kun kokeilin kääntää tätä Ubuntulla. Jostain syystä oma kääntäjäni (GCC 11.2.0 Archilla) ei valittanut tuosta, mutta 9.4.0 Ubuntulla valittaa.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants