Προς το περιεχόμενο

Παιχνίδι 2048 σε C


johnny.tifosi

Προτεινόμενες αναρτήσεις

Διόρθωσα (νομίζω) ένα bug που είχαν όλες οι εκδόσεις πριν την 0.3a1 με τα ταμπλό 6x6 (το πρόβλημα είχε να κάνει με το ότι στην 6x6 παραλλαγή του παιχνιδιού δημιουργούνται 2 τυχαία tiles αντί για 1 μετά από κάθε κίνηση).

 

Ανέβασα την 0.3a1 στο αμέσως προηγούμενο ποστ.

 

ΥΓ. Μην σκοτώνεστε για το ποιος θα πρωτo-κατεβάσει to game :lol:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 272
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Ωραίος.

 

Μια παρατήρηση: Στο readme εχεις κανει λαθος στην εντολή για το compile.

 

Και μία πρόταση: βάλε κάποιο border γύρω απο το νέο block που εμφανίζεται σε κάθε κίνηση, γιατι χωρίς animation μερικές φορές μπερδεύει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ωραίος.

 

Μια παρατήρηση: Στο readme εχεις κανει λαθος στην εντολή για το compile.

 

Και μία πρόταση: βάλε κάποιο border γύρω απο το νέο block που εμφανίζεται σε κάθε κίνηση, γιατι χωρίς animation μερικές φορές μπερδεύει.

Ευχαριστώ!

 

Το διόρθωσα το readme (thanks!), και διόρθωσα κι άλλα bugs που βρήκα στον κώδικα (τα έγραψα πριν λίγο εδώ: http://www.insomnia.gr/topic/532930-ιδέες-για-project-σε-c/page-7#entry53315728).

 

Αυτό με το border, το δοκίμασα στην αρχή, αλλά είχα μεγάλο πρόβλημα χώρου μετά με τους μεγάλους πίνακες (6x6, 8x8).

 

Βασικά πρέπει να φτιαχτεί GUI για το game, χάνει πολύ σε text-mode :(

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό με το border, το δοκίμασα στην αρχή, αλλά είχα μεγάλο πρόβλημα χώρου μετά με τους μεγάλους πίνακες (6x6, 8x8).

Για ποιο λόγο; Το border δεν χρειάζεται να κανει το block μεγαλύτερο

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ωραίο θα ήταν να υπάρχει επιλογή όταν ξεκινάει για CLI/GUI...αλλά δεν ξέρω κατά πόσο είναι εύκολο στον υπάρχοντα κώδικα να προστεθεί το GUI, δηλαδή πόσο resuable-extensible είναι ο κώδικας με το τρόπο που είναι δομημένος.

Επίσης ωραίο θα ήταν να είναι platform independent οπότε να παίζει σε Win/OSX/Linux...Ίσως κάτι σε TK/Python (TKinter) για το GUI ή GTK+...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για ποιο λόγο; Το border δεν χρειάζεται να κανει το block μεγαλύτερο

Τι εννοείς δεν χρειάζεται; Π.χ. σε πίνακα 8χ8 το ύψος των tiles είναι 2 γραμμές( και το όλο board έρχεται τσίμα-τσίμα σε πλάτος με το help-area... πάει και κολλάει δίπλα του, χωρίς να αφήνει κανένα κενό). Οπότε με 2 γραμμές ύψος ανά tile, πώς θα βάλουμε border τριγύρω του; Επίσης, δεν νομίζω πως είναι εύκολο να μπει border μονάχα σε ένα tile, πρέπει να μπει σε όλα (αλλιώς πως θα το κάνουμε draw μέσα στο board μόνο του).

 

Αν θέλεις να το ψάξεις μήπως βρεις εύκολη λύση που μου διαφεύγει, η σχετική συνάρτηση που καθορίζει τα drawing dimensions του κάθε tile είναι η _scrbox_tile_set_from_dim( struct _scrbox *box, int dim ), στο αρχείο tui.c Την χρησιμοποιεί η συνάρτηση: _init_layout( Tui *tui, const Board *board ) (στο ίδιο αρχείο, ακριβώς από κάτω της).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ωραίο θα ήταν να υπάρχει επιλογή όταν ξεκινάει για CLI/GUI...αλλά δεν ξέρω κατά πόσο είναι εύκολο στον υπάρχοντα κώδικα να προστεθεί το GUI, δηλαδή πόσο resuable-extensible είναι ο κώδικας με το τρόπο που είναι δομημένος.

Επίσης ωραίο θα ήταν να είναι platform independent οπότε να παίζει σε Win/OSX/Linux...Ίσως κάτι σε TK/Python (TKinter) για το GUI ή GTK+...

 

Το σκεφτόμουν κι εγώ, αλλά δεν έχω βρει την ευκαιρία να "σκαλίσω" τον κώδικα για να έχω άποψη.

 

Το μυαλό μου πήγε στο Lazarus, όπου αυτά τα πράγματα γίνονται σχετικά εύκολα. Απ' ότι θυμάμαι (έχω καιρό να ασχοληθώ) υποστηρίζει πολλές πλατφόρμες, και παλιότερα είχα καταφέρει να κάνω εύκολα linking με .o από C.

 

Just a thought.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

[..]Αυτό με το border, το δοκίμασα στην αρχή, αλλά είχα μεγάλο πρόβλημα χώρου μετά με τους μεγάλους πίνακες (6x6, 8x8).[..]

Το ίδιο πρόβλημα αντιμετώπισα και εγώ γράφοντας σήμερα ένα μικρό κλώνο του 2048 σε C++ Builder XE καθώς το UI δεν υποστηρίζει animation και δεν είχα την διάθεση να υλοποιήσω κάτι δικό μου από το μηδέν.

 

Η λύση στην οποία κατέληξα είναι να αναβοσβήνω για μερικά δευτερόλεπτα τον τίτλο (αριθμό) του νέου tile ώστε να τραβώ την προσοχή του παίκτη τόσο ώστε να γνωρίζει το εάν και που εμφανίστηκε το νέο tile..

 

 

 

Οπότε ίσως μια τέτοια προσέγγιση σε εξυπηρετήσει.

 

Υ.Γ.

@geomagas: Σε αλά-Delphi (VCL) εργαλεία όπως είναι ο C++ Builder το πρόγραμμα μου βγήκε περίπου 588 γραμμές με όλα τα component να δημιουργούνται δυναμικά κατά το run-time (καθώς σκοπεύω να αναρτήσω μελλοντικά τον κώδικα του) - αν το έγραφα ως τυπική εφαρμογή C++ Builder θα ήταν μικρότερο (αφού το UI θα το παρήγαγε δυναμικά/κρυφά το IDE).

 

Εξίσου μικρό μέγεθος θα έχει (ίσως και μικρότερο) αν γραφθεί σε .NET

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ωραίο θα ήταν να υπάρχει επιλογή όταν ξεκινάει για CLI/GUI...αλλά δεν ξέρω κατά πόσο είναι εύκολο στον υπάρχοντα κώδικα να προστεθεί το GUI, δηλαδή πόσο resuable-extensible είναι ο κώδικας με το τρόπο που είναι δομημένος.

Επίσης ωραίο θα ήταν να είναι platform independent οπότε να παίζει σε Win/OSX/Linux...Ίσως κάτι σε TK/Python (TKinter) για το GUI ή GTK+...

Δεν πρέπει να είναι και πολύ δύσκολο, γιατί έχω προσπαθήσει να κάνω ικανοποιητικό decoupling μεταξύ ui και υπόλοιπων συστατικών του game.

 

Λογικά αρκεί να αντικατασταθούν τα tui.c & tui_skin.c με αντίστοιχα gui.c και gui.skin.c, και κατόπιν να προσαρμοστεί ανάλογα το main.c

 

Αν δεις για παράδειγμα τον κώδικα της main() φτιάχνει ένα tui object στην _alloc() και κατόπιν το περνάει στις υπόλοιπες συναρτήσεις σαν παράμετρο... προφανώς έχει και μερικά direct calls στο κυρίως σώμα της, αλλά σε γενικές γραμμές υπάρχει νομίζω ικανοποιητικό decoupling.

 

Εφόσον πρόκειται για C project, νομίζω πως το GTK+ είναι η ενδεδειγμένη πρόταση για GUI. Εννοείται πως κι εγώ θέλω να είναι cross-platform, αλλά προφανώς δεν θα πω όχι αν κάποιος προθυμοποιηθεί να φτιάξει platform dependent GUI :)

 

Επίσης, νομίζω πως τα replay-files έχουν όλες τις απαραίτητες πληροφορίες που μπορεί να χρειαστεί ένα GUI (δεν είμαι 100% σίγουρος, αλλά νομίζω πως τις έχουν). Οπότε αν κάποιος θελήσεις να πειραματιστεί με GUI για το game, θα μπορούσε νομίζω να ξεκινήσει φτιάχνοντας έναν replay player, με μόνο input ότι περιέχει το replay file.

 

@Dx: Είσαι μεγάλος παίκτης! Αυτό θα κάνω... και είναι κι εύκολο θαρρώ γιατί έχω ήδη αυτονομημένο το drawing του κάθε tile! Thanks!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Υ.Γ.

@geomagas: Σε αλά-Delphi (VCL) εργαλεία όπως είναι ο C++ Builder το πρόγραμμα μου βγήκε περίπου 588 γραμμές με όλα τα component να δημιουργούνται δυναμικά κατά το run-time (καθώς σκοπεύω να αναρτήσω μελλοντικά τον κώδικα του) - αν το έγραφα ως τυπική εφαρμογή C++ Builder θα ήταν μικρότερο (αφού το UI θα το παρήγαγε δυναμικά/κρυφά το IDE).

 

Εξίσου μικρό μέγεθος θα έχει (ίσως και μικρότερο) αν γραφθεί σε .NET

 

Ok, και που είναι το πρόβλημα; Στον αριθμό των γραμμών;

 

Πάντως, δεν βλέπω το λόγο να μην μπορούν να αναπτυχθούν πολλά (g)ui ταυτόχρονα, και η επιλογή να γίνεται είτε στο compile time είτε στο runtime. Το ίδιο ισχύει και για το (τα) AI.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ok, και που είναι το πρόβλημα; Στον αριθμό των γραμμών;[..]

Πουθενά δεν υπάρχει πρόβλημα - απλά μιας και ανέφερες το Lazarus ("[..]όπου αυτά τα πράγματα γίνονται σχετικά εύκολα[..]") είπα να δώσω μερικά hint από την ανάπτυξη του προγράμματος σε C++ Builder επειδή ομοιάζει με το Lazarus, για αυτό ανέφερα τον αριθμό των γραμμών που μου πήρε η υλοποίηση του κλπ, κουβέντα να γίνεται .. :)
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γιατί όχι πολλά gui με ποικιλλόμορφα skins το καθένα;;; :lol:

Παιδιά, αν παρασύρομαι να μου το πείτε, έτσι; Μην ντρέπεστε!

 

Πέρα από την πλάκα, συνεχίζω να μην έχω κοιτάξει επαρκώς τον κώδικα, αλλά παρατήρησα ότι υπάρχει πχ το tui.h και το tui.c.

 

Θεωρώ ότι θα πρέπει να υπάρχει ένα ui.h, αρκετά generic για να περιέχει τις δομές και functions που η engine περιμένει από το εκάστοτε ui να υλοποιήσει. Από κεί κι έπειτα, θα υλοποιούνται uis, κατά προτίμηση σε ξεχωριστά subdirectories το καθένα, γράφοντας μόνο το αντίστοιχο *ui.c (και το υπάρχον tui.c θα πρέπει να αποκτήσει το δικό του subdirectory).

 

Με τα κατάλληλα targets στο makefile, θα μπορεί να επιλέγεται κάθε φορά το επιθυμητό (g)ui.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τι εννοείς δεν χρειάζεται;

Μμ δεν ειχε παιξει τα άλλα modes στα οποία δεν χωράει border. Ισως αν "εβαφες" απλά το tile με το νούμερο στα νέα tiles. Ή αν είχαν καποιο delay στο spawn, μερικα ms μετά την κίνηση του χρήστη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...