PDA

View Full Version : game programing قسمت دوم



golhay2
سه شنبه 18 آبان 1389, 20:00 عصر
بازی اول حرکت توپ


در اين جا با قسمتهاي ضروري برنامه شروع مي کنيم.ما مي خواهيم يک اپلت بنويسيم که در آن يه توپ از سمت چپ وارد مي شه و از سمت راست خارج ميشه ، معلومه که کار آسونیه اما با قسمتهای نسبتا مهمی که برای حرکت دادن اشیا وجود دارند آشنا می شیم

در شروع کار باز هم ساختار اصلی یک اپلت را یادآور می شوم اما دوچیز جدید به آن اضافه کردیم یک اینترفیس Runnable و متد run() برای حرکت شی که ساختار این اپلت چیزی شبیه به این است:



import java.applet.*;
import java.awt.*;
public class BallApplet extends Applet implements Runnable
{
public void init() { }
public void start() { }
public void stop() { }
public void destroy() { }
public void run () { }
public void paint (Graphics g) { }
}



برای حرکت یک شی احتیاج داریم که از کلاس Thread یک نمونه بسازیم که این شی در متد Start پیاده سازی می کنیم

Thread

یک Thread قسمتی از برنامه است که به ما امکان می دهد که قسمتهای مختلف برنامه ما به صورت موازی کار کنند یا Multithreading.

Thread ها توسط کلاس Thread پیاده سازی می شوند اینترفیس Runnable ومتد Run() که در گام قبلی به آن اشاره شد جز متدهای مهم کلاسThread هستند



Thread.start(): starts a thread
Thread.stop(): stops a thread
Thread.sleep(time in milliseconds): توقف به میلی ثانیه




شی Thread را مطابق نمونه پیاده سازی می کنیم




public void start ()
{
// define a new thread
Thread th = new Thread (this);
// start this thread
th.start ();
}

حالا Threadرا در متد Run() اجرا می کنیم وقتی متدها ی تعریف شده در قسمت Run() اجرا شوند Thread ما برای مدت کوتاهی متوقف می شود

public void run ()
{
// Thread با اولویت پائین
Thread.currentThread().setPriority(Thread.MIN_PRIO RITY);

// یعنی همیشه
while (true)
{
// repaint the applet
repaint();

try
{
// Stop thread for 20 milliseconds
Thread.sleep (20);

}
catch (InterruptedException ex)
{
// do nothing

}

// اولویت Threadحداکثر
Thread.currentThread().setPriority(Thread.MAX_PRIO RITY);

}
}

حالا برنامه ما دارای یک حلقه است که همه چیز در اون به مدت 20میلی ثانیه متوقف و دوباره برنامه اجرا می شود، خب حال مساله این است که چطور توپ را رسم و به حرکت در آوریم؟

خیلی آسونه توپ ما دارای یک مختصات x,y است اگه ما به مختصات x یکی یکی در هر واحد زمان اضافه کنیم توپ ما در عرض Applet شروع به حرکت می کنه زیرا در هر زمان توپ ما در یک مختصات جدید رسم می شه و Thread ما اجرا میشه

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

public void paint (Graphics g)
{
// set color
g.setColor (Color.red);

// paint a filled colored circle
g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);

}
مقدار دهی اولیه
int x_pos = 10;
int y_pos = 100;
int radius = 20;

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

public void run ()
{
...
while (true)
{
// مقدار ایکس اضافه می شه
x_pos ++;
...

}
}

سورس برنامه را هم ضمیمه می کنم