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

لعبة الثعبان

بدأه lahoucine في 21 فبراير 2008 · 11 رد · 1,711 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الثعبان ياخد الشكل التالى % هو الراس هو الديل و* هي التفاحةoooo

O

O

O

O

%

*

حيت (%0000) هو الثعبان

(*) التفاحة هى

snack.bmp

تم تعديل هذه المشاركة بواسطة lahoucine في 21 فبراير 2008 في 18:49

#2

لم أفهم أي شيء يا أخي

أعد كتابة الموضوع مرة أخرى وأرجو التفصيل

الله معك

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

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

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

728x90.png

#3

where are you ?

#4

هذه فكره مبدئيه للتطبيق .

مثلا ليكن أنك وضعت الثعبان في JPanel ، وقمت بعمل Mouse Listener على الأسهم الأربع ، وفي حال ضغطت أي زر منهم قم بتغيير مسار الثعبان (قم باعاده الرسم) ، مع تغيير Position الثعبان الى الجهه المراد ، مثلا عندما يضغط يمين وكان الموقع الحالي :

100 , 200

يتغير الموقع الى :

100 , 210

الان التفاح يجب أن يظهر بشكل عشوائي Random ، ويختفي بعد ذلك ، فقم مثلا بوضع اظهار التفاح في موقع معين في Thread منفصل عن الخاص بحركه الثعبان ، ومثلا اعمل داله ترجع موقع التفاحه الحالي .

في حاله حركت الثعبان ، ممكن تعمل اختبار الموقع الحالي ، بالموقع الخاص بالتفاحه ، فاذا تساوى قم بزياده طول الثعبان ،

وهناك الكثير من الأفكار ، قم بالبدء بالعمل ، وان شاء الله يساعدوك الشباب .

حاليا مشغول بالاختبارات ، وسوف تنتهي الأسبوع القادم بمشيئه الله ، لذلك لن أستطيع تقديم أي Code الا بعد انتهائها :) .

بالتوفيق .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#5

بصراحة أخي الرومانسي الموضوع ليس بالسهولة التي تتصوره

لديك إنحناءات في نصف الطريق

تحتاج إلى linkedList

تخزن فيها نقاط النهاية والبداية والتعرجات

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

أخي الكريم محاولاتك لكي نستطيع مساعدتك بشكل أكبر

الله معك

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

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

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

728x90.png

#6

أخي علاء ،

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

طبعا ستكون هناك مشاكل كثيره ، منها مثلا عندما ينتقل الثعبان الى أقصى اليمين ، وهنا عليه الخروج من الجهه اليسرى ، بالاضافه الى مشاكل لن تظهر الا عند بدء كتابه البرنامج .

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

وربما أكون أنا من يضع محاولاته المره القادمه :) :) .

تحياتي .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#7

صحيح كلامك أخ رومانسي

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

فعلاً من أصعب البرمجة

ما رأيك في مشروع مشترك

يعني محاولاتي مع محاولاتك تصنع شيئاً جميلاً :D

الله معك

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

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

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

728x90.png

#8

شكرا علي هدا الاهتمام لمادا لا يكون هدا العمل بداية لتعلم اد ارى ان كود هده اللعبة يتضمن جميع اساسيات البرمجة

snackgame.bmp

#9

تقصد أن اللعبة ستكون على الدوس مثلاً؟؟؟

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

بالتأكيد لن يكون على الدوس

تحياتي

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

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

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

728x90.png

#10

نعم علي الدوس انا مبتدئ في جافا اما تجريبتى فمع c++ مند5 سنوات

#11

أخي لا أعلم كيف يمكنني أن أفيدك

فأنا لم أعمل على الدوس في الأغلب

ولا أعرف كيف يمكنك مسح الشاشة وإعادة الكتابة عليها ثانية

لكن بما أن لك معرفة كافية في C++ ابحث عن تقنية JNI

أظن أنها ستفيدك

الله معك

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

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

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

728x90.png

#12

Direction

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

import java.util.*;

public enum Direction {

UP, RIGHT, DOWN, LEFT;

public static Direction random() {

Random rand = new Random();

int r = rand.nextInt(4);

return (Direction.values()) [r];

}

}

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

Snake

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

import java.awt.*;

import java.util.*;

public class Snake {

private LinkedList<Point> pieces;

private Direction facing;

private int foodCount;

private int lengthenSteps;

private boolean alive;

public Snake(int x, int y) {

this.pieces = new LinkedList<Point>();

this.pieces.add(new Point(x, y));

this.facing = Direction.RIGHT;

this.foodCount = 0;

this.alive = true;

}

public void eat() {

this.foodCount++;

this.lengthenSteps += this.foodCount;

}

public Point getHead() {

return this.pieces.get(0);

}

public LinkedList<Point> getPieces() {

return this.pieces;

}

public boolean isAlive() {

return this.alive;

}

public boolean overlaps() {

Point head = this.getHead();

for (Point p : this.getPieces()) {

if (p != head && p.equals(head)) {

return true;

}

}

return false;

}

public void move() {

Point head = this.getHead();

switch (this.facing) {

case UP:

this.pieces.addFirst(new Point(head.x, head.y - 1));

break;

case DOWN:

this.pieces.addFirst(new Point(head.x, head.y + 1));

break;

case LEFT:

this.pieces.addFirst(new Point(head.x - 1, head.y));

break;

case RIGHT:

this.pieces.addFirst(new Point(head.x + 1, head.y));

break;

}

if (this.lengthenSteps > 0) {

this.lengthenSteps--;

} else {

this.pieces.removeLast(); // delete tail

}

}

public void setAlive(boolean alive) {

this.alive = alive;

}

public void setDirection(Direction facing) {

this.facing = facing;

}

}

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

SnakeFrame

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

import java.awt.*;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import javax.swing.*;

public class SnakeFrame extends JFrame {

public static void main(String[] args) {

SnakeFrame frame = new SnakeFrame();

frame.start();

}

private static final long serialVersionUID = 1L;

private SnakePanel panel;

private Snake snake;

public void start() {

this.setLayout(new BorderLayout());

this.setTitle("Snake Game");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(400, 300);

this.snake = new Snake(1, 1);

this.panel = new SnakePanel(this.snake);

this.add(this.panel);

MyKeyListener key = new MyKeyListener();

this.addKeyListener(key);

this.pack();

this.setVisible(true);

}

public class MyKeyListener extends KeyAdapter {

public void keyPressed(KeyEvent event) {

int keyCode = event.getKeyCode();

if (keyCode == KeyEvent.VK_UP) {

snake.setDirection(Direction.UP);

} else if (keyCode == KeyEvent.VK_DOWN) {

snake.setDirection(Direction.DOWN);

} else if (keyCode == KeyEvent.VK_LEFT) {

snake.setDirection(Direction.LEFT);

} else if (keyCode == KeyEvent.VK_RIGHT) {

snake.setDirection(Direction.RIGHT);

}

}

}

}

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

SnakePanel

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

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

public class SnakePanel extends JPanel {

private static final long serialVersionUID = 0;

private static final int SIZE = 20;

private static final int PIXELS_PER_SQUARE = 10;

private Snake snake;

public SnakePanel(Snake snakey) {

this.setPreferredSize(new Dimension(SIZE * PIXELS_PER_SQUARE, SIZE * PIXELS_PER_SQUARE));

this.setBackground(Color.WHITE);

this.snake = snakey;

Timer tim = new Timer(200, new ActionListener() {

public void actionPerformed(ActionEvent e) {

snake.move();

repaint();

}

});

tim.start();

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

g2.setColor(Color.GREEN);

g2.scale(PIXELS_PER_SQUARE, PIXELS_PER_SQUARE);

for (Point p : this.snake.getPieces()) {

g2.draw(new Ellipse2D.Double(p.x, p.y, 1, 1));

}

}

}

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