לא מצאתי עזרה מספקת לא בפורום האופ ולא בפרום

ELIELI22

New member
לא מצאתי עזרה מספקת לא בפורום האופ ולא בפרום

לא מצאתי עזרה מספקת לא בפורום האופ ולא בפרום שפות תכנות , אז אני מציב כאן אולי לקבל עזרה . זו השאלה : . כתוב יישומון המציג סימולציה של רמזור פשוט הכולל שתי נורות עגולות עבור כלי רכב ושתי נורות מלבנית עבור הלכי רגל. הרמזור פועל באופן הבא: - שתי הנורות של כלי הרכב מיועדות לאדום וירוק בהתאמה, משך הזמן (במילי-שניות) שבו כל נורה תהיה דלוקה נקבע ע"י קבועים (אחד עבור כל נורה). - הנורות של הלכי הרגל תידלקנה בהתאם למקובל: כלומר, כאשר הנורה האדומה של כלי הרכב דלוקה, תידלק הנורה הירוקה של הלכי הרגל, וכאשר הנורה הירוקה של כלי הרכב דלוקה, תידלק הנורה האדומה של הלכי הרגל. הדרכה: - היישומון אחראי על ציור הרמזור. את הציור יש לבצע באמצעות גרפיקה פשוטה של עיגולים ומלבנים הצבועים בצבעים מתאימים. ניתן להציג אור כבוי באמצעות צביעתו בצבע אפור. - היישומון נעזר בתהליך (Thread) לצורך תיזמן פעולת הרמזור. ב. ברצוננו לשפר את הרמזור כך שהאור הירוק של הלכי הרגל יהבהב, כלומר בזמן שלהלכי הרגל יש אור ירוק, יש להדליק ולכבות אותו באופן מחזורי (למשל כל 200 מילי-שניות) . הסבר במילים כיצד להשתמש באובייקט מסוג javax.swing.Timer כדי לממש את ההיבהוב המתואר לעיל.
 

ELIELI22

New member
וזו התשובה הלקויה שלי.אם מישהו יעזור אני אשמח

import javax.swing.JApplet; import java.awt.Graphics; import java.awt.*; public class mainQ3 extends JApplet { private static final long serialVersionUID = 2050465284433720553L; private TrafficLightJPanel trafficLight = new TrafficLightJPanel(true); private ThreadForTrafficLight trafficLightthread; public void init() { this.add(trafficLight); trafficLightthread = new ThreadForTrafficLight(trafficLight,1000,1000); trafficLightthread.start(); trafficLight.setVisible(true); } public void paint(Graphics g) { } public void start() { } } import javax.swing.JPanel; import java.awt.*; public class TrafficLightJPanel extends JPanel { private boolean trueCanWalkFalseShouldWait; Graphics draw; int shapesSize,startLocation; private static final long serialVersionUID = 1L; public TrafficLightJPanel(boolean bool) { trueCanWalkFalseShouldWait=bool; } public void paintComponent(Graphics g) { this.draw=g; int height,width; super.paintComponent(g); width=getWidth(); height=getHeight(); this.shapesSize=(int)(height/5); //width= (int)(width/5); int start=2; //int t=(int)((shapesSize-4*(height))/3); g.drawOval(1,start, shapesSize-1 , shapesSize-1); g.drawOval(1,start+shapesSize+1, shapesSize-1 , shapesSize-1); g.drawRect(1,start+2*(shapesSize+1),shapesSize-1 , shapesSize-1); g.drawRect(1,start+3*(shapesSize+1),shapesSize-1 , shapesSize-1); if (trueCanWalkFalseShouldWait) { greenForWalkers(); } else { greenForWalkers(); } } private void TrafficLightGreenWalkers(Graphics g,int shapesSize,int startLocation) { g.setColor(Color.GRAY); g.fillOval(1,startLocation, shapesSize-1 , shapesSize-1); g.setColor(Color.GREEN); g.fillOval(1,1*(startLocation+shapesSize+1), shapesSize-1 , shapesSize-1); } private void TrafficLightRedWalkers(Graphics g,int shapesSize,int startLocation) { g.setColor(Color.RED); g.fillOval(1,startLocation, shapesSize-1 , shapesSize-1); g.setColor(Color.GRAY); g.fillOval(1,1*(startLocation+shapesSize+1), shapesSize-1 , shapesSize-1); } private void TrafficLightGreenCars(Graphics g,int shapesSize,int startLocation) { g.setColor(Color.GRAY); g.fillRect(1,2*(startLocation+shapesSize+1), shapesSize-1 , shapesSize-1); g.setColor(Color.GREEN); g.fillRect(1,3*(startLocation+shapesSize+1), shapesSize-1 , shapesSize-1); } private void TrafficLightRedCars(Graphics g,int shapesSize,int startLocation) { g.setColor(Color.RED); g.fillRect(1,2*(startLocation+shapesSize+1), shapesSize-1 , shapesSize-1); g.setColor(Color.GRAY); g.fillRect(1,3*(startLocation+shapesSize+1), shapesSize-1 , shapesSize-1); } public void greenForWalkers() { TrafficLightGreenWalkers(draw,shapesSize,startLocation); TrafficLightRedCars(draw,shapesSize,startLocation); } public void greenForDrivers() { TrafficLightRedWalkers(draw,shapesSize,startLocation); TrafficLightGreenCars(draw,shapesSize,startLocation); } } public class ThreadForTrafficLight extends Thread { private TrafficLightJPanel traffic; private int greenForWalkers; private int redForWalkers; public ThreadForTrafficLight(TrafficLightJPanel traffic1, int greenForWalkers, int redForWalkers) {​
 

vinney

Well-known member
אולי תתחיל מלתאר במילים את האלגוריתמים

ואיך מימשת את התיזמונים, אחרי זה נשווה את זה לקוד ונראה אם זה מתאים?
 

ELIELI22

New member
או קי אני אנסה.

כתבתי APPLET שבתוך הפונקציה Init שלו יזמתי את כל הקריאה לthread .
public void init() { this.add(trafficLight); trafficLightthread = new ThreadForTrafficLight(trafficLight,1000,1000); trafficLightthread.start(); trafficLight.setVisible(true); }​
כתבתי אוביקט שיורש מ JPanel די פשוט שיודע לבצע פעולות כמו להדליק ולכבות רמזור (בקריאה למתודות שלו). וכתבתי thread שאמור להפעיל את המתודות של האוביקט הנ"ל בצורה הבאה :
public void run() { try { traffic.greenForWalkers(); Thread.sleep(greenForWalkers); traffic.greenForDrivers(); Thread.sleep(redForWalkers); } catch (InterruptedException e)​
 
למעלה