فصل اول روز ششم : اضافه کردن دشمن

دانلود نسخه pdf : دانلود

دانلود کدهای امروز : دانلود

با نام خدا به روز ششم از سری آموزش های طراحی بازی اندروید خوش آمدید. در درس امروز، ما یک دشمن به بازیمان اضافه خواهیم کرد، چون به نظر رباتمان یه مقدار تنها می باشد.

دشمن ما به این شکل خواهد بود:

 

برای اضافه کردن این دشمن پرنده، ابتدا باید یک کلاس دشمن (Enemy) ایجاد کنیم تا به عنوان کلاس پدر برای تمامی انواع دشمنان که به عنوان زیر کلاس این کلاس می باشند عمل کند.

 

۱-۶-۱-            ایجاد کلاس دشمن

کلاس دشمن بسیار ساده خواهد بود. از آن جایی که این یک کلاس پدر خواهد بود، متغیرها و متدهای مشترک را در آن تعریف خواهیم کرد، که در نتیجه زیرکلاس های آن ،این ها را از آن ارث ببرند.

فرآیند به شکل زیر خواهد بود:

  • ایجاد کلاس دشمن
  • تعریف متغیرها
  • تعریف متدهای مشترک
  • و ایجاد کلاس های کمکی (Getters and Setters)

 

  • ایجاد کلاس دشمن
  • ابتدا روی بسته codeandroid راست کلیک کرده سپس گزینه New و بعد Class را انتخاب کنید.
  • اسم کلاس را Enemy انتخاب کنید.
  • OK را فشار دهید.
  • تعریف متغیر ها

همه دشمنانی که ما می خواهیم در بازی ایجاد کنیم احتمالا به متغیرهای زیر احتیاج خواهند داشت:

  • بیشینه سلامتی (بیشترین جان)
  • سلامتی فعلی
  • قدرت نابودگری
  • سرعت
  • مختصات عرضی
  • مختصات طولی

بعلاوه، وقتی پس زمینه حرکت میکند این دشمنان نیز باید با آن حرکت کرده و از صفحه خارج شوند. لذا ما یک متغیر برای ارجاع به متغیر bg1 در کلاس شروع ایجاد خواهیم کرد.

پایین خط تعریف کلاس متغیر های زیر را تعریف کنید:

private int maxHealth, currentHealth, power, speedX,
centerX,  enter;
private Background bg = ShoroClass.getBg1();
  • تعریف متدهای مشترک

درست مثل کلاس هایی که قبلا تعریف کردیم ما نیاز به یک متد داریم که دائما اجرا شده و عمل بروزرسانی را انجام دهد. به علاوه ما دو متد حمله و مردن را به ترتیب attack(); و die(); برای این کلاس تعریف خواهیم نمود.

کدهای زیر را پایین تعریف متغیر ها وارد نمایید:

public void update() {
		centerX += speedX;
		speedX = bg.getSpeedX();
	}

	public void die() {
	}

	public void attack() {
      }
  • ایجاد متدهای کمکی (Getters & Setters)

همان طور که قبلا اشاره شد این متدها را اکلیپس به طور خودکار برایمان ایجاد می کند. برای این کار به انتهای کلاس رفته و کار های زیر انجام دهید:

  • قبل از پرانتز آخر راست کلیک کرده سپس گزینه Source و بعد Generate Getters and Setters را انتخاب کنید.
  • سپس تیک تمام متغیر ها را زده و ok را بزنید.
  • اکلیپس خودکار کدهای زیر را اضافه خواهد کرد:
public int getMaxHealth() {
		return maxHealth;
	}

	public int getCurrentHealth() {
		return currentHealth;
	}

	public int getPower() {
		return power;
	}

	public int getSpeedX() {
		return speedX;
	}

	public int getCenterX() {
		return centerX;
	}

	public int getCenterY() {
		return  enter;
	}

	public Background getBg() {
		return bg;
	}

	public void setMaxHealth(int maxHealth) {
		this.maxHealth = maxHealth;
	}

	public void setCurrentHealth(int currentHealth) {
		this.currentHealth = currentHealth;
	}

	public void setPower(int power) {
		this.power = power;
	}

	public void setSpeedX(int speedX) {
		this.speedX = speedX;
	}

	public void setCenterX(int centerX) {
		this.centerX = centerX;
	}

	public void setCenterY(int  enter) {
		this.centerY =  enter;
	}

	public void setBg(Background bg) {
		this.bg = bg;
	}

خوب کلاس دشمن تا اینجا کامل شد.

۱-۶-۲-            ایجاد کلاس دشمن پرنده

همان طور که در عکس دشمن دیدید این شخصیت به صورت پرنده است به همین خاطر به آن دشمن پرنده می گوییم. خوب حالا بیایید این زیر کلاس را ایجاد کنیم.

ما این کلاس را با کمی تفاوت ایجاد خواهیم کرد. لذا روند زیر را اجرا کنید:

  • روی بسته codeandroid راست کلیک کرده >> New >> Class
  • اسم آن را Heliboy (پسر هلی کوپتری) انتخاب کنید
  • حالا دکمه Browse از قسمت Superclass را مطابق شکل زیر انتخاب کنید:
  • مطابق شکل زیر enemy را در قسمت بالا وارد کنید تا کلاس Enemy زیر آن ظاهر شود. آن را انتخاب کرده و Ok را انتخاب کنید
  • سپس مطابق شکل زیر تیک ایجاد سازنده از کلاس پدر را زده و پایان را انتخاب کنید.

در نهایت کلاس به شکل زیر ایجاد خواهد شد.

Package codeandroid;

public class Heliboy extends Enemy {

	public Heliboy() {
		// TODO Auto-generated constructor stub
	}

}

با انجام مراحل ۴ و ۵ : این کلاس به عنوان زیر کلاس Enemy انتخاب شده و یک سازنده به آن اضافه کردیم.

حالا در قسمت سازنده خط //Todo … را با خطوط زیر جایگزین کنید:

setCenterX(centerX);
setCenterY(centerY);

این دو متد از کلاس پدر فراخوانی شده اند همان طور که می دانید هنگامی که یک کلاس به عنوان زیر کلاس از کلاس دیگر تعریف می شود تمام متغیرها و متدهای کلاس پدر را که private نیستند را به ارث خواهد برد. هم اکنون کلاس دارای خطا خواهد بود زیرا متغیر های centerX و enter تعریف نشده اند. این دو متغیر را به عنوان ورودی سازنده کلاس در نظر میگیریم به شکل زیر:

public Heliboy(int centerX, int centerY) {
		setCenterX(centerX);
		setCenterY(centerY);
	}

خوب کلاس دشمن پرنده هم تا اینجا کامل شد.

 

۱-۶-۳-            نمایش دشمنان

برای نمایش دشمنان در بازی نیاز است تا مراحل زیر را انجام دهیم.

  • ایجاد یک شیء از کلاس تصویر (Image) برای ذخیره تصویر دشمن.
  • تعریف متغیرهای hb
  • فراخوانی متد update() برای این اشیاء
  • رسم اشیاء hb با شیء تصویر تعریف شده در قسمت ۱

 

  • ایجاد شیء تصویر برای نمایش دشمن

ابتدا تصویر دشمن را که در پوشه این مقاله که با نام heliboy مشخص شده در پوشه data قرار دهید.

سپس در کلاس شروع در قسمت تعریف تصاویر، تصویر جدیدی به نام heliboy تعریف کنید.

private Image image, character, background, currentSprite, characterDown, characterJumped, heliboy;

بعد از آن در متد init(); این تصویر را مقدار دهی کنید.

heliboy = getImage(base, "data/heliboy.png");
  • تعریف متغیر هایی از کلاس دشمن

ما در این جا دو شیء از این کلاس تعریف می کنیم.

  • در کلاس شروع پایین خطی که ربات را تعریف کنید دو دشمن به صورت زیر تعریف کنید
private Heliboy hb, hb2;
  • در متد start(); کدهای جدید زیر را وارد نمایید
robot = new Robot();
hb = new Heliboy(340, 360);
hb2 = new Heliboy(700, 360);

این کد ها دو شیء از کلاس دشمن که در مختصات های ورودی آن ها قرار دارند ایجاد می کند.

  • فراخوانی متد بروز رسانی

به محل قرار گیری متد run() رفته و اضافه کنید:

hb.update();
hb2.update();

که در نتیجه برای این متد داریم :

@Override
	public void run() {
		while (true) {
			robot.update();
			if (robot.isJumped()) {
				currentSprite = characterJumped;
			} else if (robot.isJumped() == false && robot.isDucked() == false) {
				currentSprite = character;
			}
			hb.update();
			hb2.update();
			bg1.update();
			bg2.update();
			repaint();// این خط متد پینت را فراخوانی میکند

			try {
				Thread.sleep(17);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	

این رو مد نظر قرار دهید که شما برای کلاس Heliboy هیچگاه متد update() تعریف نکرده اید، اما این کلاس این متد را از کلاس پدر (Enemy) به ارث برده است.

  • رسم دشمنان در بازی

در نهایت، ما باید دو شیء جدیدمان را در صفحه، نمایش دهیم.

به متد paint() رفته و کدهای زیر را به انتهای آن اضافه کنید:

arg0.drawImage(heliboy, hb.getCenterX() - 48,
hb.getCenterY() - 48, this);
arg0.drawImage(heliboy, hb2.getCenterX() - 48,
hb2.getCenterY() - 48, this);

از آن جایی که اندازه تصویر دشمن ۹۶ در ۹۶ پیکسل می باشد لذا محل رسم آن ۴۸ پیکسل کمتر از مختصات مرکزشان  می باشد.

در نهایت با اجرای بازی در این مرحله تصویر زیر را مشاهده خواهید کرد.

به امید خدا این جا پایان روز ششم می باشد.

دانلود تصاویر بازی : دانلود

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *