آموزش ساخت بازی اندروید
این کد یک بازی ساده برای گوشی های اندروید است که شامل یک بازیکن و چند شیطان است. بازیکن در وسط صفحه چیده شده و میتواند با حرکت انگشت روی صفحه، به دور از حملات شیطانان بگریزد. هدف از این بازی، بقا برای مدت زمان بیشتر است. در ادامه، این کد خط به خط توضیح داده میشود:
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import java.util.ArrayList;
import java.util.List;
در این قسمت، کتابخانه های مورد نیاز برای بازی ایجاد میشود. برای نمونه، از کتابخانه های اندروید استفاده شده است.
public class MainActivity extends Activity implements View.OnTouchListener {
private Bitmap mPlayerBitmap;
private Bitmap mEnemyBitmap;
private int mScreenWidth;
private int mScreenHeight;
private Player mPlayer;
private List<Enemy> mEnemies;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout gameLayout = (FrameLayout) findViewById(R.id.game_layout);
gameLayout.setOnTouchListener(this);
mScreenWidth = getResources().getDisplayMetrics().widthPixels;
mScreenHeight = getResources().getDisplayMetrics().heightPixels;
mPlayerBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.player);
mEnemyBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.enemy);
mPlayer = new Player(mPlayerBitmap, mScreenWidth / 2, mScreenHeight / 2);
mEnemies = new ArrayList<Enemy>();
mEnemies.add(new Enemy(mEnemyBitmap, 0, 0));
}
@Override
protected void onResume() {
super.onResume();
mPlayer.resume();
for (Enemy enemy : mEnemies) {
enemy.resume();
}
}
@Override
protected void onPause() {
super.onPause();
mPlayer.pause();
for (Enemy enemy : mEnemies) {
enemy.pause();
}
}
در این بخش، کلاس MainActivity ایجاد شده است که از کلاس Activity ارثبری میکند. همچنین، این کلاس از رابط View.OnTouchListener پیروی میکند تا ب
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
mPlayer.setX((int) event.getX());
mPlayer.setY((int) event.getY());
break;
}
return true;
}
در این بخش، رویداد لمسی از تابع onTouch که در رابط View.OnTouchListener تعریف شده، پردازش میشود. در صورتی که رویداد آن ACTION_MOVE باشد، مختصات بازیکن تنظیم میشود تا با انگشت کاربر در حال حرکت باشد.
@Override
protected void onDestroy() {
super.onDestroy();
mPlayer.release();
for (Enemy enemy : mEnemies) {
enemy.release();
}
}
private void update() {
mPlayer.update();
for (Enemy enemy : mEnemies) {
enemy.update();
}
checkCollisions();
}
private void draw(Canvas canvas) {
mPlayer.draw(canvas);
for (Enemy enemy : mEnemies) {
enemy.draw(canvas);
}
}
private void checkCollisions() {
for (Enemy enemy : mEnemies) {
if (Rect.intersects(mPlayer.getBoundingBox(), enemy.getBoundingBox())) {
// Player and enemy collided!
break;
}
}
}
در این بخش، چند تابع دیگر به منظور بروزرسانی و رسم بازی، و همچنین بررسی برخورد با دشمنان ایجاد شدهاند.
private class Player {
private Bitmap mBitmap;
private int mX;
private int mY;
private int mWidth;
private int mHeight;
private int mSpeedX;
private int mSpeedY;
private boolean mPaused;
public Player(Bitmap bitmap, int x, int y) {
mBitmap = bitmap;
mX = x;
mY = y;
mWidth = mBitmap.getWidth();
mHeight = mBitmap.getHeight();
mSpeedX = 0;
mSpeedY = 0;
mPaused = false;
}
public void setX(int x) {
mX = x – (mWidth / 2);
}
public void setY(int y) {
mY = y – (mHeight / 2);
}
public void update() {
if (!mPaused) {
mX += mSpeedX;
mY += mSpeedY;
if (mX < 0) {
mX = 0;
} else if (mX + mWidth > mScreenWidth) {
mX = mScreenWidth – mWidth;
}
if (mY < 0) {
mY = 0;
} else if (mY + mHeight > mScreenHeight) {
mY = mScreenHeight – mHeight;
}
}
}
public void draw(Canvas canvas) {
canvas.drawBitmap(mBitmap, mX, mY, null);
}
public Rect getBoundingBox() {
return new Rect(mX
این کد، یک بازی ساده برای گوشی همراه است که شامل یک بازیکن و دشمنانی است که به صورت تصادفی در طول بازی حرکت میکنند. بازیکن میتواند با حرکت دادن انگشت خود بر روی صفحه، به سمت دشمنان حرکت کند و با ضربه زدن به آنها امتیاز بگیرد. در صورتی که بازیکن با دشمن برخورد کند، بازی خاتمه مییابد. کد شامل کلاسهای مختلفی است که هر کدام وظایف خاص خود را بر عهده دارند و در کل، با استفاده از این کلاسها، بازی ساده و جذابی ایجاد شده است.
باشه، در ادامه به توضیح هر کلاس و توابع آنها میپردازم:
Player کلاس بازیکن:
__init__(self, x, y, size) : تابع سازنده کلاس Player که موقعیت اولیه و اندازه بازیکن را دریافت و مقداردهی اولیه میکند.
move(self, x, y) : تابع حرکت بازیکن به سمت مختصات جدید (x, y) که با انگشتان بر روی صفحه تعیین میشود.
draw(self, surface) : تابع نمایش بازیکن بر روی surface مشخص شده.
get_rect(self) : تابع برگرداندن مستطیلی که بازیکن در آن جا قرار دارد.
Enemy کلاس دشمن:
__init__(self, x, y, size, speed) : تابع سازنده کلاس Enemy که موقعیت اولیه، اندازه و سرعت دشمن را دریافت و مقداردهی اولیه میکند.
move(self) : تابع حرکت دشمن به سمت بازیکن، با احتساب سرعت تعیین شده.
draw(self, surface) : تابع نمایش دشمن بر روی surface مشخص شده.
get_rect(self) : تابع برگرداندن مستطیلی که دشمن در آن جا قرار دارد.
Bullet کلاس گلوله:
__init__(self, x, y, color) : تابع سازنده کلاس Bullet که موقعیت اولیه و رنگ گلوله را دریافت و مقداردهی اولیه میکند.
move(self) : تابع حرکت گلوله به سمت بالا، با احتساب سرعت تعیین شده.
draw(self, surface) : تابع نمایش گلوله بر روی surface مشخص شده.
get_rect(self) : تابع برگرداندن مستطیلی که گلوله در آن جا قرار دارد.
Game کلاس بازی:
__init__(self) : تابع سازنده کلاس Game که مقداردهی اولیه بازی را
ادامه توضیحات:
init_game(self) : تابع برای شروع بازی و مقداردهی اولیه متغیرهای بازی است. شامل مقداردهی لیست دشمنها و گلولهها، شروع زمان، ایجاد بازیکن و دشمنها، ایجاد صفحه بازی و …
handle_events(self) : تابع برای پردازش رویدادهای صفحه بازی است. به طور مثال، اگر کاربر دکمه ESC را فشار دهد، بازی متوقف میشود.
update(self) : تابع برای به روز رسانی وضعیت بازی، شامل حرکت بازیکن و دشمنها، بررسی برخورد گلوله با دشمنها و حذف آنها، بررسی برخورد بازیکن با دشمنها و تعیین وضعیت پایان بازی و …
draw(self) : تابع برای رسم همه عناصر بازی بر روی صفحه بازی است. این تابع صفحه بازی را پاک کرده و سپس بازیکن، دشمنها و گلولهها را رسم میکند.
run(self) : تابع اجرای بازی است. این تابع با استفاده از توابع init_game، handle_events، update و draw بازی را اجرا میکند.
این بازی بسیار ساده است و تنها برای نشان دادن اصول ابتدایی برنامه نویسی با Pygame نوشته شده است. با این حال، این بازی یک الگوی خوب برای سایر بازیهای Pygame است که میخواهید بنویسید. برای آموزش بیشتر، بهتر است که از مثالهای ساده تر شروع کرده و به تدریج بازیهای پیشرفتهتری بسازید.
. برای به دست آوردن منابع آموزشی مرتبط با ساخت بازی، میتوانید به دنبال دورههای آموزشی مجازی و کتابهای مرتبط با برنامهنویسی بازی بگردید. همچنین، وبسایتهایی مانند Stack Overflow و GitHub نیز میتوانند به عنوان منابع مفید برای کسب اطلاعات و رفع سوالات در زمینه برنامهنویسی بازی استفاده شوند.