import java.awt.*; class MnPanel extends Panel { // MButton button; // MPanel backpanel; MinePanel parent; int x=-1; int y=-1; boolean ismine=false; boolean cleared=false; boolean marked=false; String name="?"; // CardLayout cl; MnPanel(int xnum,int ynum,MinePanel p){ super(); x = xnum; y = ynum; parent=p; // setLayout(cl = new CardLayout()); // add("one",button = new MButton(this)); // add("two",backpanel = new MPanel(this)); return; } public void setLabel(String nam){ name=nam; } public String getLabel(){ return name; } public void paint(Graphics g) { if (name == "M"){ g.drawImage(parent.parent.markmine,0,0,this); }else if (name == "?"){ g.drawImage(parent.parent.blanksq,0,0,this); }else if (name == "X"){ g.drawImage(parent.parent.amine,0,0,this); }else{ g.drawString(name, 0, 10); } } public Dimension preferredSize() { return new Dimension(30, 30); } public void set_mine(boolean im){ ismine = im; } public boolean mouseDown(java.awt.Event event, int x, int y) { System.out.println("Mnpanel.mouseDown"); if (!cleared){//we are still a button clear_square(event); }else{ // act as panel if ((event.modifiers & Event.META_MASK) != 0){ // looking for right mouse button System.out.println("MPanel.mouseDown:Right Click"); } else if ((event.modifiers & Event.ALT_MASK) != 0){ System.out.println("MPanel.mouseDown:Middle Click"); sweep_round(); // (will only clear if enough marked) } else { System.out.println("MPanel.mouseDown:Left Click"); } } return true; } public boolean action(Event e, Object arg) { System.out.println("MButton.action: button pressed, Event = " + e); clear_square(e); return true; } void clear_square(Event e){ if ((e.modifiers & Event.META_MASK) != 0){ // looking for right mouse button System.out.println("MButton.clear_square:Right button?"); marked = !marked; // Toggle for now rather than tristate if (marked){ setLabel("M"); }else{ setLabel("?"); } } else if ((e.modifiers & Event.ALT_MASK)!= 0){ System.out.println("MButton.clear_square:Middle Button? (Do nothing)"); }else{ System.out.println("MButton.clear_square:Left Button"); clear_square(); } repaint(); } public void clear_square(){ int around = 0; if (!is_marked()){ if (!cleared){ cleared = true; around = check_around(); if (!ismine){ if (around > 0){ setLabel("." + around); }else{ setLabel("-"); clear_around(); } }else{ setLabel("X"); clear_board(); // You loose show all } repaint(); } } } public boolean check(){ return ismine; } boolean is_marked(){ return marked; } void reset(){ ismine=false; cleared=false; marked=false; setLabel("?"); //remove any labels set in previous game repaint(); } int check_around(){ return parent.check_around(x,y); } void clear_around(){ parent.clear_around(x,y); } void sweep_round(){ parent.sweep_round(x,y); } void clear_board(){ parent.clear_board(); } boolean get_mark_mode(){ return parent.get_mark_mode(); } // boolean is_marked(){ // return button.is_marked(); // } // boolean check(){ // return button.check(); // } // void clear_square(){ // button.clear_square(); // } // void set_mine(boolean opt){ // button.set_mine(opt); // } // public Dimension preferredSize() { // return new Dimension(30, 30); // } // void rmbut(){ // cl.last(this); // backpanel.repaint(); // } // void reset(){ // cl.first(this); // button.reset(); // } // String getLabel(){ // return button.getLabel(); // } }