在GOOGLE里搜一下,一堆,JAVA的。

解决方案 »

  1.   

    如果你装了jbuilder,那么自带的tomcat里面的例子里就有
      

  2.   

    我自己有一个java applet的五子棋,可以给你一起讨论。
    [email protected]
      

  3.   

    import java.util.Vector;
    import cs1.Keyboard;
    public class Keeyo10
    {
      public static void main(String[] args)
      {
       String a ;
       String gu;   //guess stirng
       String[] ch = new String[10];
       int u,i,n = 0,x,t;
       boolean as,coun = false;
       System.out.println("The Hangman game!");
       do
       {
         int count = 0;  //count the chance
         Vector co = new Vector();
         String ab;    //the string you will guess
         String[] words = {"Vivian","dog","Sundays","boyboy","someone","cattail","class","Keeyo","anywhere"};
         ab = words[(int)(Math.random()*words.length)]; //give the string a word
         String[] sss = new String[ab.length()];  //ues an array to print the word's length
         for (int space = 0;space<ab.length();space++)
           sss[space] = " _";
         t = 0;
         co.addElement("");//give the vector a volue
         do
         {
           if (t == ab.length())
             break;     // if you have guess 10 times but can't guess the correct letter. you will lose, and jump the loop, begin a new game.
           do
           {
             System.out.print("\nThe word is");
             for (int space = 0;space<ab.length();space++)
             System.out.print(sss[space]); //print the "_ _ _ _" or "_ a _ a _ "
             System.out.println(" .\nPlease guess a letter or the entire word.\nYou still have "+ (10-count)+" chances.");
             System.out.println("\nYou have guessed these:" + co); //print the guessed letter.
             gu = Keyboard.readString();//it is your guess word or letter.
             as = false;// give the as a false
             if (!choose(gu)) //use a method to test the letter such as "12356,%^&$" not a letter or word.
             {
               System.out.println("\nYour input \"" + gu + "\" should be a letter from A to Z.");
               as = true; //to run the input loop
             }
             else if (gu.length() != 1 && gu.length() != ab.length())
             {
               System.out.println("Your input \"" + gu + "\" is not the right word.");
               as = true; //run the input loop
               coun = false;
             }     //test less than the word not equal one letter.
             if (co.contains(gu)) //test if you have same letters or words in your inputs
             {
               System.out.println("You have inputed it.");
               as = true;  //run the input loop
             }
             else
             {
               co.addElement(gu);// no the same letters add it into vector "co"
               coun = true; //the chance can reduce
             }
           }
           while (as); //the input gu loop       if (gu.equals(ab))
           {
             System.out.println("Good luck, the answer is right!");
             break;
           } // test if input the same size as the words is right
           n = 0;
           u = 0;
           for (i = 0;i<ab.length();i++)
           {
             if (gu.equals( ab.substring(i,i + 1)) )
             {
               u = i;
               sss[u] = " " + gu;
               n = n + 1;//print the "a__"
               t = t + 1;//print the last answer
               coun = false;
             }
           }
           if (n == 1)
              System.out.println("There is "+ n + " letter " + sss[u] + " in this word.");
           if (n > 1)
              System.out.println("There is "+ n + " letters \"" + gu + "\" in this word.");
           if (n == 0)
              System.out.println("There are no \"" + gu +"\".");
           if (coun == true)
              count++;
           if (count == 10)
           {
             System.out.println("you have no choose! You lose!");
             break;
           }
          }
          while (n != ab.length());      System.out.println("The word is " + ab + "!");
          System.out.println("Do you want to play another game or end(yes or no):");
          a = Keyboard.readString();      while (!a.equalsIgnoreCase("yes") && !a.equalsIgnoreCase("no"))
          {
            System.out.println("You have wrong input, try again:");
            a = Keyboard.readString();
          }
       }
       while ( a.equalsIgnoreCase("yes"));   System.out.println("THIS IS HUNGMAN GAME! BYE :)");  } static boolean choose(String ppp)
     {
       String pp = ppp.toLowerCase();
       int number = pp.length();
       boolean flag = false;
       for (int c = 0;c < number;c++)
       {
         char dd = pp.charAt(c);
         if (dd < 'a' || dd > 'z')
           {
             flag = false;
             break;
           }
         else
           flag = true;
       }
       return flag;
    }
     }
      

  4.   

    JAVA俄罗斯方块
      
    发表评论  2002-12-03   浏览次数:191次
     
    俄罗斯方块程序思路: 
    1.类 
    a.主类:ERS_Block  继承了Frame。 b.MyPanel类,继承了Panel。(非重要的类) 
    c.游戏画布类:GameCanvas,继承了Canvas,重载KeyListener。 
    d.处理控制类:Command,重载了ActionListener(重要不是很简单的类)。 
    处理按钮的基本动作。 e.方块类:Block。(非常重要类包括主要算法) 
    作用:pattern[6][3]这个二维数组非常重要,它是来决定什么进行画方块。其实那个方块是由一块一块组成的,而blockType(随机)决定pattern[x],turnState(随机)决定pattern[y],而dispBlock()也是一个重要的方法,它是通过算法来确定什么画方块的,当dispBlock(0)就是删除当前的方块,dispBlock(1)就是重画,所谓的变形和移动也就是这个原理。 f.定时线程类:MyTimer,重载了Thread。(重要但是简单的类) 
    作用:线程的基本功能,用while(true)无限循环,延时功能,块下降和消行的实现。 g.WinListener类:重载了WindowAdapter(非重要类)。 import java.awt.*;  
    import java.awt.event.*;  //俄罗斯方块类  
    public class ERS_Block extends Frame{  
        public static boolean isPlay=false;  
        public static int level=1,score=0;  
        public static TextField scoreField,levelField;      public static MyTimer timer;  
        GameCanvas gameScr;      public static void main(String[] argus){  
            ERS_Block ers = new ERS_Block('俄罗斯方块游戏  V1.0                                                    Author:Vincent');  
            WindowListener win_listener = new WinListener();  
            ers.addWindowListener(win_listener);  
        }      //俄罗斯方块类的构造方法  
        ERS_Block(String title){  
            super(title);          setSize(600,480);  
            setLayout(new GridLayout(1,2));          gameScr = new GameCanvas();  
            gameScr.addKeyListener(gameScr);          timer = new MyTimer(gameScr);  
            timer.setDaemon(true);  
            timer.start();  
            timer.suspend();          add(gameScr);          Panel rightScr = new Panel();  
            rightScr.setLayout(new GridLayout(2,1,0,30));  
            rightScr.setSize(120,500);  
            add(rightScr);          //右边信息窗体的布局  
            MyPanel infoScr = new MyPanel();  
            infoScr.setLayout(new GridLayout(4,1,0,5));  
            infoScr.setSize(120,300);  
            rightScr.add(infoScr);          //定义标签和初始值  
            Label scorep = new Label('分数:',Label.LEFT);  
            Label levelp = new Label('级数:',Label.LEFT);  
            scoreField = new TextField(8);  
            levelField = new TextField(8);  
            scoreField.setEditable(false);  
            levelField.setEditable(false);  
            infoScr.add(scorep);  
            infoScr.add(scoreField);  
            infoScr.add(levelp);  
            infoScr.add(levelField);  
            scorep.setSize(new Dimension(20,60));  
            scoreField.setSize(new Dimension(20,60));  
            levelp.setSize(new Dimension(20,60));  
            levelField.setSize(new Dimension(20,60));  
            scoreField.setText('0');  
            levelField.setText('1');          //右边控制按钮窗体的布局  
            MyPanel controlScr = new MyPanel();  
            controlScr.setLayout(new GridLayout(5,1,0,5));  
            rightScr.add(controlScr);          //定义按钮play  
            Button play_b = new Button('开始游戏');  
            play_b.setSize(new Dimension(50,200));  
            play_b.addActionListener(new Command(Command.button_play,gameScr));          //定义按钮Level UP  
            Button level_up_b = new Button('提高级数');  
            level_up_b.setSize(new Dimension(50,200));  
            level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));          //定义按钮Level Down  
            Button level_down_b =new Button('降低级数');  
            level_down_b.setSize(new Dimension(50,200));  
            level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));          //定义按钮Level Pause 
            Button pause_b =new Button('游戏暂停');  
            pause_b.setSize(new Dimension(50,200));  
            pause_b.addActionListener(new Command(Command.button_pause,gameScr));          //定义按钮Quit  
            Button quit_b = new Button('退出游戏');  
            quit_b.setSize(new Dimension(50,200));  
            quit_b.addActionListener(new Command(Command.button_quit,gameScr));          controlScr.add(play_b);  
            controlScr.add(level_up_b);  
            controlScr.add(level_down_b);  
    controlScr.add(pause_b);  
            controlScr.add(quit_b);  
            setVisible(true);  
            gameScr.requestFocus();  
          }  
        }      //重写MyPanel类,使Panel的四周留空间  
    class MyPanel extends Panel{  
            public Insets getInsets(){  
                return new Insets(30,50,30,50);  
            }  
    }      //游戏画布类  
    class GameCanvas extends Canvas implements KeyListener{  
            final int unitSize = 30;                            //小方块边长  
            int rowNum;                                         //正方格的行数  
            int columnNum;                                      //正方格的列数  
            int maxAllowRowNum;                                 //允许有多少行未削  
            int blockInitRow;                                   //新出现块的起始行坐标  
            int blockInitCol;                                   //新出现块的起始列坐标  
            int [][] scrArr;                          //屏幕数组  
            Block b;                                            //对方快的引用          //画布类的构造方法  
            GameCanvas(){  
                rowNum = 15;  
                columnNum = 10;  
                maxAllowRowNum = rowNum - 2;  
                b = new Block(this);  
                blockInitRow = rowNum - 1;  
                blockInitCol = columnNum/2 - 2;  
                scrArr = new int [32][32];  
            }          //初始化屏幕,并将屏幕数组清零的方法  
            void initScr(){  
                for(int i=0;i                 for (int j=0; j                     scrArr[i][j]=0;  
                    b.reset();  
                    repaint();  
            }  //重新刷新画布方法  
            public void paint(Graphics g){  
                for(int i = 0; i < rowNum; i++)  
                    for(int j = 0; j < columnNum; j++)  
                        drawUnit(i,j,scrArr[i][j]);  
            }          //画方块的方法  
            public void drawUnit(int row,int col,int type){  
                scrArr[row][col] = type;  
                Graphics g = getGraphics();  
                switch(type){                                   //表示画方快的方法  
                    case 0: g.setColor(Color.black);break;      //以背景为颜色画  
                    case 1: g.setColor(Color.blue);break;       //画正在下落的方块  
                    case 2: g.setColor(Color.magenta);break;    //画已经落下的方法  
                }  
                g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);  
                g.dispose();  
            }          public Block getBlock(){  
                return b;                                       //返回block实例的引用  
            }          //返回屏幕数组中(row,col)位置的属性值  
            public int getScrArrXY(int row,int col){  
                if (row < 0  || row >= rowNum || col < 0 || col >= columnNum)  
                    return(-1);  
                else  
                    return(scrArr[row][col]);  
            }          //返回新块的初始行坐标方法  
            public int getInitRow(){  
                return(blockInitRow);                           //返回新块的初始行坐标  
            }          //返回新块的初始列坐标方法  
            public int getInitCol(){  
                return(blockInitCol);                           //返回新块的初始列坐标  
            }  
      

  5.   

    //满行删除方法  
            void deleteFullLine(){  
                int full_line_num = 0;  
                int k = 0;  
                for (int i=0;i                 boolean isfull = true;                  L1:for(int j=0;j                     if(scrArr[i][j] == 0){  
                            k++;  
                            isfull = false;  
                            break L1;  
                            }  
                    if(isfull) full_line_num++;  
                    if(k!=0 && k-1!=i && !isfull)  
                        for(int j = 0; j < columnNum; j++){  
                            if (scrArr[i][j] == 0)  
                              drawUnit(k-1,j,0);  
                            else  
                              drawUnit(k-1,j,2);  
                            scrArr[k-1][j] = scrArr[i][j];  
                        }  
                }  
                for(int i = k-1 i < rowNum; i++){  
                    for(int j = 0; j < columnNum; j++){  
                        drawUnit(i,j,0);  
                        scrArr[i][j]=0;  
                    }  
                }  
                ERS_Block.score += full_line_num;  
                ERS_Block.scoreField.setText(''+ERS_Block.score);  
            }          //判断游戏是否结束方法  
            boolean isGameEnd(){  
                for (int col = 0  col                  if(scrArr[maxAllowRowNum][col] !=0)  
                        return true;  
                }  
                return false;  
            }          public void keyTyped(KeyEvent e){  
            }          public void keyReleased(KeyEvent e){  
            }          //处理键盘输入的方法  
            public void keyPressed(KeyEvent e){  
                if(!ERS_Block.isPlay)  
                    return;  
                switch(e.getKeyCode()){  
                    case KeyEvent.VK_DOWN:b.fallDown();break;  
                    case KeyEvent.VK_LEFT:b.leftMove();break;  
                    case KeyEvent.VK_RIGHT:b.rightMove();break;  
                    case KeyEvent.VK_SPACE:b.leftTurn();break;  
                }  
            }  
    }          //处理控制类  
    class Command implements ActionListener{  
    static final int button_play = 1;               //给按钮分配编号  
    static final int button_levelup = 2;  
    static final int button_leveldown = 3;  
    static final int button_quit = 4;  
    static final int button_pause = 5;  
    static boolean pause_resume = true; int curButton;                                  //当前按钮  
    GameCanvas scr;              //控制按钮类的构造方法  
    Command(int button,GameCanvas scr){  
    curButton = button;  
    this.scr=scr;  
    }              //按钮执行方法  
    public void actionPerformed (ActionEvent e){  
    switch(curButton){  
    case button_play:if(!ERS_Block.isPlay){  
    scr.initScr();  
    ERS_Block.isPlay = true;  
    ERS_Block.score  = 0;  
    ERS_Block.scoreField.setText('0');  
    ERS_Block.timer.resume();  
    }  
    scr.requestFocus();  
    break;  
    case button_levelup:if(ERS_Block.level < 10){  
    ERS_Block.level++;  
    ERS_Block.levelField.setText(''+ERS_Block.level);  
    ERS_Block.score = 0;  
    ERS_Block.scoreField.setText(''+ERS_Block.score);  
    }  
    scr.requestFocus();  
    break;  
    case button_leveldown:if(ERS_Block.level > 1){  
    ERS_Block.level--;  
    ERS_Block.levelField.setText(''+ERS_Block.level);  
    ERS_Block.score = 0;  
    ERS_Block.scoreField.setText(''+ERS_Block.score);  
    }  
    scr.requestFocus();  
    break;  
    case button_pause:if(pause_resume){ 
    ERS_Block.timer.suspend(); 
    pause_resume = false; 
    }else{ 
    ERS_Block.timer.resume(); 
    pause_resume = true; 

    scr.requestFocus();  
    break; 
    case button_quit:System.exit(0);  
    }  
    }  
    }              //方块类  
    class Block {  
    static int[][] pattern = {  
    {0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态  
    {0x04e0,0x0464,0x00e4,0x04c4},  
    {0x4620,0x6c00,0x4620,0x6c00},  
    {0x2640,0xc600,0x2640,0xc600},  
    {0x6220,0x1700,0x2230,0x0740},  
    {0x6440,0x0e20,0x44c0,0x8e00},  
    {0x0660,0x0660,0x0660,0x0660}  
    };  
    int blockType;                              //块的模式号(0-6)  
    int turnState;                              //块的翻转状态(0-3)  
    int blockState;                             //快的下落状态  
    int row,col;                                //块在画布上的坐标  
    GameCanvas scr;                  //块类的构造方法  
    Block(GameCanvas scr){  
    this.scr = scr;  
    blockType = (int)(Math.random() * 1000)%7;  
    turnState = (int)(Math.random() * 1000)%4;  
    blockState = 1;  
    row = scr.getInitRow();  
    col = scr.getInitCol();  
    }                  //重新初始化块,并显示新块  
    public void reset(){  
    blockType = (int)(Math.random() * 1000)%7;  
    turnState = (int)(Math.random() * 1000)%4;  
    blockState = 1;  
    row = scr.getInitRow();  
    col = scr.getInitCol();  
    dispBlock(1);  
    }                  //实现“块”翻转的方法  
    public void leftTurn(){  
    if(assertValid(blockType,(turnState + 1)%4,row,col)){  
    dispBlock(0);  
    turnState = (turnState + 1)%4;  
    dispBlock(1);  
    }  
    }                  //实现“块”的左移的方法  
    public void leftMove(){  
    if(assertValid(blockType,turnState,row,col-1)){  
    dispBlock(0);  
    col--;  
    dispBlock(1);  
    }  
    }                  //实现块的右移  
    public void rightMove(){  
    if(assertValid(blockType,turnState,row,col+1)){  
    dispBlock(0);  
    col++;  
    dispBlock(1);  
    }  
    }                  //实现块落下的操作的方法  
    public boolean fallDown(){  
    if(blockState == 2)  
    return(false);  
    if(assertValid(blockType,turnState,row-1,col)){  
    dispBlock(0);  
    row--;  
    dispBlock(1);  
    return(true);  
    }else{  
    blockState = 2;  
    dispBlock(2);  
    return(false);  
    }  
    }                  //判断是否正确的方法  
    boolean assertValid(int t,int s,int row,int col){  
    int k = 0x8000;  
    for(int i = 0; i < 4; i++){  
    for(int j = 0; j < 4; j++){  
    if((int)(pattern[t][s]&k) != 0){  
    int temp = scr.getScrArrXY(row-i,col+j);  
    if (temp<0||temp==2)  
    return false;  
    }  
    k = k >> 1;  
    }  
    }  
    return true;  
    }  //同步显示的方法  
    public synchronized void dispBlock(int s){  
    int k = 0x8000;  
    for (int i = 0; i < 4; i++){  
    for(int j = 0; j < 4; j++){  
    if(((int)pattern[blockType][turnState]&k) != 0){  
    scr.drawUnit(row-i,col+j,s);  
    }  
    k=k>>1;  
    }  
    }  
    }  
    }              //定时线程  
    class MyTimer extends Thread{  
    GameCanvas scr;  public MyTimer(GameCanvas scr){  
    this.scr = scr;  
    }  public void run(){  
    while(true){  
    try{  
    sleep((10-ERS_Block.level + 1)*100);  
    }  
    catch(InterruptedException e){}  
    if(!scr.getBlock().fallDown()){  
    scr.deleteFullLine();  
    if(scr.isGameEnd()){  
    ERS_Block.isPlay = false;  
    suspend();  
    }else 
    scr.getBlock().reset();  
    }  
    }  
    }  
    }  class WinListener extends WindowAdapter{  
    public void windowClosing (WindowEvent l){  
    System.exit(0);  
    }  
    } 如果在复制的时候出现时候,请仔细看看原代码,因为分行的原因,所以会复制错误的。