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

عودة مرة اخرة إلى لعبة Bomberman

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

سلام للجميع

سابقاً فى الترم الأول لهذا العام كنت احاول برمجة لعبة Bomber man

و فعلاً بدات فى التنفيذ و لكن ضغوط ما منعتنى من التكملة

و لكنى انوى انا اكمل ما فكرت فيه و لكنى سابدأ من لاصفر فى الكود حيث ام ابرمج اشياء كثيرة فى هذه اللعبة سابقاً لذا فأسبدا من البداية

فكرة اللعبة لم لا يعرفها :-

هى ان هناك لاعب صغير الحجم يقف فى كورنر الشاشة و اماه حواجز بعض منها قابل للتفجير و البعض الآخر لا

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

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

http://www.acid-play.com/download/bomberman/

اعرض فى الأول المشكة بتعتى ثم الأكواد الى كتبتها :-شوفوا يا شباب

اول مشكلة موجهانى

ال panel الى عليها ( new game - option - help - exit )

مش عارف ازاى اجعلها فى منتصف ال frame الرئيسية

تانى مشكلة

لما با جى اضغط على new game مش بيعرضى البانل الى عليها الحواجز ( انا عملت فى الأول حاجز واحد بس انا مردتش اجيب صورة جاهزة للحاجز فحبيت اصممه بنفسى ) ممكن تاخد الكلاس الخاص بالحاجز بس و تشوفوا الناتج بتاعه

دى المشاكل جملتها

الكود

الكلاس الأول

import java.awt.BorderLayout;
import javax.swing.JFrame;

public class MainFrame extends JFrame {

private GameOpetions game;

public MainFrame() {
game = new GameOpetions();
getContentPane().add(game, BorderLayout.CENTER);
}

public static void main(String[] args) {
JFrame frame = new MainFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setSize(600, 300);
}
}

الكلاس التانى الخاص بالبانل الى عليها

( new game - options - help - exit )

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

class GameOpetions extends JPanel {

private JPanel buttons_panel;
private JButton[] buttons;
private String[] butttons_name = {"New", "Options", "help", "Exit"};
private Divider divider;

public GameOpetions() {
buttons_panel = new JPanel();
buttons_panel.setLayout(new GridLayout(4, 1));
buttons_panel.setBorder(BorderFactory.createLineBorder(Color.BLUE, 5));
buttons_panel.setPreferredSize(new Dimension(300, 250));
buttons = new JButton[butttons_name.length];
for (int i = 0; i < butttons_name.length; ++i) {
buttons = new JButton(butttons_name);
buttons_panel.add(buttons);
add(buttons_panel);
}
buttons[0].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, new Divider());
}
});
}
}

الكلاس الثالث المتعلق برسم العائق

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.Line2D;
import javax.swing.JPanel;
public class Divider extends JPanel {

private int x_hardWall = 100, y_hardwall = 60;

public Divider() {
}

@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D graph = (Graphics2D) g;


Stroke line_stroke = new BasicStroke(2);
graph.setStroke(line_stroke);
graph.setPaint(Color.GREEN);
g.fillRect(x_hardWall, y_hardwall, x_hardWall - 50, y_hardwall);

graph.setPaint(Color.BLACK);
for (int i = 1; i <= 3; i++) {
Line2D line = new Line2D.Double(x_hardWall, y_hardwall + 20 * i,
x_hardWall + 50, y_hardwall + 20 * i);
graph.draw(line);

}
for (int i = 1; i <= 2; ++i) {
Line2D line1 = new Line2D.Double(x_hardWall + 15 * i, y_hardwall,
x_hardWall + 15 * i, y_hardwall + 20);
graph.draw(line1);
}
Line2D line2 = new Line2D.Double(x_hardWall + 24, y_hardwall + 20,
x_hardWall + 24, y_hardwall + 40);
graph.draw(line2);
for (int i = 1; i <= 2; ++i) {
Line2D line1 = new Line2D.Double(x_hardWall + 15 * i, y_hardwall + 40,
x_hardWall + 15 * i, y_hardwall + 60);
graph.draw(line1);
}
}
}

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 10 مارس 2009 في 09:36

#2

السلام عليكــم ورحمـة الله وبركاتــه ،،

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


import javax.swing.*;

public class MainFrame extends JFrame {

private GameOpetions game;

public MainFrame() {
game = new GameOpetions();
Box box = Box.createVerticalBox();
box.add(Box.createVerticalGlue());
box.add(game);
box.add(Box.createVerticalGlue());
getContentPane().add(box, BorderLayout.CENTER);
}

public static void main(String[] args) {
Dimension dimScreen = Toolkit.getDefaultToolkit().getScreenSize();
int w = 600, h = 300;
int x = ((int)dimScreen.getWidth() - w) / 2;
int y = ((int)dimScreen.getHeight() - h) / 2;
JFrame frame = new MainFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setBounds(x, y, w, h);
}
}
   import java.awt.*;

بالنسبة للمشكل الثاني، فأنت تستعمل JOptionPane.showMessageDialog لعرض الDivider وهذا خطأ لأن هذه الميثود تقبل فقط الString ( على حد علمي )

ممكن مثلا تكتب كلاس ترث من JDialog وتضيف الDivider إليها

وتغير الكود الخاص بالضغط على الزر


import java.awt.*;

public class DlgDivider extends JDialog
{
int x, y, w, h;
public DlgDivider()
{
w = 400;
h = 400;
x = ((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()-w)/2;
y = ((int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()-h)/2;
add(new Divider());
setBounds(x, y, w, h);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
}
   import javax.swing.*;

الكود الخاص بالضغط على الزر


public void actionPerformed(ActionEvent e) {
new DlgDivider();
}
});
		   buttons[0].addActionListener(new ActionListener() {

#3

بكل صراحة كده انا استفدت منك جدا

شكرا لتعبك

و جربت الشغل بتاعك و فهمته

و جارى تكملة الباقى

و هدوشكم لا تقلقوا :lol:

#4

سلام يا شباب الكود السابق كنا بنرسم شكل الحاجز بايدينا ( يعنى من خلال كتابة كود )

انا هنا قولت اعمل Loading لصورة جاهزة فى الكود و اصبح الكود كالأتى و لكن بيعطينى error mullpointerexception

على العلم انى حاجز مكان لكل متغير

القوا نظرة على الكود و قولولى ياريت الطريقة الصح

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

/**
 *
 * @author beshoy
 */
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.Box;
import javax.swing.JFrame;

public class MainFrame extends JFrame {
	private GameOptions game;
	public MainFrame() {
		game = new GameOptions();
		Box box = Box.createVerticalBox();
		box.add(Box.createVerticalGlue());
		box.add(game);
		box.add(Box.createVerticalGlue());
		getContentPane().add(box, BorderLayout.CENTER);
	}

	public static void main(String[] args) {
		Dimension dimScreen = Toolkit.getDefaultToolkit().getScreenSize();
		int w = 600, h = 300;
		int x = (int) (dimScreen.getWidth() - w) / 2;
		int y = (int) (dimScreen.getHeight() - h) / 2;
		MainFrame frame = new MainFrame();
		frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		frame.setVisible(true);
		frame.setBounds(x, y, h, h);

	}
}

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

/**
 *
 * @author beshoy
 */
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;

class GameOptions extends JPanel {

	private JPanel buttons_panel;
	public static JButton[] buttons;
	private String[] butttons_name = {"New", "Options", "help", "Exit"};
	public static GameModels models;
	private Hard_wall wall;

	public GameOptions() {
		buttons_panel = new JPanel();
		buttons_panel.setLayout(new GridLayout(4, 1));
		buttons_panel.setBorder(BorderFactory.createLineBorder(Color.BLUE, 5));
		buttons_panel.setPreferredSize(new Dimension(300, 250));
		buttons = new JButton[butttons_name.length];
		for (int i = 0; i < butttons_name.length; ++i) {
			buttons = new JButton(butttons_name);
			buttons_panel.add(buttons);
			add(buttons_panel);
		}

	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		makeComponent(g);
	}

	public GameModels getModels() {
		return models;
	}

	public static void setModels(GameModels models) {
		GameOptions.models = models;
	}


  private void makeComponent(Graphics g) {
		switch (models) {
			case Hard_wall:
				for (int i = 1; i <= 8; ++i) {
					for (int j = 1; j <= 8; ++j) {
						g.drawImage(Hard_wall.icon.getImage(), (Hard_wall.x + 10) * i,
								(Hard_wall.y + 30) * j, this);
					}
				}
				break;
		}
	}
}

الثالث( enum):-

/**
 *
 * @author beshoy
 */
public enum GameModels {
	Hard_wall,explode_wall,bomb,player;
}

الرابع :-

/**
 *
 * @author beshoy
 */
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

class Hard_wall extends JPanel {

	public static  ImageIcon icon;
	public static  int x = 100,  y = 50;

	public Hard_wall() {
		icon = new ImageIcon(getClass().getResource("divider.gif"));
		GameOptions.buttons[0].addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				GameOptions.setModels(GameModels.Hard_wall);
			}
		});
	}


}

ياريت لو برمجتى لهذه الجزئية غلط ( ياريت تقولولى الصح )

شكرا

لينك الصورى الى مستعملها :-

http://www.4shared.com/file/93373693/151a14d2/divider.html

#5

السلام عليكــم ورحمـة الله وبركاتــه ،،

ما هو السطر الذي يعطيك nullpointerexception

تعديل

----------------


super.paintComponent(g);
makeComponent(g);
}
public void paintComponent(Graphics g) {

عند رسم الpanel، تقوم بالمناداة على على الميثود makeComponent التي تقوم باختبار قيمة models، لكن هذه المتحولة لا تحتوي على أي قيمة، وبالتالي فإنها تساوي null، عند ظهور الpanel

لذلك أظن أنه يجب اختبار قيمة models في makeComponent


if (models != null)
{
switch (models) {
case Hard_wall:
for (int i = 1; i <= 8; ++i) {
for (int j = 1; j <= 8; ++j) {
g.drawImage(Hard_wall.icon.getImage(), (Hard_wall.x + 10) * i,
(Hard_wall.y + 30) * j, this);
}
}
break;
}
}
}
private void makeComponent(Graphics g) {

تم تعديل هذه المشاركة بواسطة herch في 17 مارس 2009 في 10:53

#6

سلام للجميع

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

اولا لما كان بيعطينى exception من نوع nullpointerexception

كان فى السطر ده

switch (models)

in class gameoptions

و لما وضعنا السطر ده

الى انت ضفته

if(models!=null)

بقى مفيش nullpointerexception

و لكن حينما نضغط على new button

مش بيظهرلى خالص الفريم الى عليها الحواجز

ايه السبب

منتظر ردك

و شكرا

جدا

بيشوى

#7

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

وسأطلع عليها

تحياتي

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

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

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

728x90.png

#8

سلام للجميع

سلام يا أخ علاء أيش اخبارك نورت الموضوع يا باشا

ده اللينك ياعم فيه الكود و الصورة المستعملة على فكرة انا غيرت تانى فى الكود هتلاقيه غير السابق و بردو المشكلة قائمة ياريت تساعدنى فيها لأجل ما نستفيد منها

http://www.4shared.com/file/93613138/a2e55...bpmber_man.html

شكرا

#9

لو أمكن أن تضع النسخة الأخيرة من البرنامج

لأن هذه النسخة تعاني من المشاكل التي حلت في أول الموضوع

تحياتي

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

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

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

728x90.png

#10

يا صديقى هذا الكود هو هو عينه الذى بيه المعاناة الكبرى

و إن كنت تظن ان if (models !=null)

حلت المشكلة كلا لم تحلها

انت اعمله run

هتلاقيه مش بيعرض الكارد المختص بظهور ال بانل الى عليها حواجز

ساعدنى ليا يومين مخنوق منه

شكرا وربنا معاك

#11

أخبرني ما المشاكل التي حلت؟

أنا اعتقدت أن موضوع البنل حل فهل أنا مخطئ؟؟

تحياتي

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

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

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

728x90.png

#12

المشكلة التى لم تُحل هى أنكط عندما

تضغط على ال button الى اسمه new game

لم يعرض الكارد ال عليها الحواجز

هى دى المشكلة

#13

لكي تجعل أي زر يقوم بعمل شيء معين

يجب أن تضيف عليه ActionListener

أنت لم تضف أي حدث على الأزرار لهذا لن تفتح معك

تحياتي

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

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

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

728x90.png

#14

سلام للجميع

أخباركم ايه يا إخوة النهاردة ؟؟؟ ( أتمنى تكونوا بخير و الى مكشر و زعلان من برنامج و لا كود مضايقه أقوله يا سيدى أو يا ستى هونوا على نفسكم كده و خليكم فريش و متبقوش زى حالاتى لما بتنرفذ :lol: :lol:

الحياة مش مستاهلة ترفع ضغطك عشان حتة كود هيروح لحاله بعد كده )

انسوا كل الأكواد الى فاتت و تم كتابتها بخصوص bomberman ( الله يجازيه ناوى يشيب شعرى على بدرى ربنا يسامحه :lol: )

و ادى الكود الجديد الشغال

import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;

public class MainFrame extends JFrame implements ActionListener {

	private GameOptions game;
	private DrawingHardwall wall;
	private CardLayout cards;

	public MainFrame() {
		cards = new CardLayout();
		game = new GameOptions(this);
		wall = new DrawingHardwall();
		wall.setModels(GameModels.Hard_wall);
		getContentPane().setLayout(cards);
		getContentPane().add(game, "buttons");
		getContentPane().add(wall, "wall");
		cards.addLayoutComponent(game, "buttons");
		cards.addLayoutComponent(wall, "wall");
		cards.first(getContentPane());
	}

	public static void main(String[] args) {
		Dimension dimScreen = Toolkit.getDefaultToolkit().getScreenSize();
		int w = 600, h = 300;
		int x = (int) (dimScreen.getWidth() - w) / 2;
		int y = (int) (dimScreen.getHeight() - h) / 2;
		MainFrame frame = new MainFrame();
		frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		frame.setVisible(true);
		frame.setBounds(x, y, h, h);

	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == GameOptions.buttons[0]) {
			cards.show(getContentPane(), "wall");
			setExtendedState(JFrame.MAXIMIZED_BOTH);
		}
	}
}

كلاس GameOptions

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;

public class GameOptions extends JPanel  {

	public static JButton[] buttons;
	private String[] butttons_name = {"New", "Options", "help", "Exit"};

	public GameOptions(ActionListener listener) {
		setLayout(new GridLayout(4, 1));
		setBorder(BorderFactory.createLineBorder(Color.BLUE, 5));
		setPreferredSize(new Dimension(300, 250));
		buttons = new JButton[butttons_name.length];
		for (int i = 0; i < butttons_name.length; ++i) {
			buttons = new JButton(butttons_name);
			buttons.addActionListener(listener);
			add(buttons);
		}
	}
}

enum GameModels

public enum GameModels {
	Hard_wall,explode_wall,bomb,player;
}

كلاس DrawingHardWall

import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class DrawingHardwall extends JPanel {

	private GameModels models;
	private ImageIcon icon;
	private int x = 100,  y = 50;

	public DrawingHardwall() {
		icon = new ImageIcon(getClass().getResource("divider.gif"));
	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		makeComponent(g);
	}

	public GameModels getModels() {
		return models;
	}

	public void setModels(GameModels models) {
		this.models = models;
	}

	public void makeComponent(Graphics g) {
		if (models != null) {
			switch (models) {
				case Hard_wall:
					for (int i = 1; i <= 8; ++i) {
						for (int j = 1; j <= 8; ++j) {
							g.drawImage(icon.getImage(), (x + 10) * i, (y + 30) * j, this);
						}
					}
					break;
			}
		}
	}
}

و ده لينك عليه ملف مضغوط للطود كامل ممكن تحملوه لو مش هتقدروا تنسخوا كلاس كلاس عندكم

http://www.4shared.com/file/94108695/11377...bpmber_man.html

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

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

( ربنا يدببر المرحلة دى )

و ياريت لو أى حد عمل الجزئية الى انا وضعها دى بطريقة برمجية أخرى يضعها للإفادة

و شكرا لكل من تطوع و نظر للموضوع

الرب يعوضكم خير

باى باى و سنراكم قريبا كنتم مع Bomberman :lol: :ph34r: :ph34r:

#15

بصراحة أنا لم أحب الطريقة التي وضعت بها الأحجار الثابتة

أفضل أن لا تكون منتظمة بهذا الشكل

أقصد أن تقسم الشاشة إلى مربعات لها تمثيل في مصفوفة

إذا كان المربع خالياً تضع في المصفوفة false

وإذا كان مليئاَ تضع في المصفوفة true

هل فهمت شيء؟؟؟

تحياتي

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

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

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

728x90.png

#16

اه فهمت بس عادى كلها طرق

مؤدية للغرض

و أن كنت صممتها ضع كودك لأجل مانرى ذللك

و شكرا جزيلاً

بيشوى عاطف

#17

مممممممممممممم

هناك فرق كبير بيشوي

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

التغيير حاصل فقط على الفئة DrawingHardwall

/**
 *
 * @author beshoy
 */
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class DrawingHardwall extends JPanel {

	private GameModels models;
	private ImageIcon icon;
	private int x = 50,  y = 50;
	private boolean[][] level=new boolean[][]{
			{true,true,true,true,true,true,true,true},
			{true,false,false,false,false,false,false,false},
			{true,true,true,true,true,true,true,true},
			{false,false,false,false,false,false,false,false},
			{true,true,true,true,true,true,true,true},
			{false,false,false,false,false,false,false,false},
			{true,true,true,true,true,true,true,true},
			{false,false,false,false,false,false,false,false}
	};
	public DrawingHardwall() {
		icon = new ImageIcon(getClass().getResource("divider.gif"));
	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		makeComponent(g);
	}

	public GameModels getModels() {
		return models;
	}

	public void setModels(GameModels models) {
		this.models = models;
	}

	public void makeComponent(Graphics g) {
		if (models != null) {
			switch (models) {
				case Hard_wall:
					for (int i = 0; i <= level.length-1; ++i) {
						for (int j = 0; j <= level.length-1; ++j) {
							if(level[j])
								g.drawImage(icon.getImage(), (x + 10) * (i+1), (y + 30) * (j+1), this);
						}
					}
					break;
			}
		}
	}
}

تحياتي

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

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

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

728x90.png

#18

سلام للجميع : -

و من قناة bomberman رجل التفجير و التخريب ( عمال يخرب فيا :angry: )

شكرا يا أخ علاء على الكود الظريف بتاعك لقد افدتنى بفكرة حلوة ضُمت إلى أفكارى .

اليوم حبيت اتسلى شوية - قولت اشوف كود المفجرات بتاعى ده - لكن للأسف متلعطتش تسلية دى طلعت خرابة :lol:

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

أكيد لحظتم انه هناك فراغ بجانب العواميد ال 8 ( الفراغ ده انا قولت احط فى بانل فيها رقم المستوى و فيها - فرضا انه كل مستوى 3 محاولات - عدد المحاولات و هتقل كل ما يموت اللاعب و هنضع فيها ال bounse الخاصة بكل مستوى مثل ( زيادة عدد القنابل - إعطاه محاولة إضافية و هكذا سنرى فيما بعد )

المشكلة انى لما عملت البانل دى جزء منها أخفى جزء من الحواجز الغير قابلة للتفجير على الرغم انى واضع قيم x , y الخاصة بالبانل بعيدة عن الحواجز

و إليكم صورة المخرج حملوها من اللينك ده : http://www.4shared.com/file/94404150/d2bcf67e/1_online.html

و أدى الكود الى ضفته على الجزء السابق :

فى الكلاس الى اسمه DrawingHardwall

هو هو لم أضيف شيئا إلا فى الconstructor

زى كده

public DrawingHardwall() {
		icon = new ImageIcon(getClass().getResource("divider.gif"));
		add(new ControlAction(), BorderLayout.EAST);

	}

أكيد لحظتم انه هناك كلاس جديد اسمه controlaction

ادى الكود بتاعه:-

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

class ControlAction extends JPanel {

	private JPanel control_Panel,  level_panel,  chance_panel;
	private JLabel level_label,  chance;
	private JTextField level_field,  chance_field;
	private Point p;

	public ControlAction() {
		p = new Point();

		control_Panel = new JPanel();
		control_Panel.setLayout(new GridLayout(2, 2));

		level_panel = new JPanel();
		level_panel.setLayout(new FlowLayout());
		level_label = new JLabel("level");
		level_field = new JTextField(10);
		level_field.setEditable(false);
		level_panel.add(level_label);
		level_panel.add(level_field);

		chance_panel = new JPanel();
		chance_panel.setLayout(new FlowLayout());
		chance = new JLabel("Number of chance");
		chance_field = new JTextField(10);
		chance_field.setEditable(false);
		chance_panel.add(chance);
		chance_panel.add(chance_field);

		control_Panel.add(level_panel);
		control_Panel.add(chance_panel);
		control_Panel.setPreferredSize(new Dimension(200, 100));
		control_Panel.setBorder(BorderFactory.createLineBorder(Color.CYAN, 10));
		p.x =1000;
		p.y = 100;
		control_Panel.setLocation(p);
		add(control_Panel, BorderLayout.EAST);
	}
}

كل ما اود معرفته هو لماذا لم تنتقل البانل الى المكان المحدد لها

معلش دوشكم ديما ً استحملونى يا أحباء

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

بيشوى عاطف

#19

اعذرني لكن أين المكان المحدد لها؟؟؟

أين حددته؟

تحياتي

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

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

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

728x90.png

#20

معلش استحمل غباوتى

انا حددت مكانها بهذه الطريقة

p.x =1000;
		p.y = 100;
		control_Panel.setLocation(p);

و كل ما ازود قيمة x

لم تتحرك من مكانها !!!!!!!!

و لو بفكر غلط او كاتب كزد بطريقة غلط ياريت قولى الطريقة الصح

و شكرا

#21

السلام عليكم

حلت المشكلة

السبب في المشكلة أنك لكي تستطيع أن تضع مكون component في مكان معين يجب أن تستخدم منظم فارغ null layout

وقد تم التعديل على الفئتين DrawingHardwall و ControlAction

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

class ControlAction extends JPanel {

	private JPanel control_Panel,  level_panel,  chance_panel;
	private JLabel level_label,  chance;
	private JTextField level_field,  chance_field;
	private Point p;

	public ControlAction() {


		control_Panel = new JPanel();
		control_Panel.setLayout(new GridLayout(2, 2));

		level_panel = new JPanel();
		level_panel.setLayout(new FlowLayout());
		level_label = new JLabel("level");
		level_field = new JTextField(10);
		level_field.setEditable(false);
		level_panel.add(level_label);
		level_panel.add(level_field);

		chance_panel = new JPanel();
		chance_panel.setLayout(new FlowLayout());
		chance = new JLabel("Number of chance");
		chance_field = new JTextField(10);
		chance_field.setEditable(false);
		chance_panel.add(chance);
		chance_panel.add(chance_field);

		control_Panel.add(level_panel);
		control_Panel.add(chance_panel);
		//control_Panel.setPreferredSize(new Dimension(200, 100));
		control_Panel.setBorder(BorderFactory.createLineBorder(Color.CYAN, 10));
		add(control_Panel, BorderLayout.CENTER);
	}
}

بالمناسبة قمت بالتعديل على جعل الحواجز بجنب بعض

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

/**
 *
 * @author beshoy
 */
import java.awt.Graphics;
import java.awt.Point;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class DrawingHardwall extends JPanel {

	private GameModels models;
	private ImageIcon icon;
	private int x = 32,  y = 32;
	private boolean[][] level=new boolean[][]{
			{true,true,true,true,true,true,true,true},
			{true,false,false,false,false,false,false,false},
			{true,true,true,true,true,true,true,true},
			{false,false,false,false,false,false,false,false},
			{true,true,true,true,true,true,true,true},
			{false,false,false,false,false,false,false,false},
			{true,true,true,true,true,true,true,true},
			{false,false,false,false,false,false,false,false}
	};
	public DrawingHardwall() {
		icon = new ImageIcon(getClass().getResource("divider.gif"));
		setLayout(null);
		Point p = new Point();
		p.x =1000;
		p.y = 100;
		ControlAction control_Panel=new ControlAction();
		control_Panel.setBounds(700, 100, 700, 700);
		add(control_Panel);
	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		makeComponent(g);
	}

	public GameModels getModels() {
		return models;
	}

	public void setModels(GameModels models) {
		this.models = models;
	}

	public void makeComponent(Graphics g) {
		if (models != null) {
			switch (models) {
				case Hard_wall:
					for (int i = 0; i <= level.length-1; ++i) {
						for (int j = 0; j <= level.length-1; ++j) {
							if(level[j]){
								g.drawImage(icon.getImage(), (x) * (i+1), (y ) * (j+1), this);
								System.out.println("x="+(x) * (i+1)+" y="+(y ) * (j+1));
							}
						}
					}
					break;
			}
		}
	}
}

تحياتي

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

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

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

728x90.png

#22

سلام للجميع

شكراً يا علاء

أولاً حكاية المنظم الفارغ أول مرة أعرفها معرفش ان كان ممكن اجعله ب null

بس سوال عبيط شوية كده ( أنا تضايقت لما عرفت حلها انه بالسهولة دى فكان نفسى اعرفها بنفسى .... كيف فكرت يعنى ؟؟ هتقولى بحثت و قرأت هقولك و انا قرات من تيتوريل

صن و من كتاب how to program

و لا هو الموضوع هيتحسن بمرور الوقت و التدريبو لا ايه بالظبط ؟؟؟ لأنى حاسس نفسى مستوايا مش و لابد و ممكن تقول وحش :unsure:

_____________________________________________________________

بالمناسبة انت عملت x, y = 32

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

فاأنا عملت كده - أقراه و هتلاحظ الإختلاف ( هو بسيط )

  private int x = 90,  y = 40;
	private Point p;
	private ControlAction control_panel;
	public DrawingHardwall() {
		icon = new ImageIcon(getClass().getResource("divider.gif"));
		p=new Point();
		setLayout(null);
		p.x=900;
		p.y=100;
		control_panel=new ControlAction();
		control_panel.setBounds(p.x, p.y, 500,800);
		add(control_panel);

	}

بتقولى شوف صورة أكبر

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

_____________________________________________________

صحيح شكل الحاجز الى انت شوفته ده هغيره بصورة حاجزشكله غيرالحالى

لأن الى شغالين بيه هو طلع الى قابل للتفجير( لاحظت كده فى اللعبة الأصلية ) يعنى هشيل الصورة القديمة و هضع مكانها دىhttp://www.4shared.com/file/94524664/4a2ff7e4/wall.html

مش أكثر

________________________________________________________________________________

_____

دلوقتى هنبتدى فى مرحلة وضع الحواجز القبلة للتفجير بطريقة random

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

و ربنا يدبر

_________________________________________________-

شكرا يا شباب

لنا لقاء

#23

هقولك حاجة يا بيشوي

أنتا فكرك القراءة بتغني عن كل حاجة

خدها مني حكمة الخبرة أحسن من مية قراءة

اشتغل واقرأ كود ناس تانية وبعدين اتكلم عن القراءة

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

أصله كمان شوية هتلاقي نفسك مش عارف تعمل اللوجيك بتاع البرنامج

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

لو عندك فكرة معينة تكلم

تحياتي

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

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

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

728x90.png

#24

هو أنا مش فاهم كويس

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

أصله كمان شوية هتلاقي نفسك مش عارف تعمل اللوجيك بتاع البرنامج

و انا بقى ليه مش هقدر اتحكم بالطريقة بتعتى ؟؟؟ و ليه مش هكون عارف اعمل اللوجيك ؟؟؟ أنا بستفسر ايه العيوب الى عندى تمنع عمل ذلك

و بعدين انت مش مراعى شئ ... أنت مزنقهم جنب بعض و مش مراعى انك هتحط حاجارة تانى غيرى الوضعتهم ( الى هتتفجر بعد كده )

شكرا

#25

يا بني ركز معايه

لازم يكون عندك كل الشغل في مصفوفة

علشان عرف تخلي الراجل الي بيتفجر يمشي بدون ما يتخطى الحواجز

غير هيك هتلاحظ أنك هتتغلب

على كل حال هيبين الموضوع ده في المستقبل

ممكن نكمل عادي زي كده لحد ما نشوف ايه الي يحصل معانا

تحياتي

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

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

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

728x90.png

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

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

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

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

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