| 发表于:2007-11-25 09:52:24 楼主 |
问题是 画的棋子有点方 显示胜方的时候有点慢 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class wzq extends japplet{ int[][] ss=new int[25][25]; int[][] ff=new int[625][2]; int ln=0;//下到第几步 int db=0;//当前棋子的颜色 int qgs=0;//连子数 int sf=0;//胜方是谁? jbutton b1=new jbutton("开始"); jbutton b2=new jbutton("悔棋"); textfield tf1=new textfield(15); public static void mian(string args[]){ jframe f=new jframe("五子棋"); wzq gig=new wzq(); gig.init(); f.setcontentpane(gig); f.setsize(680, 680); f.setvisible(true); f.setdefaultcloseoperation(jframe.exit_on_close); } public void init(){//画棋盘 final wzq f=this; container fs =getcontentpane(); tf1.setbounds(260, 615, 120, 20); b2.setbounds(160, 615, 80, 40); b2.addactionlistener(new actionlistener(){ public void actionperformed(actionevent e){ f.ln=f.ln-1; if(f.ln> =0){ f.ss[f.ff[f.ln][0]][f.ff[f.ln][1]]=0; } f.ln=f.ln-1; if(f.ln> =0){ f.ss[f.ff[f.ln][0]][f.ff[f.ln][1]]=0; } f.sf=3; f.repaint(); } }); b1.setbounds(40, 615, 80, 40); b1.addactionlistener(new actionlistener(){ public void actionperformed(actionevent e){ for(int i=0;i <25;i++){ for(int j=0;j <25;j++){ f.ss[i][j]=0; } } f.ln=0; f.sf=3; f.repaint(); } }); fs.add(tf1); fs.add(b2); fs.add(b1); fs.setlayout(null); fs.setbackground(color.white); fs.addmouselistener( new mouseadapter(){ public void mousepressed(mouseevent event){ if((event.getx()-24)%23 <10){ if((event.gety()-44)%23 <10){ f.qz(((event.getx()-24)-((event.getx()-24)%23))/23,(event.gety()-44-(event.gety()-44)%23)/23); } if((event.gety()-44)%23> 13){ f.qz(((event.getx()-24)-((event.getx()-24)%23))/23,((event.gety()-44-(event.gety()-44)%23)/23)+1); } } if((event.getx()-24)%23> 13){ if((event.gety()-44)%23 <10){ f.qz((((event.getx()-24)-((event.getx()-24)%23))/23)+1,(event.gety()-44-(event.gety()-44)%23)/23); } if((event.gety()-44)%23> 13){ f.qz((((event.getx()-24)-((event.getx()-24)%23))/23)+1,((event.gety()-44-(event.gety()-44)%23)/23)+1); } }}}); } public void update(graphics g){ if(sf==3){ g.clearrect(0, 0, 680, 680); paint(g); sf=0; }else{ paint(g); } } public void sfif(int i,int j){//判断胜方的方法 sf=0; qgs=0; db=ss[i][j]; if(db!=0){ for(int si=i;si> =0;si--){ if(db==ss[si][j]){ qgs++; }else{ break; } } for(int si=i;si <25;si++){ if(db==ss[si][j]){ qgs++; }else{ break; } } if(qgs> 5){ if(db==1){ sf=1; }else if(db==2){ sf=2; } } qgs=0; for(int sj=j;sj> =0;sj--){ if(db==ss[i][sj]){ qgs++; }else{ break; } } for(int sj=j;sj <25;sj++){ if(db==ss[i][sj]){ qgs++; }else{ break; } } if(qgs> 5){ if(db==1){ sf=1; }else if(db==2){ sf=2; } } qgs=0; for(int si=i,sj=j;si> =0&&sj> =0;si--,sj--){ if(db==ss[si][sj]){ qgs++; }else{ break; } } for(int si=i,sj=j;si <25&&sj <25;si++,sj++){ if(db==ss[si][sj]){ qgs++; }else{ break; } } if(qgs> 5){ if(db==1){ sf=1; }else if(db==2){ sf=2; } } qgs=0; for(int si=i,sj=j;si> =0&&sj <25;si--,sj++){ if(db==ss[si][sj]){ qgs++; }else{ break; } } for(int si=i,sj=j;si <25&&sj> =0;si++,sj--){ if(db==ss[si][sj]){ qgs++; }else{ break; } } if(qgs> 5){ if(db==1){ sf=1; }else if(db==2){ sf=2; } } } } public void qz(int i,int j){//把棋子写到数组里 if(i <25&i> =0&j <25&j> =0){ if(sf!=1&&sf!=2){ if(ss[i][j]==0){ ff[ln][0]=i; ff[ln][1]=j; if(ln%2==0){ ss[i][j]=2; } else{ ss[i][j]=1; } sfif(i,j); repaint(); ln++; } } } } public void paint(graphics g){ for(int i=0;i <25;i++){ g.drawline(24, 44+i*23, 575, 44+i*23); } for(int i=0;i <25;i++){ g.drawline(24+i*23, 44, 24+i*23, 595); } for(int i=0;i <25;i++){//画棋子 for(int j=0 ;j <25;j++){ if(ss[i][j]==1){ g.setcolor(color.red); g.filloval(24+i*23-10, 44+j*23-10, 20, 20); } if(ss[i][j]==2){ g.setcolor(color.black); g.filloval(24+i*23-10, 44+j*23-10, 20, 20); } } } if(sf==1){//写出胜方 g.setcolor(color.red); g.setfont(new font("ettext",22,72)); g.drawstring("红方胜", 200, 300); } if(sf==2){ g.setcolor(color.black); g.setfont(new font("ettext",22,72)); g.drawstring("黑方胜",200, 300); } b1.setvisible(false); b1.setvisible(true); b2.setvisible(false); b2.setvisible(true); } } |
|
|
|
|