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

[C] - Minesweeper clone


bnvdarklord

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

Δημοσ. (επεξεργασμένο)

Καλησπέρα,

 

Έφτιαξα ένα κλώνο του κλασσικού ναρκαλιευτή σε C(ισως με κάποια features από C++ βεβαια, αλλα νομίζω ως επι το πλείστον είναι C). Ο στόχος μου ήταν να το κάνω όσο το δυνατόν πιο κοντά σε feel στον κλασσικο ναρκαλιευτή των windows xp, και νομίζω ως ενα μεγάλο βαθμό το έχω καταφέρει.

 

Ανεβάζω το executable(δείτε σε virustotal αν θέλετε οτι ειναι οκ). Ρίξτε μια ματιά αν θέλετε για bugs ή οτιδήποτε άλλο feedback.

 

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

 

Η 32bit έκδοση θα πρέπει λογικά να παίζει και σε windows xp οπότε αν έχει κάποιος xp και μπορεί να το ελέγξει θα ημουν ευγνώμων.

 

32bit: https://www.dropbox.com/s/1xpv26cw9zakng8/Minesweeper_x86.exe?dl=0

64bit: https://www.dropbox.com/s/pagvus7ohsu0j4y/Minesweeper.exe?dl=0

 

 

Known issues:

1) Γίνεται να χάσεις από το 1 κλικ

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

 

Κάποια στιγμή(ελπίζω σύντομα) θα ανεβάσω και τον κώδικα του παιχνιδιού εδώ.

 

Ευχαριστω!

 

edit:

Ορίστε και ο κώδικας για όποιον θέλει να ρίξει μια ματιά

https://www.dropbox.com/sh/h7746ctrcwts7i1/AADFdc56at1J9VL-07-jdBMwa?dl=0

 

Any feedback welcome ;)

Επεξ/σία από bnvdarklord
  • Like 6
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

Αν και δεν ξέρω πως παίζεται αυτο το παιχνίδι (I know, υπάρχει από την εποχή των Windows 3.1 νομίζω :P) δείχνει να λειτουργεί οκ και σε 32 και σε 64 μπιτ.

 

Ωραίος!

 

Το μόνο που παρατήρησα είναι πως κάθε φορά οι νάρκες βγαίνουν στα ίδια σημεία (μήπως το έχεις αφήσει έτσι για να σε διευκολύνει στο debug?)

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

Y U no Github?  :)

 

Ναι, δεν ξέρω βαριέμαι να στήνω repos όταν φτιάχνω κάτι μόνος μου(αν και σίγουρα γίνεται κάπως αυτόματα από το VS)

 

Σε το εχεις γραψει; pure gdi?

Ναι(αν και δεν είμαι σίγουρος τι εννοεις με το "pure"). Ουσιαστικά το μόνο που χρησιμοποιεί από gdi είναι το StretchDIBits του buffer στο παράθυρο(και 2 PatBlt για τα black borders.)

 

 

Αν και δεν ξέρω πως παίζεται αυτο το παιχνίδι (I know, υπάρχει από την εποχή των Windows 3.1 νομίζω :P) δείχνει να λειτουργεί οκ και σε 32 και σε 64 μπιτ.

 

Ωραίος!

Thanks! Δεν είναι και τίποτα δύσκολο, οι αριθμοί απλά σου λένε πόσες νάρκες είναι γύρω τους. Τα υπόλοιπα είναι θέμα λογικής.

 

 

Ε, ντάξει σου έχει και κάποιες ευκολίες του στυλ:

* Αν πατήσεις 0 θα σου ανοίξει τα γύρω του μιας και σίγουρα δεν έχουν τίποτα

* Με δεξί κλικ βάζεις σημαιάκι όπου νομίζεις ότι έχει νάρκη

* Αν κάνιες δεξι+αριστερό κλικ πάνω σε ένα αριθμό και γύρω του έχει ακριβώς τόσες σημαίες θα ανοίξουν αυτόματα όλα τα γύρω κουτάκια(και αν καποια σημαία είναι λάθος θα χάσεις :Ρ)

 

 

 

Το μόνο που παρατήρησα είναι πως κάθε φορά οι νάρκες βγαίνουν στα ίδια σημεία (μήπως το έχεις αφήσει έτσι για να σε διευκολύνει στο debug?)

Εμένα αλλάζουν κάθε φορά. Είσαι σίγουρος ότι σε εσένα μένουν στα ίδια σημεία; Αν ναι θα έχει ενδιαφέρον να μάθουμε το γιατί.

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

Δημοσ. (επεξεργασμένο)

Ναι, δεν ξέρω βαριέμαι να στήνω repos όταν φτιάχνω κάτι μόνος μου(αν και σίγουρα γίνεται κάπως αυτόματα από το VS)

Δικός μου είσαι εσύ :) Και το ζιπ μια χαρά είναι!

 

Thanks! Δεν είναι και τίποτα δύσκολο, οι αριθμοί απλά σου λένε πόσες νάρκες είναι γύρω τους. Τα υπόλοιπα είναι θέμα λογικής.

 

 

Ε, ντάξει σου έχει και κάποιες ευκολίες του στυλ:

* Αν πατήσεις 0 θα σου ανοίξει τα γύρω του μιας και σίγουρα δεν έχουν τίποτα

* Με δεξί κλικ βάζεις σημαιάκι όπου νομίζεις ότι έχει νάρκη

* Αν κάνιες δεξι+αριστερό κλικ πάνω σε ένα αριθμό και γύρω του έχει ακριβώς τόσες σημαίες θα ανοίξουν αυτόματα όλα τα γύρω κουτάκια(και αν καποια σημαία είναι λάθος θα χάσεις :Ρ)

 

 

Και ο σκοπός ποιος είναι; Να ανοιχτεί όλος ο χάρτης χωρίς μπουμ;

 

Εμένα αλλάζουν κάθε φορά. Είσαι σίγουρος ότι σε εσένα μένουν στα ίδια σημεία; Αν ναι θα έχει ενδιαφέρον να μάθουμε το γιατί.

 

Ναι, έχεις δίκιο. Τώρα που το δοκίμασα πάλι αλλάζουν. Ποιος ξέρει, μάλλον ήμουν τελείως κουνουπίδι χτες που το κοίταξα (έπαιζα banished κι είχα λαλήσει... έφτασα 700 citizens και έχουν ζορίσει τα πράγματα :lol: )

 

 

btw, τι παιχνιδάρα που είναι το banished! ... κι αυτό σε C++, φτιαγμένο από έναν μόνον άνθρωπο, ούτε έτοιμες μηχανές ούτε τίποτα... respect ο τύπος... 2 χρόνια λέει του πήρε, αλλά τον περισσότερο χρόνο τον έφαγε στο artwork και όχι στον κώδικα).

 

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

Και ο σκοπός ποιος είναι; Να ανοιχτεί όλος ο χάρτης χωρίς μπουμ;

Ακριβώς, όταν ανοίξεις τα πάντα εκτός από τις νάρκες κερίζεις.

 

btw, τι παιχνιδάρα που είναι το banished! ... κι αυτό σε C++, φτιαγμένο από έναν μόνον άνθρωπο, ούτε έτοιμες μηχανές ούτε τίποτα... respect ο τύπος... 2 χρόνια λέει του πήρε, αλλά τον περισσότερο χρόνο τον έφαγε στο artwork και όχι στον κώδικα).

Κάτι μου λεει πως θα εκτιμήσεις αυτή τη προσπάθεια: https://handmadehero.org (σκρόλλαρε για το faq). Απο εκεί ουσιαστικά πήρα το motivation να φτιάξω το ναρκαλιευτή σε C χωρίς να βασίζομαι σε έτοιμα πράγματα. Και τελικά ήταν πολύ πιο έυκολο από ότι περίμενα.

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

Δημοσ. (επεξεργασμένο)

 

 

Κάτι μου λεει πως θα εκτιμήσεις αυτή τη προσπάθεια: https://handmadehero.org (σκρόλλαρε για το faq). Απο εκεί ουσιαστικά πήρα το motivation να φτιάξω το ναρκαλιευτή σε C χωρίς να βασίζομαι σε έτοιμα πράγματα. Και τελικά ήταν πολύ πιο έυκολο από ότι περίμενα.

 

You got me hooked !!!

 

Διάβασα αυτό εδώ: http://mollyrocket.com/casey/stream_0019.html (και αυτό: http://mollyrocket.com/casey/stream_0020.html, η συνέχεια του δηλαδή) και αν και είναι πολύ νωρίς για ασφαλή συμπεράσματα νιώθω την ανάγκη να φωνάξω: "this guy rocks!", "this guy knows his stuff!", "this guy knows what he's talking about!"

 

Respect!

 

Είναι a "breath of fresh air" να διαβάζεις από ανθρώπους που έχουν φάει με το κουτάλι την πράξη, αντί για αμέτρητους ακαδημαϊκους που σε φλομώνουν στην θεωρία (τις περισσότερες φορές χωρίς να έχουν δουλέψει) με εξωγήινες ασκήσεις που εν πολλοίς εμπίπτουν στη σφαίρα της φαντασίας :P.

 

 

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

Ναι, δεν ξέρω βαριέμαι να στήνω repos όταν φτιάχνω κάτι μόνος μου(αν και σίγουρα γίνεται κάπως αυτόματα από το VS)

Αυτή, αν μου επιτρέπεις, είναι η κλασική απάντηση κάποιου που δεν έχει καταλάβει τα πλεονεκτήματα του source control, πιθανότατα γιατί δεν τα έχει δει ποτέ με τα μάτια του.

 

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

git init

και αυτό ήταν. Όταν μετά κάποια στιγμή αποφασίσεις να το βάλεις online τότε μία φορά δίνεις

 

git remote add origin online-repo-address.git

και όποτε θες να ενημερώσεις το online απλά git push (με επιπλέον -u origin master την πρώτη φορά μόνο).

 

Σοβαρά τώρα αν δεν το δουλέψεις ο ίδιος δε μπορείς να καταλάβεις. Το zip που λέει ο migf1 θέλει να ασχοληθείς παραπάνω χρόνο για να πετύχεις πολύ χειρότερο αποτέλεσμα.

 

Εμένα αλλάζουν κάθε φορά. Είσαι σίγουρος ότι σε εσένα μένουν στα ίδια σημεία; Αν ναι θα έχει ενδιαφέρον να μάθουμε το γιατί.

 

Αν το είχες github θα ήταν ίσως εύκολο να δούμε το γιατί.  ;)

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

Και να μπεις από νωρίς στο κλίμα του να γράφεις ωραία μηνύματα εξηγώντας τι κάνεις (άσχετα αν "εισάγει overhead στον προγραμματιστή").

 

Είναι κρίμα να βλέπεις repos με commits "initial add" -> "update tree" -> "update tree again".

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

Αυτή, αν μου επιτρέπεις, είναι η κλασική απάντηση κάποιου που δεν έχει καταλάβει τα πλεονεκτήματα του source control, πιθανότατα γιατί δεν τα έχει δει ποτέ με τα μάτια του.

Εχω χρησιμοποιήσει αρκετές φορές και μου αρέσει. Αλλά δεν(προσωπικά πάντα) μου είναι και τόσο χρήσιμο για κάτι που φτιάχνω μονος μου και είναι τόσο μικρό όσο ο ναρκαλιευτής.

 

Αν το είχες github θα ήταν ίσως εύκολο να δούμε το γιατί.

(Αν και τελικα δεν υπήρχε το bug) Πώς ακριβώς θα βοηθούσε το source control στο να δούμε τι φταίει vs αν ήταν ο κώδικας σκέτος ανεβασμένος κάπου;

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

Δημοσ. (επεξεργασμένο)

Εγώ είμαι μαζί σου για το Git! Μην μασάς!

 

 

Btw, ο τύπος που μας έδωσες το link, κι αυτός δικός μας είναι :). Ούτε καν make δεν χρησιμοποιεί ... έτσι! Αντίσταση στα "το κάνουμε για να το κάνουμε, χωρίς να υπάρχει ουσιαστικός λόγος".

 

Είδα το 1ο του βίντεο. Δουλεύει command-line, edit με emacs, compile με ένα σκέτο batch file με το cl του VS και debug με το ide του vs (που κι αυτό από command-line to καλεί). Αρχηγός :)

 

ΥΓ. Μόνο που αντί για TCHAR καλεί directly τα ANSI functions του win32 api :P

 

 

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

ΥΓ. Μόνο που αντί για TCHAR καλεί directly τα ANSI functions του win32 api :P

Δεν έχω ίδεα τι ειναι αυτό αλλά σε όσα email του έχω στειλει με απορίες/ερωτήσεις/σχόλια απαντάει κανονικά πάντως αν θες :P

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

Δημοσ. (επεξεργασμένο)

 

Στο 1ο του βίντεο για το game καλεί MessageBoxA (και στο 1ο βίντεο για C introduction καλεί OutputDebugStringΑ).

 

Προσπάθησε να το εξηγήσει στο 1ο βίντεο για C, αλλά δεν φάνηκε να γνωρίζει για το TCHAR. Έχει να κάνει με τη "μετάβαση" του win32 api από ANSI σε Unicode. Όλα τα functions έχουν Α και W εκδόσεις, για ANSI και Wide strings, αντίστοιχα.

 

Αντί να δηλώνεις strings είτε ως char είτε ως wchar και να καλείς αντίστοιχα τις A ή W συναρτήσεις, τα δηλώνεις ως TCHAR (με #include <tchar.h>) και όπου έχεις "string literal" το γράφεις ως _T("string literal") και καλείς τις συναρτήσεις χωρίς ούτε A ούτε W (που βασικά καλείς macros). Ανάλογα με το αν έχεις κάνει define το macro directive UNICODE ή όχι, τα macros κάνουν expand είτε σε UTF16 είτε σε ascii.

 

Από default οι τελευταίες εκδόσεις του VS περιμένουν UTF16 (μέχρι την έκδοση 2010 νομίζω περίμεναν ANSI strings), οπότε αντί να καλεί απευθείας τις A εκδόσεις των συναρτήσεων, θα μπορούσε να καλεί τα macros και απλώς να περνάει L"string literal". Δεν ξέρω τι σκοπεύει να κάνει στο game, δεν ξέρω καν αν θα χρησιμοποιήσει το win32 api. Ίσως να μην χρησιμοποιήσει win32 api στα επόμενα βίντεο, οπότε ίσως για αυτό να μην τα εξηγεί καλά  (ή να μην τα γνωρίζει καν). Γιατί νομίζω λέει πως θα είναι cross-platform ο κώδικας που θα δείξει στο game.

 

 

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

Δημοσ. (επεξεργασμένο)

Α κατάλαβα. Βασικά σε ένα βιντεο αργότερα τα μετατρέπει όλα σε -Α για να είναι σίγουρο. Αλλά ξεφύγαμε λίγο από το τοπικ :P

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

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα
  • Δημιουργία νέου...