الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سوال عن كيفية استعمال ال Keylistenr

بدأه mr.beshoy في 7 ديسمبر 2008 · 31 رد · 2,413 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام يا شباب

طبعاً عارفينى ديماً بأجى و معايا اسئلتى الغلسة

و المملة لكن استحملونى معلش

المهم

فى لعبة bombar man

الى تكلمت عنها سابقاً

عملت الbord بشكل مبدئ كنت عملها قبل كده و كودها هنا فى المنتدى بس الكود ده بطريقة تانى

لتصميم الbord

المهم

انا المشكلة انى مش عارف كيف احرك الللاعب

انا قرات عن الkeylistener

بس مش عارف اطبقها كويس على اللعبة

و أدى اللينك الى قريته

http://java.sun.com/docs/books/tutorial/ui...eylistener.html

و ادى الكود بتاعى عشان تفهموا قصدى

________________________

الكلاس الأول

_________

import javax.swing.JFrame;

public class Mainprogram extends JFrame {

	private MainBord mainbord;

	public Mainprogram() {
		mainbord = new MainBord();
		getContentPane().add(mainbord);
	}

	public static void main(String[] args) {
		JFrame frame = new Mainprogram();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(800, 900);
	  //  frame.setResizable(false);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
}

الكلاس التانى

____________

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

class MainBord extends JPanel {

	private BufferedImage bord;
	public static  ImageIcon divider_icon,  bombar_icon;
	private Graphics g;
	private int x;
	private int y;
	private int dividerSize = 40;
	private BombarManListener bombarman;   //  الكلاس ده مش مستعمل (فاضى لسه ) و هو الى من خلاله عاوز احرك اللعب

	public MainBord() {

		drawimage();
		drawComponents();

	}

	private void drawComponents() {
		divider_icon = new ImageIcon(getClass().getResource("wall.gif"));
		bombar_icon = new ImageIcon(getClass().getResource("bombar.gif"));
		x = (bord.getWidth() - (divider_icon.getIconWidth() + dividerSize) * 8) / 2;
		y = (bord.getHeight() - (divider_icon.getIconHeight() + dividerSize) * 8) / 2;
		for (int i = 0; i < 8; ++i) {
			for (int j = 0; j < 8; ++j) {
				divider_icon.paintIcon(this, g, (divider_icon.getIconWidth() + dividerSize) * i + x, (divider_icon.getIconHeight() + dividerSize) * j + y);
				repaint();
			}
		}
		bombar_icon.paintIcon(this, g, x-bombar_icon.getIconWidth(), y-bombar_icon.getIconHeight());
	}

	private void drawimage() {
		bord = new BufferedImage(800, 900, BufferedImage.TYPE_INT_RGB);
		g = bord.getGraphics();
		g.setColor(Color.ORANGE);
		g.fillRect(0, 0, 1000, 1000);
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawImage(bord, 0, 0, this);
	}
}

الكلاس الثالث (الخاص بتحريك اللاعب).

_______________________________

import javax.swing.JPanel;

class BombarManListener extends JPanel {

	public BombarManListener(){

	}

}

الصور المستعملة

فى الكود

حملها من هنا

http://www.4shared.com/file/74881691/69a7f6db/picture.html

شكرا مقدما لتعبكم

بيشوى عاطف

سلام

انا مش عاوز لما حد يرد هنا

يكتب كود كامل لالالا

انا عاوز اعرف على الاقل طريقة تحريك اللاعب فقط على محور x

و أنا هشوف مع نفسى و ابلغكم النتيجة

شكرا

#2

سلام لكم جميعاً

شوفوا أنا توصلت لبعض التعديلات البسيطة

اولا ً : انى وضعت اللاعب على panel كى ما أتمكن تحريك الصورة

سوف ترون فى الكود

هنا سوف أعرض الكلاسات الى حدث بها تغير طفيف

الكلاس الثانى

	 import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

class MainBord extends JPanel {

	private BufferedImage bord;
	JLabel bomabr_label;
	public static  JPanel bombar_panel;
	public static  ImageIcon divider_icon,  bombar_icon;
	private Graphics g;
	private int x;
	private int y;
	private int dividerSize = 40;
	private BombarManListener bombarman;

	public MainBord() {

		drawimage();
		drawComponents();

	}



	private void drawComponents() {
		divider_icon = new ImageIcon(getClass().getResource("wall.gif"));
		bombar_icon = new ImageIcon(getClass().getResource("bombar.gif"));
		x = (bord.getWidth() - (divider_icon.getIconWidth() + dividerSize) * 8) / 2;
		y = (bord.getHeight() - (divider_icon.getIconHeight() + dividerSize) * 8) / 2;
		for (int i = 0; i < 8; ++i) {
			for (int j = 0; j < 8; ++j) {
				divider_icon.paintIcon(this, g, (divider_icon.getIconWidth() + dividerSize) * i + x, (divider_icon.getIconHeight() + dividerSize) * j + y);
				repaint();
			}
		}
		bombar_panel=new JPanel();
		bombar_icon.paintIcon(this, g, x-bombar_icon.getIconWidth(), y-bombar_icon.getIconHeight());
		bomabr_label=new JLabel(bombar_icon);
// هنا وضعت الصورة بداخل لابل ثم وضعتها على بانل		 bombar_panel.add(bomabr_label);
	}

	private void drawimage() {

		bord = new BufferedImage(800, 900, BufferedImage.TYPE_INT_RGB);
		g = bord.getGraphics();
		g.setColor(Color.ORANGE);
		g.fillRect(0, 0, 1000, 1000);

	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawImage(bord, 0, 0, this);
	}
}

الكلاس الثالث و هو مشكلتى

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;

class BombarManListener extends JPanel {

	public BombarManListener() {
		MykeyListener keyadpter = new MykeyListener();
		addKeyListener(keyadpter);
	}

	private class MykeyListener extends KeyAdapter {

		public void KeyPressed(KeyEvent e) {
			if(e.getKeyCode()==KeyEvent.VK_KP_LEFT){
				int x=MainBord.bombar_panel.getX();
				int y=MainBord.bombar_panel.getY();
				MainBord.bombar_panel.setLocation(x++,y);
				repaint();
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {

		}

	}
}

فى الkeyPressed كتبت ما يدل على تحريك البانل و لكنها لا تتحرك

أتمنى من الإخوة الأفاضل إرشادى للطريقة السليمة

و شكرا

بيشوى عاطف

#3

سلام

للدرجة دى عمال أسئل نفسى و أرد على نفسى لعلكم تقولنى انه قد تجنن .... حقاً أنى تجننت ولكن حصل خير

توصلت لحل المشكلة و أعرص لكم الكود ... و لكن ستلاحظون أن اللأعب يتحرك على الحواجز ... سوف أحاول تعديلها و لكن أحببت أن أوافيكم الأخبار أول بأول ...

الكود بعد التعديل:

الكلاس الأول:

import javax.swing.JFrame;

public class Mainprogram extends JFrame {

	private MainBord mainbord;

	public Mainprogram() {
		mainbord = new MainBord();
		addKeyListener(mainbord);
		getContentPane().add(mainbord);
	}

	public static void main(String[] args) {
		JFrame frame = new Mainprogram();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(800, 900);
		//frame.setResizable(false);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
}

الكلاس الثانى :

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MainBord extends JPanel implements KeyListener {

	private BufferedImage bord;
	JLabel bomabr_label;
	public static JPanel bombar_panel;
	public static ImageIcon divider_icon,  bombar_icon;
	private Graphics g;
	private int x;
	private int y;
	private int dividerSize = 40;

	public MainBord() {
		drawimage();
		drawComponents();
	}

	private void drawComponents() {
		divider_icon = new ImageIcon(getClass().getResource("wall.gif"));
		bombar_icon = new ImageIcon(getClass().getResource("bombar.gif"));
		x = (bord.getWidth() - (divider_icon.getIconWidth() + dividerSize) * 8) / 2;
		y = (bord.getHeight() - (divider_icon.getIconHeight() + dividerSize) * 8) / 2;
		for (int i = 0; i < 8; ++i) {
			for (int j = 0; j < 8; ++j) {
				divider_icon.paintIcon(this, g, (divider_icon.getIconWidth() + dividerSize) * i + x, (divider_icon.getIconHeight() + dividerSize) * j + y);
			}
		}

		bombar_panel = new JPanel();
		bomabr_label = new JLabel(bombar_icon);
		bombar_panel.add(bomabr_label);
	}

	private void drawimage() {

		bord = new BufferedImage(800, 900, BufferedImage.TYPE_INT_RGB);
		g = bord.getGraphics();
		g.setColor(Color.ORANGE);
		g.fillRect(0, 0, 1000, 1000);

	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawImage(bord, 0, 0, this);
		bombar_icon.paintIcon(this, g, x - bombar_icon.getIconWidth(), y - bombar_icon.getIconHeight());
	}

	public void keyTyped(KeyEvent e) {
	}

	@Override
	public void keyPressed(KeyEvent e) {
		switch (e.getKeyCode()) {
			case KeyEvent.VK_RIGHT:
				x += 5;
				break;
			case KeyEvent.VK_LEFT:
				x -= 5;
				break;
			case KeyEvent.VK_UP:
				y -= 5;
				break;
			case KeyEvent.VK_DOWN:
				y += 5;
				break;
		}
		repaint();
	}

	public void keyReleased(KeyEvent e) {
	}
}

الصور المستعملة فى الكود

http://www.4shared.com/file/75256216/5ab89576/icon.html

و أتمنى بجد الى عنده أفكار يحطها

و لعلكم تلاحظون أن اللاعب يخرج عن المسار المحدد ( أن هحاول أجعله لا يخرج خارج المسار ) بس بردو نفسى اشوف افكاركم

صحيح قبل ما انسى اللاعب بيتحرك بالاسم الاربعة :lol:

سلام

و منتظر آرائكم و أفكاركم

متحيبوش ظنى

بيشوى عاطف

#4

سلام يا شباب

منتظر تشريفك الموضوع بفارغ الصبر

المهم دخلت فى المشكلة الثانية و هى انى أريد أن اجعل اللاعب لا يتحرك على الحواجز

الجزئية الى كتبتها بخصوص هذه المهمة

  if(bombar_panel.getWidth()+dividerSize==divider_icon.getIconWidth()){
			bombar_panel.getWidth()+dividerSize=bombar_panel.getWidth();
		}

عاوز اقول فيها لو : اتساع البانل الى عليها اللاعب فى المكان الى هو واقف فيه + مساحة الجزئية التى تليه ( = 40 ) = اتساع صورة الحاجز

يبقى متتحركش و اثبت مكانك يا لاعب

كتبت كده ووضعت ال جملة ال if فى أخر جزء فى الميثود drawComponent () و لكن هناك error فى الشرط

ياريت حد يكلمنى

شكرا

#5

مشكتلك بيشوي أنك تكتب بالعامية المصرية

وليس الجميع قادر على فهم العامية المصرية

حاول أن تكتب بالعربية الفصحى لكي تجد مساعدة أكثر

طبعاً وبما أني على رأي عمر متربي في حواري مصر :)

فأنا أفهمها

على كل حال

ضع حدود للوحة التي تعمل عليها

بمعنى قسمها إلى مربعات صغيرة

المربع إما حاجز أو فراغ

بعد ذلك قم بعمل مصفوفة تحتوي على الحواجز والفراغات

بعد هذا كله ستكون الحسبة كالتالي

من أول اللوحة إلى المكان الذي أنت فيه هو عبارة عن المسافة التي تحركتها مسبقاً بالإضافة إلى قيمة المربع

كل مرة قبل أن تحرك الاعب احسب هذه المسافة رأسياً وعمودياً

ثم اقسم المسافة على طول المربع ستعطيك قيمة

اذهب إلى المصفوفة التي خزنت فيها القيم وابحث عنها

إن كانت حاجز فلا تتحرك وإن لم تكن حاجز فتحرك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6
اقتباس
مشكتلك بيشوي أنك تكتب بالعامية المصرية

وليس الجميع قادر على فهم العامية المصرية

حاول أن تكتب بالعربية الفصحى لكي تجد مساعدة أكثر

طبعاً وبما أني على رأي عمر متربي في حواري مصر regular_smile.gif

فأنا أفهمها

لأول وهلة أعرف منك أن كلامى غير واضح الملفظ سأهتم بهذا من الأن فصاعداً

و الحمد لله أنك فهمت لغتى المعقدة :lol:

شكراً لردك سأحول ترجمته لكود و سأوفيك بالأخبار

بس خليك معايا فى هذه المعركة و لا تتركتنى وحدى

شكرا

#7

المشكلة التى أواجهها

كيف أحدد فى المصفوفة ان هذا الرقم فى المصفوفة حاجز أم فراغ ؟؟؟

وضح شوية أخ علاء

للعلم

أنا فكرت أعمل هذه الجزئية هل مبدائياً صحيحة أم خاطئة

اقتباس
int[][] array = new int[8][16];

for (int a = 0; a < 8; ++a) {

for(int b=0;b<16;++B){

// وهنا أضع جملة المقارنى بين المكان و المصفوفة

}

}

الصراحة انا متحير

معلش انا وضعت الكود فى اقتباس جت غلط من

int[][] Array = new int[8][16];
for (int a = 0; a < 8; ++a) {
for(int b=0;b<16;++cool.gif{
// وهنا أضع جملة المقارنى بين المكان و المصفوفة
}
}
#8

لنقل المصفوفة boolean

إذا كان في الخلية true فهو حاجز

أما إذا كان في الخلية false فهو فراغ

طيب لنفترض التالي

اللوحة تبدأ من عند النقطة (startx,starty)

سنضعهما كثوابت في البرنامج

الآن نضع متغيرين (x,y)

هاذان المتغيران يدلان على مكان النقطة الحالي

وقيمتهما الإبتدائية بـ (startx,starty)

بعد هذا في الحدث الخاص بلوحة المفاتيح

كل ما حركنا الاعب سنزيد على قيمة هاذين المتغيرين على حسب ما حركنا

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

عاوز تقول ان فكرة ان أعمل مصفوفة من نوع int

int [][]array=new int[8][16]

خاطئة

انا اقصد بال 8 عدد الصفوف و ال 16 عدد الخانات الموجود فى الصف .....خانة بها حاجز و خانة لا يوجد بها حاجز

و أصلا الموضوع ملوش علاقة بال event الخاص بلوحة المفاتيح

#10

شوف معايا

انا قولت الصف فيه 16 خانة الخانة التى بها حاجز زوجية

فقولت أعمل كده

   for (int a = 0; a < 8; ++a) {
			for(int b=0;b<16;++b){
			   if(array[a]%2==0){
				   divider_icon.getIconWidth();
			   } 
			}
		}

قصدى فى الجملة التى بداخل ال if

لو خارج القسمة على 2 يساوى 0

إذن ده حاجز ... بس عاوز اقول أنه خلاص اللاعب لا يقترب منه

أعملها أزاى ؟؟

#11

ركز معي يا بيشوي

لا تستطيع أن تبرمج بهذا الأسلوب

لكن تستطيع أن تمنع هذا

بمنع الحركة أصلاً من الحدث

بعدين بالنسبة لموضوع المصفوفة

بالطبع غلط تكون من نوع int

لأن الزيادة لا معنى لها هنا

أنا أحتاج boolean لماذا أستخدم int

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12

يعنى اأضع الكود المتعلق بهذه الجزئية

فى الميثود KeyPressed

ده الى فهمته من كلامك ... صح ؟؟

أما موضوع ال boolean مش عارف اطبقها

للأسف

#13

بالطبع خاطئة

لماذا تحتاج مصفوفة من نوع int

إذا كنت فعلياً لا تحتاج إلا لتخزين هل الخانة فارغة أم تحتوي على حجر

عندما أقول لك أنك بحاجة إلى الحدث فكر في ذلك قبل أن تقول لي أن الموضوع لا علاقة له بذلك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#14

معلش واضح انى مش فاهم حاجة فى الجزئية دى

و تعبتك معايا كتير

لكن انا مس هكمل دلوقتى فى اللعبة دى لحين أجازة نصف العام

و شكرا جدا لتعبك اخ علاء

#15

فقط سأوضح لك موضوع boolean

الأمر بسيط سيبقى كل شيء كما هو عليه لكن ستصبح الجملة كالتالي

boolean [][]array=new boolean[8][16];

بدلاً من

int [][]array=new int[8][16];

معنى هذا أن عناصر المصفوفة أصبحت boolean بدلاً من int

تخيل أننا قسمنا اللوحة إلى مربعات

كل مربع له حالة من حالتين إما فارغ أو يحتوي على جدار

هذه المصفوفة تمثل اللوحة الخاصة باللعبة

وكل مربع يمثل عنصر من عناصر المصفوفة

أي متغير boolean يحتوي على إحدى قيمتين true أو false

فإذا كنا نريد أن يكون المربع فارغ سنضع في المصفوفة false

أما إذا أردنا أإن يحتوي المربع على حجر فسنضع في المصفوفة true

هل اتضحت الفكرة؟

تحياتي

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 12 ديسمبر 2008 في 01:16

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#16

رغم أنى نويت أن لا أفكر فى هذه اللعبة

و لكن فى تللك اللحظة ساورتنى رغبة أن أتكلم و أسأل رغم ضيقى

انت تقول:

اقتباس
فإذا كنا نريد أن يكون المربع فارغ سنضع في المصفوفة false

أما إذا أردنا أإن يحتوي المربع على حجر فسنضع في المصفوفة

و لكن كيف سنضع فى المصفوفة ؟؟

أعلم انه سوال عقيم

لكن معلش استحمل

شكرا

#17

لنعدل الجملة للدقة

فلنقل لنضع في عنصر من المصفوفة

array[0][0]=false;

هل اتضحت الفكرة؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#18

سلام

أنا دماغى تعبت

بص يا علاء

انا عارف ان مش ينفع نقسم bool على int

لكن أنا عاوز اقوله - كل صف انت عارف فيه 16 خانة الخانة التى بها حاجز زوجية - الخانة التى تقبل القسم على 2 ضع بها false

يعنى مش هينفع يقرب منها

اقتباس
booleasn [][]aray=new boolean [j];

for (int i = 0; i < 8; ++i) {

for (int j = 0; j < 16; ++j) {

if(array[j]%2==0){

array[j]==false;

}

}

ريحنى شوية و قولى على الطريقة

بجد هتفيدنى جدا ً

شكرا

#19
booleasn [][]aray=new boolean [8][16];
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 16; ++j) {
if(array[j]%2==0){
array[j]=false;
}
 else
array[j]=true;
}

جرب كذا وقولي هو ده المطلوب؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#20

سلام

أشكر تعبك يا علاء

انا جربت الطريقة دى

مينفعش تقسم booean على int

شوف بقى انا توصلت لايه :

اولا انا عرفت أخلي اللاعب لا يخرج خارج حدود المربعات

اما موضوع ميمرش على الحواجز توصلت توصل نسبى و ليس كلى

اولا الجزئية الى معلم عليها بالكومنت دى خاصى بأن لا أجعل الللاعي يمر على الحواجز

جرب الكود بدونها فى الاول

عشان تشوف التغير الى ضفته

شيل ال keypressed القديمة وحط دى

	@Override
	public void keyPressed(KeyEvent e) {
int[][] index = new int[9][17];
		switch (e.getKeyCode()) {
			case KeyEvent.VK_RIGHT:
				x += 5;
				while (x > (divider_icon.getIconWidth() + dividerSize) * 9.1) {
					x = (int) ((divider_icon.getIconWidth() + dividerSize) * 9.1);
				}
//				for (int i = 0; i < 8; ++i) {
//					for (int j = 0; i < 16; ++j) {
//						if (index[j] % 2 == 0) {
//							index[j] = divider_icon.getIconWidth() * index[j];
//							if (x== index[j]) {
//								x -= index[j];
//							}
//							if (x != index[j]) {
//								x += dividerSize;
//							}
//						}
//					}
//				}

					break;



		case KeyEvent.VK_LEFT:
				x -= 5;
				while (x < (bord.getWidth() - (divider_icon.getIconWidth() + dividerSize) * 8) / 2) {
					x = (bord.getWidth() - (divider_icon.getIconWidth() + dividerSize) * 8) / 2;

				}
				break;
			case KeyEvent.VK_UP:
				y -= 5;
				while (y < (bord.getHeight() - (divider_icon.getIconHeight() + dividerSize) * 8) / 2) {
					y = (bord.getHeight() - (divider_icon.getIconHeight() + dividerSize) * 8) / 2;
				}

				break;
			case KeyEvent.VK_DOWN:
				y += 5;
				while (y > (divider_icon.getIconHeight() + dividerSize) * 9.5) {
					y = (int) ((divider_icon.getIconHeight() + dividerSize) * 9.5);
				}

				break;
			case KeyEvent.VK_SPACE:
				int bomb_x = x - bombar_icon.getIconWidth();
				int bomb_y = y - bombar_icon.getIconHeight();
				bomb_icon.paintIcon(this, g, bomb_x, bomb_y);
				break;
		}
		repaint();
	}

بص بقى تفسسير الجزئية الى عليها كومنت :

بداخل ال for loob

بقوله - طبعا عارفين ان الحواجز واخدة ارقام زوجية - لو خارج قسمة المصفوفة على 2 = صفر يبقى إذن ضع فى هذه الخانة من المصفوفة صورة الحاجز

بعد كده انا كاتب

 if (x== index[j]) {
							  x -= index[j];
						   }

عاوز اقول لو اتجاه الحركة فى محور x صُدِف أنه امامه صورة -مخزنة قيمتها فى المصفوفة -

يبقى ارجع ورا بانك تنقص من اتجاه الحركة قيمة الحاجز بحيث تبقى فى الفراغ المسموح ليك

بعد كده بقول

	if (x != index[j]) {
							   x += dividerSize;
							}
					   }

اما لو اتجاه الكرة مكنش بيساوى او مش فى طريقه حاجز

يبقى زودج على اتجاه الحركة قيمة 40 يعنى عاوز اقوله امشى برحتك

هو لو فهمتنى صح و تأملت تفكيرى هتلاحظ انه منطقى لحد ما

بس محتاج تعديل رياضى بسيط

معلش استحمل كلامى الكتير و ادينى بتعلم منك و من الزملاء الأفاضل

بس جرب الكود فى الاول بدون الجزئية الى عليها كومنت بعدين شيل الكومنت و شوف مشاكله ( لاتنسى )

و شكرا

#21

أنا آسف

والتصحيح كالتالي

booleasn [][]aray=new boolean [8][16];
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 16; ++j) {
if(array[j]){
array[j]=false;
}
else
array[j]=true;
}

بالنسبة للكود الذي كتبته

ما معنى هذه الجملة أولاً

  while (x > (divider_icon.getIconWidth() + dividerSize) * 9.1) {

أريد كتابة بالعربي بمعنى ماذا تمثل كل جزئية هنا

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#22

حضرتك لو حذقت السطر ده هتلاقيه لما يوصل لاخر حجرة هيكمل حركة و مش هيتوقف

احذه ال whiile هذه و انظر ماذا سوف يحدث . أما معناها ( انك لو كان اتجاه الحركة فى محور x أكبر من اتساع الحواجز مضروبة فى قيمة ثابتة اكبر من عدد الحواجز .... إذن قيمة x هيكون أخرها هى القيمة الى كانت اكبر منها )

و بردو معطتنيش رايك فى الجزئية المسئولة عن التحريك فوق الحواجز

التى عليها comment

فى كود حضرتك فى اول if انت مش محدد على اى اساس هتدخل للمصفوفة قيمة false

أتمنى ترى كودى

رجاء

شكرا يا علاء على تعبك و ربنا يباركك

بيشوى عاطف

صحيح إضافة على الجزئية

( انك لو كان اتجاه الحركة فى محور x أكبر من اتساع الحواجز بالإضافة إلى 40 و هذه مساحة الخانة الفرغة مضروبة فى قيمة ثابتة اكبر من عدد الحواجز .... إذن قيمة x هيكون أخرها هى القيمة الى كانت اكبر منها )

الجملة التى تحتها خط هى الإضافة

#23

ما معنى اتساع الحواجز بالضبط

فصل لي المعادلة قيمة قيمة

حتى الثابت أخبرني عن سبب وجوده

بالنسبة لكيفية التعبئة

فهذه تتم على حسب رغبتك

إن كنت تريد هذا المكان في حاجز فضع القيمة بـ true

وإلا ضعها بـ false

بالطبع لن أقول رأيي في كودك حتى أفهم تفاصيله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#24

سلام ياباشا

أيش الأحوال

بص يعم

أدى المعادلة

x > (divider_icon.getIconWidth() + dividerSize) * 9.1

طبعا كل ما اللاعب بيتحرك خطوة فى اتجاه محور x بتزيد قيمة x

و لكى نضع حد لهذه الزيادة بمجرد الوصول لآخر حاجز

فعلنا الآتى :

نرى هل قيمة ال x أكبر من قيمة اتساع الحاجز الذى واقف عنده اللاعب فى الوقت الحالى مضافا الى ذلك قيمة أخر فراغ مر به و هو الفراغ السابق للحاجز الذى واقف عنده

و نضرب دائما فى ثابت اكبر من عدد الحواجز برقم حتى عندما يصل للحاجز الآخير يعرف أن هذه نهايته و لا يجب انا يتعدها

و لو حضرتك عملت run للكود هتلاقيه شغال معاك

أعمله run و شوف النتيجة

صدقنى الفكرة دى خطرت على بالى فجأة كده و انا قاعد فجربتها بعد تجريبات سابقة لها و كانت فاشلة .

انا عاوزك تشوف الى عليه كومنت ياريت

شكرا يا باشا على تعبك

#25

على فكرة بيشوي أظن أن لديك مشكلة في الفقرة التي تكلمنا عنها

لكني غير متأكد لعدم وجود الجافا على الجهاز الذي أعمل عليه حالياً

بالنسبة لموضوع الكود المعلق

ما الذي تريد عمله بالضبط لكي أستطيع أن أساعدك بشكل أكبر

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…