Java

Archer Inc

New member
Java

המשחק הבא אמור להיות גרסא שלדית ביותר של איקס-עיגול. הבעיה? הכפתורים לא משנים את שמם בלחיצה, כאילו לא הגדרתי תגובה לפעולה. מה עושים? (לגבי הפונקציה Game(), אני יודע שצריך להוציא את מקרה הכפתור הריק מחוץ לתחום, אז נא לא להעיר על זה).
import java.awt.*; import java.io.*; import java.awt.event.*; public class XOgame extends Frame implements ActionListener { Button b1=new Button(" "); Button b2=new Button(" "); Button b3=new Button(" "); Button b4=new Button(" "); Button b5=new Button(" "); Button b6=new Button(" "); Button b7=new Button(" "); Button b8=new Button(" "); Button b9=new Button(" "); Button[][] matriza=new Button[3][3]; boolean win=false; boolean turn=true; public boolean Game() { String name=matriza[0][0].getName(); boolean row=false, line=false; for(int k=0; k<3;k++) for(int j=0; j<3;j++) { if (matriza[k][j].getName()!=name) line=true; if ((j==2)&&(!line)) { win=true; } if (matriza[j][k].getName()!=name) row=true; if ((j==2)&&(!row)) { win=true; } if ((row)&&(line)) j=3; } if((matriza[0][0].getName()==matriza[1][1].getName())&&(matriza[0][0].getName()==matriza[2][2].getName())) win=true; if((matriza[0][2].getName()==matriza[1][1].getName())&&(matriza[0][2].getName()==matriza[2][0].getName())) win=true; return(win); } public void actionPerformed(ActionEvent event) { Button button=(Button) event.getSource(); if (turn) { button.setName("X"); turn=false; } else { button.setName("Y"); turn=true; } if(Game()) System.out.println("OWNED") ; } public XOgame(String caption) { super(caption); setLayout(new GridLayout(0,3)); add(b1); add(b2); add(b3); add(b4); add(b5); add(b6); add(b7); add(b8); add(b9); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); b5.addActionListener(this); b6.addActionListener(this); b7.addActionListener(this); b8.addActionListener(this); b9.addActionListener(this); matriza[0][0]=b1; matriza[0][1]=b2; matriza[0][2]=b3; matriza[1][0]=b4; matriza[1][1]=b5; matriza[1][2]=b6; matriza[2][0]=b7; matriza[2][1]=b8; matriza[2][2]=b9; pack(); setVisible(true); } public static void main(String[] args) { XOgame xo=new XOgame("XO"); } }​
 

Zack DA

New member
הקוד הזה.....

1. הוא לא כתוב בצורה מסודרת. 2. הוא לא מחולק כמו שצריך. 3. השמות רחוקים מכל קונבנציה שפויה 4. אין תיעוד. 5. מה עשית כדי לנסות ולברר מה הבעיה ?
 

Zack DA

New member
ועוד...

6. אין אפילו הסתרת מידע (מדוע הכפתורים אינם private ?) 7. זה נשמע לך הגיוני שאובייקט המשחק עצמו יעשה implements ל- ActionListener ? 8. שאלה: למה אתה בכלל מצפה שהגרפיקה תתעדכן מעצמה ?
 

Archer Inc

New member
היי, היי...

אני רק מתחיל, לומד יסודות... אני חש בתקיפות מה ואינני מבין מדוע. לפרק על הסתרת המידע, למשל, עדיין לא הגעתי. לפי מיטב הבנתי, הפונקציה actionPerform שכתבתי אמורה לכתוב X או O על הכפתור הנלחץ, בהתאם לתנאים. זה לא קורה. מה עשיתי? קראתי שוב ושוב את הקוד. הדיבאגר לא מצביע על שום דבר שאינו בסדר, כי התכנה כן רצה, הכפתורים פשוט לא משתנים. ניסיתי למצוא היכן ניתן לעקוב אחרי הכפתורים (ולראות אם שמם משתנה, ופשוט אינו נכתב על המסך), אבל עדיין לא הצלחתי. מנסה...
 

Zack DA

New member
ארני שמח שהצלחת ../images/Emo13.gif

מקווה ששמת לב להערה האחרונה שלי, ועשית pack מחדש לגרפיקה. חוץ מזה - אל תחוש בתקיפות, אני רוצה להרגיל אותך לדברים טובים יותר...
 
למעלה