
با آموزش حضوری و آنلاین مقدماتی تا پیشرفته پایتون , محبوبترین زبان برنامهنویسی دنیا در محیطی عملی کاربردی و پروژه محور وارد دنیای برنامه نویسی شوید
مشاهده بیشتر
اگه پایتون بلدی و میخوای وارد دنیای هوش مصنوعی بشی، این دوره مخصوص توئه! با آموزش پروژهمحور و همراهی اساتید حرفهای، یاد بگیر چطور از هوش مصنوعی تو زمینههایی مثل پزشکی، بورس و املاک استفاده کنی.
مشاهده بیشتر
اگه یادگیری ماشین بلدی و آمادهای وارد چالشهای حرفهای بشی، دوره یادگیری عمیق پروژهمحور برای توئه! طراحی شبکههای عصبی و کار روی پروژههای واقعی مثل تشخیص تصویر و پردازش زبان رو اینجا یاد میگیری.
مشاهده بیشتر
با این دوره، Django رو از پایه شروع کن و به یک حرفهای تبدیل شو! یاد بگیر چطور با معماری MVT، پایگاه داده و RESTful API کار کنی، پروژههای واقعی بسازی و آنها رو روی وب سرور مستقر کنی!
مشاهده بیشترمشخصات پروژه
-
2172
-
0.0
-
16517
-
0
-
0
ساخت بازی فروت نینجا با پایتون

در این پروژه با استفاده از زبان برنامه نویسی پایتون و کتابخانه ی pygame اقدام به ساخت بازی محبوب Fruit Ninja می کنیم
بازی فروت نینجا Fruit Ninja ، همچنین به عنوان بازی برش میوه شناخته می شود.
هدف از این پروژه ساخت یک فروت نینجا با پایتون است. این بازی با کمک ماژول pygame و مفهوم اولیه پایتون ساخته شده است.
در این بازی کاربر باید با لمس موس روی میوه ها ، میوه ها را برش دهد. بمب هایی با میوه ها نیز وجود دارد. اگر ماوس بیش از سه بمب را لمس کند، بازی تمام خواهد شد.
پیش نیازهای پروژه بازی Fruit Ninja با زبان برنامه نویسی پایتون:
لطفا pygame و random را نصب کنید:
pip install pygame Pip install random
ساختار پروژه
این مراحل برای ساخت بازی میوه نینجا است:
- وارد کردن ماژول های مورد نیاز
- راه اندازی پنجره window
- توابع را تعریف کنید
- حلقه loop بازی
بیایید شروع به ساخت بازی Fruit Ninja در پایتون کنیم
- وارد کردن ماژول های مورد نیاز
import pygame, sys import os import random
این پروژه را با وارد کردن کتابخانه ها شروع کنید.
- ایجاد پنجره نمایش
player_lives = 3 score = 0 fruits = ['melon', 'orange', 'pomegranate', 'guava', 'bomb'] WIDTH = 800 HEIGHT = 500 FPS = 12 pygame.init() pygame.display.set_caption(‘FRUIT NINJA--DataFlair’) gameDisplay = pygame.display.set_mode((WIDTH, HEIGHT)) clock = pygame.time.Clock() WHITE = (255,255,255) BLACK = (0,0,0) RED = (255,0,0) GREEN = (0,255,0) BLUE = (0,0,255) gameDisplay.fill((BLACK)) background = pygame.image.load('back.jpg') font = pygame.font.Font(os.path.join(os.getcwd(), 'comic.ttf'), 32) score_text = font.render('Score : ' + str(score), True, (255, 255, 255)) lives_icon = pygame.image.load('images/white_lives.png')
- player_livesزندگی های باقی مانده را پیگیری خواهد کرد.
- scoreامتیاز را پیگیری می کند
- fruits موجودات موجود در بازی هستند
- pygame.init()pygame را مقداردهی اولیه کنید
- pygame.display.set_captionعنوان پنجره بازی را تنظیم می کند
- FPS تعداد دفعاتی که نمایشگر بازی باید بهروزرسانی شود را کنترل میکند. در مورد ما، هر 1/12 ثانیه به روز می شود
- WIDTH and HEIGHTاندازه نمایش بازی را با استفاده از pygame.display.set_mode تنظیم می کنند
- پس زمینه بازی توسطpygame.image.load تنظیم شده است که برای تنظیم تصویر استفاده می شود
- Lives-iconتصاویری را ذخیره می کند که زندگی های باقی مانده را نشان می دهد
- ساختار کلی فرهنگ لغت بازی فروت نینجا
def generate_random_fruits(fruit): fruit_path = "images/" + fruit + ".png" data[fruit] = { 'img': pygame.image.load(fruit_path), 'x' : random.randint(100,500), 'y' : 800, 'speed_x': random.randint(-10,10), 'speed_y': random.randint(-80, -60), 'throw': False, 't': 0, 'hit': False, } if random.random() >= 0.75: data[fruit]['throw'] = True else: data[fruit]['throw'] = False data = {} for fruit in fruits: generate_random_fruits(fruit)
- این تابع میوه های تصادفی و ساختار عمومی شده را تولید می کند
- «x» و «y» مقداری را که میوه باید روی مختصات x و مختصات y قرار گیرد را ذخیره میکند.
- Speed_x و speed_y کلیدهایی هستند که مقدار سرعت حرکت میوه در جهت x و y را ذخیره می کنند. همچنین حرکت مورب میوه ها را کنترل می کند
- throws key برای تعیین اینکه مختصات تولید شده از میوه ها خارج از گیم پلی است یا خیر استفاده می شود. اگر بیرون باشد، دور ریخته خواهد شد.
- عدد ممیز شناور تصادفی بعدی را در بازه [0.0، 1.0) برمیگرداند تا میوه ها در داخل نمایشگر بازی حفظ شوند.
- متد رسم فونت ها
font_name = pygame.font.match_font('comic.ttf') def draw_text(display, text, size, x, y): font = pygame.font.Font(font_name, size) text_surface = font.render(text, True, WHITE) text_rect = text_surface.get_rect() text_rect.midtop = (x, y) gameDisplay.blit(text_surface, text_rect)
- Draw_textsتابع به رسم متن بر روی صفحه کمک می کند.
- get_rect()آبجکت React را برمیگرداند.
- player_livesX و y ابعاد جهت x و جهت y می باشد
- blit()تصویر را ترسیم می کند یا متن را در یک موقعیت مشخص روی صفحه می نویسد
- جان بازیکنان را رسم کنید.
def draw_lives(display, x, y, lives, image) : for i in range(lives) : img = pygame.image.load(image) img_rect = img.get_rect() img_rect.x = int(x + 35 * i) img_rect.y = y display.blit(img, img_rect) def hide_cross_lives(x, y): gameDisplay.blit(pygame.image.load("images/red_lives.png"), (x, y))
- img_rect مختصات (x,y) آیکونهای crossرا دریافت می کند (در سمت راست بالای صفحه زندگی می کند)
- img_rect .x نماد cross بعدی را 35 پیکسل نسبت به نماد قبلی تنظیم می کند
- img_rect.y دقت می کند که نماد Cross باید چند پیکسل از بالای صفحه قرار گیرد.
- نمایش Game over و نمایش فرانت
def show_gameover_screen(): gameDisplay.blit(background, (0,0)) draw_text(gameDisplay, "FRUIT NINJA!", 64, WIDTH / 2, HEIGHT / 4) if not game_over : draw_text(gameDisplay,"Score : " + str(score), 40, WIDTH / 2, 250) draw_text(gameDisplay, "Press a key to begin!", 24, WIDTH / 2, HEIGHT * 3 / 4) pygame.display.flip() waiting = True while waiting: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() if event.type == pygame.KEYUP: waiting = False
- show_gameover_screen()تابع صفحه اولیه بازی و صفحه Game over را نشان می دهد
- pygame.display.flip()تنها بخشی از صفحه نمایش را به روز می کند، اما اگر هیچ Args عبور نکند، کل صفحه را به روز می کند
- pygame.event.get()تمامی event های ذخیره شده در صف رویداد pygame را بر می گرداند.
- اگر نوع event برابر با خروج باشد، pygame خارج خواهد شد
- event.KEYUPرویدادی که با فشردن و رها کردن کلید رخ می دهد
- Game Loop
first_round = True game_over = True game_running = True while game_running : if game_over : if first_round : show_gameover_screen() first_round = False game_over = False player_lives = 3 draw_lives(gameDisplay, 690, 5, player_lives, 'images/red_lives.png') score = 0 for event in pygame.event.get(): if event.type == pygame.QUIT: game_running = False gameDisplay.blit(background, (0, 0)) gameDisplay.blit(score_text, (0, 0)) draw_lives(gameDisplay, 690, 5, player_lives, 'images/red_lives.png') for key, value in data.items(): if value['throw']: value['x'] += value['speed_x'] value['y'] += value['speed_y'] value['speed_y'] += (1 * value['t']) value['t'] += 1 if value['y'] <= 800: gameDisplay.blit(value['img'], (value['x'], value['y'])) else: generate_random_fruits(key) current_position = pygame.mouse.get_pos() if not value['hit'] and current_position[0] > value['x'] and current_position[0] < value['x']+60 \ and current_position[1] > value['y'] and current_position[1] < value['y']+60: if key == 'bomb': player_lives -= 1 if player_lives == 0: hide_cross_lives(690, 15) elif player_lives == 1 : hide_cross_lives(725, 15) elif player_lives == 2 : hide_cross_lives(760, 15) if player_lives < 0 : show_gameover_screen() game_over = True half_fruit_path = "images/explosion.png" else: half_fruit_path = "images/" + "half_" + key + ".png" value['img'] = pygame.image.load(half_fruit_path) value['speed_x'] += 10 if key != 'bomb' : score += 1 score_text = font.render('Score : ' + str(score), True, (255, 255, 255)) value['hit'] = True else: generate_random_fruits(key) pygame.display.update() clock.tick(FPS) pygame.quit()
- این حلقه اصلی بازی است
- game_over در صورتی که بیش از 3-Bomb قطع شده باشد، بازی را به حالت حلقه خاتمه خواهد داد
- game_running برای مدیریت حلقه بازی استفاده می شود
- اگر از event type خارج شود بازیبسته خواهد شد.
- در این game loop ما میوه های داخل صفحه را به صورت داینامیک نمایش می دهیم
- اگر میوه ای قطع نشود هیچ اتفاقی برای آن نمی افتد. اگر میوه بریده شود، یک تصویر میوه نیمه بریده باید به جای آن میوه ظاهر شود
- اگر کاربر برای سه بار روی بمب ها کلیک کند، یک پیام GAME OVER باید نمایش داده شود و پنجره باید reset شود.
- ()clock.tick حلقه را با سرعت مناسب نگه می دارد (فریم/ثانیه را مدیریت می کند). حلقه باید بعد از هر 1/12 ثانیه به روز شود
خروجی پروژه Fruit Ninja
پروژه مرتبط :