C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό migf1 » 03 Ιαν 2012, 23:15

Ilias95 έγραψε:
...
Εμάς μας νοιάζει όμως η προγραμματιστική υλοποίηση. :P

Αυτό ακριβώς! :)

Δυστυχώς όπως γράφω και στο Readme, δεν ακολούθησα την... πεπατημένη, με αποτέλεσμα να ταλαιπωρηθώ αχρείαστα με το AI του παιχνιδιού. Για να απαντήσω και στην ερώτηση του Κώστα, οι κινήσεις δεν είναι προγραμματισμένες. Κάθε φορά που είναι η σειρά της CPU να παίξει, ψάχνει όλα τα κενά τετράγωνα για κάποιο που του δίνει την νίκη. Αν δεν βρει τετράγωνο στο οποίο να κερδίζει ψάχνει για τετράγωνα που κερδίζει ο αντίπαλος (αυτή η αναζήτηση γίνεται ταυτόχρονα, σε ένα pass).

Τα τετράγωνα τα βαθμολογεί καθώς προχωράει: σε όσα νικάει αυτός βάζει την τιμή RANK_MAX (ίση με 60 στον κώδικα). Σε όσα κερδίζει ο αντίπαλος βάζει την τιμή RANK_WINOPP (ίση με 30 στον κώδικα). Κάνει κι έναν τρίτο έλεγχο παράλληλα με τους άλλους δυο, για να βρει καταστάσεις κατά τις οποίες ο αντίπαλος μπορεί να απειλήσει με διπλή τρίλιζα... άμα βρει, πάει και βάζει πολύ χαμηλή βαθμολογία στα τετράγωνα που ΔΕΝ πρέπει να διαλέξει, προκειμένου να αποφύγει την απειλή διπλής τρίλιζας (τους βάζει την τιμή RANK_FORKOPP, που ισούται με -30 στον κώδικα).

Αφού τελειώσει με τις βαθμολογίες, έχει κρατήσει ποια είναι η υψηλότερη, οπότε παίζει σε εκείνο το τετράγωνο. Αν υπάρχουν περισσότερα του ενός τετραγώνου με την υψηλότερη δυνατή βαθμολογία, τότε διαλέγει ένα από αυτά στην τύχη.

ΥΓ. Η περπατημένη για το AI της τρίλιζας είναι με χρήση gametree και minmax heuristic (για την βαθμολογία)... για ταχύτερη εκτέλεση εκτελείται και μια τεχνική που ονομάζεται alpha-pruning, η οποία αποκλείει απευθείας αδύνατες κινήσεις.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό Star_Light » 03 Ιαν 2012, 23:19

Ilias95 έγραψε:
Έλα ρε συ ποιο κόλπο. :P Απλά είναι μια στανταρτ κίνηση που αν την κάνεις μπορεί να την πατήσει ο άλλος. Αλλά πάλι πρέπει να είναι πολύ απρόσεκτος.
Εμάς μας νοιάζει όμως η προγραμματιστική υλοποίηση. :P


Η προγραμματιστικη υλοποιηση ομως εχει ενα σταδιο πρωτυτερα που ειναι ο θεωρητικος
σχεδιασμος.

Για ποια κινηση λες εσυ ηλια ?
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό pc_magas » 03 Ιαν 2012, 23:26

Ένα ls δείχνει ότι υπάρχει ο εν λόγο φάκελος.
Κώδικας: Επιλογή όλων
pcmagas@pcmagas-Inspiron-1010:~/Λήψεις/gtk_tic$ ls
environment.txt gtk_tic.c gtk_tic_no_console.exe readme.txt
gtk_tic gtk_tic.exe gui

Ενώ ένα ls στο gui δίχνει ότι υπάρχει το αρχείο .glade
Κώδικας: Επιλογή όλων
pcmagas@pcmagas-Inspiron-1010:~/Λήψεις/gtk_tic$ ls gui
bg0_blank.png bg2_blank.png bg4_blank.png bg6_blank.png bg8_blank.png
bg0_o.png bg2_o.png bg4_o.png bg6_o.png bg8_o.png
bg0_x.png bg2_x.png bg4_x.png bg6_x.png bg8_x.png
bg1_blank.png bg3_blank.png bg5_blank.png bg7_blank.png gtk_tic_el.glade
bg1_o.png bg3_o.png bg5_o.png bg7_o.png gtk_tic_en.glade
bg1_x.png bg3_x.png bg5_x.png bg7_x.png ticlogo150.png

Ενώ όταν το τρέχω μου βγάζει τα εξής warnings
Κώδικας: Επιλογή όλων

pcmagas@pcmagas-Inspiron-1010:~/Λήψεις/gtk_tic$ ./gtk_tic

(gtk_tic:7908): Gtk-WARNING **: Could not find signal handler 'gui_on_delete_event'

(gtk_tic:7908): Gtk-WARNING **: Could not find signal handler 'gui_on_button_release_event_evxBoard'

(gtk_tic:7908): Gtk-WARNING **: Could not find signal handler 'gui_on_activate_miAbout'

(gtk_tic:7908): Gtk-WARNING **: Could not find signal handler 'gui_on_activate_miNewgame'


Και πάλι παίρνω ένα grayed παράθυρο...
Τελευταία επεξεργασία από pc_magas και 03 Ιαν 2012, 23:28, έχει επεξεργασθεί 1 φορά/ες συνολικά
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2599
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό Ilias95 » 03 Ιαν 2012, 23:27

Star_Light έγραψε:Για ποια κινηση λες εσυ ηλια ?

Παίζεις τις 2 γωνίες της ίδιας πλευράς, με την προϋπόθεση ότι ο αντίπαλος δεν θα παίξει στο κέντρο.
Έτσι μετά παίζοντας μια γωνία της απέναντι πλευράς έχεις ευκαιρία για διπλή τρίλιζα.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό Ilias95 » 03 Ιαν 2012, 23:30

@pc_magas
Κάνε το compile με:
Κώδικας: Επιλογή όλων
gcc -Wall gtk_tic.c -o gtk_tic.exe `pkg-config --cflags --libs gtk+-2.0` -export-dynamic

migf1 βάλε το και στο 1ο post.
Τελευταία επεξεργασία από Ilias95 και 03 Ιαν 2012, 23:31, έχει επεξεργασθεί 1 φορά/ες συνολικά
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό migf1 » 03 Ιαν 2012, 23:31

Α, να συμπληρώσω πως ο τρόπος με τον οποίο ψάχνει τα κενά τετράγωνα είναι με προσομοίωση μελλοντικών κινήσεων, τόσο των δικών του, όσο και του αντιπάλου του.

Δηλαδή, φτιάχνει έναν κλώνο του τρέχοντος πλέγματος και ξεκινάει στο 1ο κενό τετράγωνο με δική του κίνηση και το βαθμολογεί. Αν κερδίζει, πάει στο επόμενο κενό τετράγωνο (αυτό είναι λάθος βασικά, θα έπρεπε να σταματάει την προσομοίωση και να πηγαίνει να παίζει κανονικά την κίνηση... θα το φτιάξω σε επόμενη έκδοση). Αν δεν κερδίζει, παίρνει πίσω τη κίνησή του και παίζει με το σύμβολο του αντιπάλου να δει μήπως κερδίζει εκείνος. Σε αυτή την περίπτωση το βαθμολογεί και πάει στο επόμενο κενό τετράγωνο. Αλλιώς κοιτάει μήπως είναι τετράγωνο που πρέπει να του βάλει χαμηλή βαθμολογία, προκειμένου να γλιτώσει απειλή 2πλής τρίλιζας.

Αυτή η διαδικασία συνεχίζεται, μέχρι να μην υπάρχει άλλο κενό τετράγωνο. Οπότε ως κανονική κίνηση παίζει στο τετράγωνο με την υψηλότερη βαθμολογία από την προσομοίωση. Όταν έρθει η σειρά του να ξαναπαίξει, ξανακάνει την ίδια διαδικασία.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό pc_magas » 03 Ιαν 2012, 23:34

@Δημιουργό
Έχεις μια μια αχρησιμοπίητη μεταβλητή φίλε!!!!
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2599
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό migf1 » 03 Ιαν 2012, 23:42

Ilias95 έγραψε:
migf1 βάλε το και στο 1ο post.

Έτοιμο Ηλία, ευχαριστώ!

@pc_magas: έχω περισσότερες από μια αχρησιμοποίητες μεταβλητές (οι περισσότερες είναι απαραίτητες για τα πρότυπα των call-back functions του GTK+, αλλά είναι και μερικές απομεινάρια από διάφορες δοκιμές, καθώς επίσης και μια μεταβλητή και 2 macros για υποστήριξη Ελληνικών, που δεν την έχω ολοκληρώσει).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό migf1 » 03 Ιαν 2012, 23:47

Ένα-ένα τα θυμάμαι, αν ορίσετε το #define DEBUG ίσο με 1 στον κώδικα (νομίζω το έχω από default) τότε όταν παίζει η CPU σε Expert level, στο τερματικό τυπώνει και το πλέγμα με τις βαθμολογίες που βάζει στα τετράγωνο πριν διαλέξει κίνηση ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: C, GTK+2: Crossplatform Τρίλιζα (Tic-Tac-Toe Overkill)

Δημοσίευσηαπό Star_Light » 04 Ιαν 2012, 00:04

migf1 έγραψε:Α, να συμπληρώσω πως ο τρόπος με τον οποίο ψάχνει τα κενά τετράγωνα είναι με προσομοίωση μελλοντικών κινήσεων, τόσο των δικών του, όσο και του αντιπάλου του.

Δηλαδή, φτιάχνει έναν κλώνο του τρέχοντος πλέγματος και ξεκινάει στο 1ο κενό τετράγωνο με δική του κίνηση και το βαθμολογεί. Αν κερδίζει, πάει στο επόμενο κενό τετράγωνο (αυτό είναι λάθος βασικά, θα έπρεπε να σταματάει την προσομοίωση και να πηγαίνει να παίζει κανονικά την κίνηση... θα το φτιάξω σε επόμενη έκδοση). Αν δεν κερδίζει, παίρνει πίσω τη κίνησή του και παίζει με το σύμβολο του αντιπάλου να δει μήπως κερδίζει εκείνος. Σε αυτή την περίπτωση το βαθμολογεί και πάει στο επόμενο κενό τετράγωνο. Αλλιώς κοιτάει μήπως είναι τετράγωνο που πρέπει να του βάλει χαμηλή βαθμολογία, προκειμένου να γλιτώσει απειλή 2πλής τρίλιζας.

Αυτή η διαδικασία συνεχίζεται, μέχρι να μην υπάρχει άλλο κενό τετράγωνο. Οπότε ως κανονική κίνηση παίζει στο τετράγωνο με την υψηλότερη βαθμολογία από την προσομοίωση. Όταν έρθει η σειρά του να ξαναπαίξει, ξανακάνει την ίδια διαδικασία.


η με πιο απλα λογια

ολη η παραπανω παραγραφος ειναι ισοδυναμη με

== ΑΜΑ ΒΡΕΙΤΕ BUG ΣΦΥΡΙΞΤΕ ΜΟΥ.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron