سورس بازی مار (Snake) به زبان C
در این بخش سورس بازی مار (Snake) به زبان C را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی سی (C) نوشته شده است. در ادامه می توانید توضیحات، تصاویر و فیلم مربوط به اجرای این پروژه را مشاهده کنید.
توضیحات پروژه
این بازی هنوز هم طرفداران زیادی در جهان دارد و در گذشته (قبل از تولید شدن بازی های مدرن و گرافیکی) یکی از محبوب ترین بازی ها بود. بازی Snake اولین بار در سال 1997 و گوشی نوکیا 6110 ظاهر شد. در حال حاضر نسخه های مختلفی از این بازی برای گوشی های هوشمند تولید شده است.
در این پروژه بعد از اجرا شدن برنامه، یک مار با طولی که در برنامه مشخص شده است (INITIAL_LENGTH) در محیط بازی رسم شده و شروع به حرکت می کند. جهت حرکت پیشفرض به سمت راست در نظر گرفته شده است. در سمت راست محیط بازی اطلاعات مربوط به بازی (امتیاز بازیکن و طول فعلی مار) نمایش داده می شوند. کاربر می تواند با استفاده از کلید های جهت دار صفحه کلید (بالا، پایین، چپ و راست) جهت حرکت مار را تغییر دهد. اگر هیچ کلیدی فشار داده نشود، مار به آخرین سمتی که تغییر جهت داده است، ادامه حرکت می دهد.
قوانین بازی، همان قوانین رایج است. یعنی نباید به دیواره های محیط بازی و بدنه خود مار برخورد کنید. اگرم هم امتیاز خوردید، یک واحد به طول مار و 10 واحد به امتیاز شما اضافه می شود.
شما با مشاهده سورس کد این پروژه می توانید مواردی همچون، تغییر مختصات نشانگر کنسول، حرکت دادن مقادیر بر روی صفحه، کار با کلید های صفحه کلید و کار با تابع rand و تابع srand را یاد بگیرید.
قسمت های از سورس کد
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #include <stdio.h> #include <windows.h> #include <stdlib.h> #include <conio.h> #define SPACE ' ' #define SNAKE_SYMBOL '*' #define POINT_SYMBOL '+' #define WALL_SYMBOL '@' #define BOARD_SIZE 40 #define MOVE_DELAY 200 #define INITIAL_LENGTH 6 #define POINT_VALUE 10 #define MAX_WIDTH BOARD_SIZE #define MIN_WIDTH 1 #define MAX_HEIGHT BOARD_SIZE / 2 + 2 #define MIN_HEIGHT 1 typedef enum { UP = 72, DOWN = 80, LEFT = 75, RIGHT = 77 } Direction; typedef struct { short x; short y; } Coordinate; typedef struct { int length; Coordinate *coordinates; } Snake; Snake snake; Direction lastDir = RIGHT; Coordinate pointCoordinate; int hasPoint = 0; int userPoint = 0; void goToXY(int x, int y); int getRandom(int min, int max); Snake createSnake(const int length); void printSnake(); void clearSnake(); void increaseSnakeLength(); void printSnakeLength(); void createPoint(); int isPointOnSnakeBody(); void checkPointStatus(); void increaseUserPoint(); void printUserPoint(); void moveSnake(Direction dir); int isValidDir(const char key); void handleKey(const char key); int isGameFinished(); void printGameBoard(); void printGameOver(); void initGame(); void startGame(); int main() { initGame(); startGame(); getch(); return 0; } void goToXY(int x, int y) { HANDLE stdHandle = GetStdHandle(STD_OUTPUT_HANDLE); COORD coordinate; coordinate.X = x; coordinate.Y = y; SetConsoleCursorPosition(stdHandle, coordinate); } int getRandom(int min, int max) { srand(time(NULL) * rand()); return rand() % (min + 1 - max) + min; } void startGame() { char key; while (!isGameFinished()) { Sleep(MOVE_DELAY); if (kbhit()) key = getch(); handleKey(key); checkPointStatus(); printSnakeLength(); printUserPoint(); if (!hasPoint) createPoint(); } printGameOver(); free(snake.coordinates); } |
هیچ نظری ثبت نشده است