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

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


johnny.tifosi

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

Με δεδομένο ότι δεν έχεις κάνει άλλες αλλαγές που δεν έχεις κάνει commit, θα χρησιμοποιήσεις την εντολή reset όπως δείξαμε στην περίπτωση του reflog.

 

 

 

% git checkout dev_gtk2_replayer
% git merge --strategy=ours -m "Merge but ignore master" master
% git show
commit cdccf3cc5a32721cc3b36b1894285c2ab0705eaa
Merge: 9085ec5 c1b73d2
Commit:     imitheos <[email protected]>
CommitDate: Tue Aug 12 13:38:28 2014 +0300

    Merge but ignore master
Έγινε το merge. Κοίταξε το tree σου είναι σωστό ? Αν δεν είναι κάνεις reset το tree στην προηγούμενη κατάσταση.

% git reflog 
cdccf3c HEAD@{0}: merge master: Merge made by the 'ours' strategy.
9085ec5 HEAD@{1}: checkout: moving from master to dev_gtk2_replayer
c1b73d2 HEAD@{2}: clone: from git://github.com/geomagas/2048cc.git
% git reset --hard HEAD@{1}
Πάει το merge σαν να μην έγινε ποτέ.

 

 

Αν όλα αυτά σε μπερδεύουν, τότε έχε ως πρακτική το scratch branch που είπαμε πριν κάμποσα μηνύματα.

 

 

1) % git checkout dev_gtk2_replayer
% git checkout -b mitsos1
Switched to a new branch 'mitsos1'

2) % git merge --strategy=ours -m "Scratch Merge of master" master
Merge made by the 'ours' strategy.

3) % git checkout dev_gtk2_replayer 
Switched to branch 'dev_gtk2_replayer'

4) % git br -D mitsos1
Deleted branch mitsos1 (was b0ed80b).

 

Μεταφέρεσαι στο branch που θέλεις και δημιουργείς ένα νέο branch με ό,τι όνομα θέλεις και φυσικά μεταφέρεσαι σε εκείνο. Μετά στο 2 κάνεις κανονικά merge αλλά στο νέο branch. Κοιτάς το tree και βλέπεις αν πέτυχε ή όχι. Στο 3 μεταφέρεσαι στο κανονικό σου branch και στο 4 σβήνεις το προσωρινό.

 

Αν το merge σου δεν πέτυχε ζητάς βοήθεια από κάποιον ενώ αν πέτυχε το ξανακάνεις merge αλλά στο πραγματικό branch αυτή τη φορά.

 

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

 

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

 

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

Πολύ πιθανό (αν και η βασική πηγή είναι πως δεν το θεωρώ άμεση προτεραιότητά μου).

 

Ίσα ίσα το παρόν project που δεν είναι κάτι καίριο και δεν θα νοιαστεί και πολύς κόσμος να περιέχει bugs ή αν δεν έχει επαρκή τεκμηρίωση είναι ό,τι πρέπει για να μάθεις τα ενδότερα του git. Αντί λοιπόν να χρησιμοποιείς το git ως εργαλείο για να βελτιώσεις το 2048, μπορείς να χρησιμοποιήσεις το 2048 ως εργαλείο για να βελτιώσεις το git-fu σου.

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

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

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

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

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

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

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

Όσο πιο μεγάλη και πιο γρήγορη ανάπτυξη έχεις τόσο πιο πολλά εργαλεία του git θα χρειαστείς. Αφού φτάσει σε αξιοπρεπές επίπεδο θα πέσει ο ρυθμός ανάπτυξης οπότε και δεν θα μπορείς να το μάθεις γιατί θα γίνονται 5 commits το μήνα και τα οποία θα περιέχουν typo fixes. Ούτε χαζά merge θα γίνουν όπως τώρα ούτε διενέξεις θα έχεις σε 30 αρχεία ούτε τίποτα.

 

Δεν πειράζει ας κάνεις λάθος επιλογές και ας γίνονται λάθος merges όπως αυτό του geomagas. Το αποτέλεσμα θα είναι ένα άσχημο repo αλλά όπως σωστά είπε ο pmav99 δεν σε νοιάζει να έχεις όμορφη ιστορία. Στο επόμενό σας repo θα έχετε πιο σωστή ιστορία.

 

Από εκεί και πέρα δεν μπορώ να σε αναγκάσω φυσικά να δουλέψεις git και να μη γυρίσεις σε zip.

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

Από εκεί και πέρα δεν μπορώ να σε αναγκάσω φυσικά να δουλέψεις git και να μη γυρίσεις σε zip.

Προφανώς δεν πρόκειται να το γυρίσω σε zip (δεν γίνεται multi-contributor χωρίς vcs). Ελπίζω όμως να καταλαβαίνεις πόσο εκνευριστικό, σπαστικό, χρονοβόρο, είναι το να έχεις π.χ. 2 ώρες κενό για να προχωρήσεις το πρότζεκτ (είτε είναι κώδικας, είτε σχόλια, είτε τεκμηρίωση, είτε οτιδήποτε) και αντί αυτού να τις σπαταλάς στο google για τις ιδιαιτερότητες του git.

 

Όσο πιο μεγάλη και πιο γρήγορη ανάπτυξη έχεις τόσο πιο πολλά εργαλεία του git θα χρειαστείς. Αφού φτάσει σε αξιοπρεπές επίπεδο θα πέσει ο ρυθμός ανάπτυξης οπότε και δεν θα μπορείς να το μάθεις γιατί θα γίνονται 5 commits το μήνα και τα οποία θα περιέχουν typo fixes. Ούτε χαζά merge θα γίνουν όπως τώρα ούτε διενέξεις θα έχεις σε 30 αρχεία ούτε τίποτα.

Είναι κι αυτή μια οπτική, απλώς δεν τη συμμερίζομαι στο εύρος που την παρουσιάζεις.

 

Δηλαδή, αυτό που με "καίει" εμένα αυτή τη στιγμή (τρόπος του λέγειν... δεν "καίγομαι") είναι να ολοκληρωθεί αξιοπρεπώς το 1ο στάδιο υλοποίησης τόσο του game όσο και του player. Από τη στιγμή που είναι στο αέρα (του Github) και μπήκε με την προοπτική να αποτελέσει δέλεαρ για προσέλκυση περισσότερων contributors, εκτιμώ πως αποτελεί βασική προτεραιότητα να είναι όντως ελκυστικό (και ως κώδικας, και ως τεκμηρίωση και ως λειτουργικότητα).

 

Για το game, αυτό σημαίνει πως από την παραπάνω βασική προτεραιότητα απομείνουν ακόμα: εξωτερική τεκμηρίωση του κώδικα, κι εσωτερική βελτιστοποίηση του κώδικα... χωρίς προσθήκη άλλων λειτουργιών προς το παρόν.

 

Για τον player σημαίνει, προσθήκη σχολίων στον κώδικα και ολοκλήρωση του internationalization. Κατόπιν αν χρειαστεί, και βελτιστοποίηση του κώδικα.

 

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

 

Από εκείνο το σημείο κι έπειτα, θεωρώ πως εγώ τουλάχιστον θα έχω το καθαρό μυαλό αλλά κυρίως απρόσκοπτη διάθεση να εμβαθύνω στα του git, πριν ξεκινήσει το επόμενο στάδιο υλοποίησης με νέα features (π.χ. ΑΙ ή/και GUI για το κυρίως game, ή π.χ. προσθήκη δυνατότητας bookmarks στον player, κλπ).

 

Ιδανικά βέβαια, θα προτιμούσα μέχρι τότε να υπάρχει ήδη ένας ή περισσότεροι έμπειροι git/github maintainers (είτε από πριν έμπειροι, είτε έχοντας αποκτήσει ικανή εμπειρία στο παρόν πρότζεκτ) ώστε να μην πέσει υποχρεωτικά σε μένα και αυτή η υποχρέωση.

 

Δεν πειράζει ας κάνεις λάθος επιλογές και ας γίνονται λάθος merges όπως αυτό του geomagas. Το αποτέλεσμα θα είναι ένα άσχημο repo αλλά όπως σωστά είπε ο pmav99 δεν σε νοιάζει να έχεις όμορφη ιστορία. Στο επόμενό σας repo θα έχετε πιο σωστή ιστορία.

Εννοείται πως δεν πειράζει να γίνονται λάθη. Μέσα από τα λάθη γινόμαστε καλύτεροι. Ελπίζω να μην έχω δώσει την εντύπωση πως αφορίζω ή κατακρίνω τα λάθη, γιατί ειλικρινά δεν το κάνω. Ο πρώτος από όλους που κάνει λάθη (και θα συνεχίζει να κάνει) είμαι εγώ ο ίδιος.

 

Λοιπόν, έκανα το merge --startegy=ours του master στο dev_gtk2_player branch, τοπικά, (χωρίς προβλήματα αυτή τη φορά, thanks) και επίσης έκανα επίσης επιτυχώς push το dev_gtk2_player branch στο remote origin (δηλαδή στο fork μου).

 

Το επόμενο βήμα είναι να κάνω pull-request στον geomagas το dev_gtk2_branch από το fork μου. Από εκεί και πέρα, τι πρέπει να κάνει ο geomagas ώστε από εδώ και πέρα να ενημερωθεί σχετικά και το blessed master και να μη ξαναχρειαστεί να κάνουμε 'merge ours' μέλλον;

 

EDIT:

 

...

Λοιπόν, έκανα το merge --startegy=ours του master στο dev_gtk2_player branch, τοπικά, (χωρίς προβλήματα αυτή τη φορά, thanks) και επίσης έκανα επίσης επιτυχώς push το dev_gtk2_player branch στο remote origin (δηλαδή στο fork μου)

...

@@ "χωρίς προβλήματα αυτή τη φορά" :(

 

Μόλις κάνω switch στο master, πάλι λείπει ο κώδικας του gtk2_player

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

Το επόμενο βήμα είναι να κάνω pull-request στον geomagas το dev_gtk2_branch από το fork μου. Από εκεί και πέρα, τι πρέπει να κάνει ο geomagas ώστε από εδώ και πέρα να ενημερωθεί σχετικά και το blessed master και να μη ξαναχρειαστεί να κάνουμε 'merge ours' μέλλον;

Θα κάνει merge την request όπως κάνει πάντα. Δεν χρειάζεται να κάνει κάτι ιδιαίτερο. Αν γίνει ξανά merge σε λάθος branch το βλέπουμε τότε.

 

 

@@ "χωρίς προβλήματα αυτή τη φορά" :(

 

Μόλις κάνω switch στο master, πάλι λείπει ο κώδικας του gtk2_player

Φυσικά λείπει αφού το master δεν έχει καθόλου αρχεία από τον replayer. Γιατί νομίζεις ότι θα έπρεπε να υπάρχει ο κώδικας ?
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν, κάτσε να σου εξηγήσω τι προσπαθώ να κάνω και μου λες να τελικά είναι εφικτό ή όχι.

 

Μιλάω πάντα για το τοπικό μου repo, στον σκληρό μου.

 

Θέλω λοιπόν στο master να υπάρχει ατόφιο το gtk2_replayer directory. Όταν είμαι στο master θέλω να γίνεται ignore (υποθέτω με προσθήκη του /gtk2_player στο .gitgnore αρχείο) και προφανώς όταν κάνω switch στο dev_gtk2_replayer branch να ΜΗΝ είναι ignored.

 

Γίνεται αυτό; Νομίζω το είχα κάνει, αλλά δεν είμαι σίγουρος. Αν γίνεται, πώς θα γίνει να το διατηρήσω έτσι ακόμα κι όταν κάνω pull από το blessed? Πρέπει να ανεβάσουμε στο blessed και το .gitignore αρχείο του master (ενδεχομένως και του dev_gtk2_replayer)?

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

Θέλω λοιπόν στο master να υπάρχει ατόφιο το gtk2_replayer directory. Όταν είμαι στο master θέλω να γίνεται ignore (υποθέτω με προσθήκη του /gtk2_player στο .gitgnore αρχείο) και προφανώς όταν κάνω switch στο dev_gtk2_replayer branch να ΜΗΝ είναι ignored.

Σε τι κατάσταση θα υπάρχει στο master ο κατάλογος ? Θέλεις να υπάρχει πάντα σε ανανεωμένη κατάσταση (ό,τι υπάρχει δηλαδή στο dev_gtk) αλλά να μην σε αφήνει να κάνεις commit σε αυτό ? Δεν κατάλαβα πώς το θέλεις.
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε τι κατάσταση θα υπάρχει στο master ο κατάλογος ? Θέλεις να υπάρχει πάντα σε ανανεωμένη κατάσταση (ό,τι υπάρχει δηλαδή στο dev_gtk) αλλά να μην σε αφήνει να κάνεις commit σε αυτό ?

Ακριβώς :)

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

Θα πρέπει να το σκεφτώ καλύτερα αλλά με μια πρώτη σκέψη δεν γίνεται.

 

Αν βάλεις τον κατάλογο στο .gitignore τότε θα αγνοεί τις αλλαγές οπότε με μία έννοια δεν θα μπορείς να τις κάνεις commit στο master αλλά όταν ξανακάνεις merge το dev_gtk λογικά θα χαλάσει. Επίσης, το git αγνοεί τον κατάλογο οπότε και μια απλή εναλλαγή μεταξύ branches έχει αποτελέσματα που δεν θέλεις.

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

Νομίζω το είχα κάνει, αλλά δεν θυμάμαι καθόλου πως, γιατί, κλπ. Αν όντως το είχα κάνει, μάλλον έγινε από τύχη.

Να γίνει φαινομενικά είναι πολύ εύκολο. Το δοκίμασα τώρα και φαίνεται να δουλεύει. Κάνοντας αλλαγές στο master δεν φαίνονται στο status λόγω του ignore και όταν κάνω merge το gtk στο master έρχονται όλες οι αλλαγές ασχέτως που είναι ignored. Χρησιμοποιούμε όμως μια υποδομή για λάθος σκοπό (το gitignore είναι για να αγνοεί το git untracked αρχεία και να μη σε πρήζει και όχι για ήδη υπάρχοντα στο repo αρχεία) οπότε δεν ξέρεις πότε θα σκάσει. Είμαι σίγουρος ότι σκάει αλλά δεν μπορώ να θυμηθώ την περίπτωση που είχε σκάσει.

 

Επίσης αν όμως κάποιος κάνει το ανάποδο και κάνει merge το master στο gtk, τότε θα πάει και εκεί το gitignore που είναι λάθος.

 

Με λίγα λόγια δεν νομίζω ότι είναι καλή τακτική για να ακολουθήσεις.

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

Επιστρέφω στο θέμα ακόμη κι αν δεν καταλαβαίνω τίποτα :P

 

Λόγω ελεύθερου χρόνου συνέχισα την δική μου εκδοχή του παιχνιδιού και νομίζω ότι πλέον είναι πλήρης και έχει όλα όσα θέλω. Μπορώ ίσως να την ονομάσω και 1.0 :-D Σίγουρα δεν συγκρίνεται με την δική σας και είναι πολύ απλοική, όμως δεν παύει να είναι ένα δημιούργημα με προσωπικό κόπο και με μπόλικο ξεσκόνισμα αρχαίων γνώσεων C. Οποιαδήποτε παρατήρηση για bugs είναι κάτι παραπάνω από ευπρόσδεκτη!

 

Changelog:

-Τα 4άρια εμφανίζονται με πιθανότητα 10% όπως στο αυθεντικό παιχνίδι.

-Προσθήκη highscore.

-Προσθήκη reset.

-Προσθήκη undo (μέχρι 5).

-Προσθήκη save/load game.

 

Ο κώδικας βρίσκεται εδώ: https://github.com/johnnytifosi/2048

 

Προσθέτω συνημμένο με τον κώδικα και εκτελέσιμο. Καλή διασκέδαση!

2048.zip

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

@imitheos:

 

Οπότε το παίρνω απόφαση πως δεν γίνεται αυτό που προσπαθώ, ε;

 

@tifosi:

 

Ωραίος φίλε tifosi! Δεν κοίταξα κώδικα, αλλά το έτρεξα να το δω. Όλα καλά δείχνουν εκ 1ης όψεως, αλλά όντως δεν υπάρχει επιλογή για Quit ή μου διέφυγε εμένα;

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

Επιστρέφω στο θέμα ακόμη κι αν δεν καταλαβαίνω τίποτα :P

 

Λόγω ελεύθερου χρόνου συνέχισα την δική μου εκδοχή του παιχνιδιού και νομίζω ότι πλέον είναι πλήρης και έχει όλα όσα θέλω. Μπορώ ίσως να την ονομάσω και 1.0 :-D Σίγουρα δεν συγκρίνεται με την δική σας και είναι πολύ απλοική, όμως δεν παύει να είναι ένα δημιούργημα με προσωπικό κόπο και με μπόλικο ξεσκόνισμα αρχαίων γνώσεων C. Οποιαδήποτε παρατήρηση για bugs είναι κάτι παραπάνω από ευπρόσδεκτη!

Καλά κάνεις και επανέρχεσαι και μπράβο που το τελείωσες.

 

Για bugs δεν ξέρω απλά αλλαγές που μπορείς να κάνεις.

 

Στην random:

 

* θα μπορούσες να βάλεις κάποια δομή ελέγχου που να ξεκινά από την αρχή αν το αποτέλεσμα δεν είναι ικανοποιητικό αντί να την ξανατρέχεις αναδρομικά.

 

* Γιατί ελέγχεις ειδικά για RAND_MAX και έχεις μήνυμα "now guaranteed to be in [0,rand_max]" ? Έτσι και αλλιώς εκεί δεν θα ήταν ?

 

Τα υπόλοιπα θα τα δω αργότερα.

 

Οπότε το παίρνω απόφαση πως δεν γίνεται αυτό που προσπαθώ, ε;

Δεν μου έρχεται εμένα πώς μπορεί να γίνει.

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

Δεν ξέρω τι ακριβώς έχω κάνει με τα .gitignore τα merges κλπ (έχασα τη μπάλα πάλι) αλλά μόλις έκανα pull-requests τόσο για το master branch, όσο και για το dev_gtk2_replayer branch. Καλού-κακού κάντε please ένα check πριν γίνουν merged στο blessed repo.

 

ΥΓ. Ο Lazarus player τί γίνεται... αποδήμησε; :)

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

#20: migf1 wants to merge 2 commits into geomagas:master from migf1:master

#21: migf1 wants to merge 20 commits into geomagas:dev_gtk2_replayer from migf1:dev_gtk2_replayer

Τα branches πάντως αντιστοιχούν σωστά. Θεωρώ ότι δεν θα έχουμε πρόβλημα.

Είναι κάτι συγκεκριμένο που πρέπει να εξέγξω;

 

Για το Lazarus, είχα τη φαεινή ιδέα να το κάνω upgrade πριν λίγες μέρες (είχα μία αρχαία έκδοση 0.9.κάτι) και κατέληξε να μη δουλεύει (δεν έβρισκε τα .cfg της FreePascal). Μόλις χθες κατάφερα και του ξανάκανα ένα clean install στην τελευταία έκδοση.

 

Αλλά με τέτοιο πήξιμο φέτος (ούτε μουσταλευριά να ήμουν!) δεν ξέρω αν θα προλάβω τίποτα. Στη χειρότερη, θα του ρίξω καμιά ματιά μετά τις 16 δίπλα στο κύμα! :D

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

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

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

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

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

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

Σύνδεση

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

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

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