A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© samove 中级黑马   /  2015-6-28 16:54  /  4031 人查看  /  76 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;

  2. /*
  3. 1        2        3
  4. 4        5        6
  5. 7        8

  6. 1        2        3
  7. 4        5        6
  8. 7        8

  9. ■■■■■■■                6        =7*1-1        // 7列,5行               
  10. ■1■2■3■                13        =7*2-1                8        10        12                0        1        2
  11. ■4■5■6■                20        =7*3-1                15        17        19                3        4        5
  12. ■7■8■ ■                27        =7*4-1                22        24        26                6        7        8
  13. ■■■■■■■                34        =7*5-1

  14. 用一个数组定义9个位置,通过WASD进行空白的移动。

  15. */

  16. class YouXi
  17. {
  18.         public static void main (String[] args)
  19.         {
  20.                 GamePingTu gg=new GamePingTu ();
  21.                 gg.run();
  22.         }
  23. }

  24. class GamePingTu
  25. {
  26.         private int [] arr =new int [9];
  27.         private int [] arrV={1,2,3,4,5,6,7,8,0};        //目标数组,如果变化数组与目标数组内值对应都相同则win。
  28.         String str = "  ";                        //将数组输出为0的位置替换为空白。
  29.         boolean xunHuan = true;

  30.         {
  31.                 Random r = new Random();
  32.                 arr[0]=r.nextInt(9);                        //先产生第一个随机数,到数组第一位置。
  33.                
  34.                 for (int i =1;i<9 ;i++ )        //通过一个for产生随机数。
  35.                 {
  36.                         do
  37.                         {
  38.                                 arr[i]=r.nextInt(9);               
  39.                                 for (int ii=0;ii<i ;ii++ )                //判断产生随机数如果与前面数相同,则xunHuan=true,进入循环,重新生成数。
  40.                                 {
  41.                                         if (arr[i]==arr[ii])
  42.                                         {
  43.                                                 arr[i]=r.nextInt(9);
  44.                                                 xunHuan=true;
  45.                                                 ii=i;
  46.                                         }
  47.                                         else
  48.                                                 xunHuan=false;
  49.                                 }
  50.                         }
  51.                         while (xunHuan);                //判断产生随机数如果与前面数相同,则xunHuan=true,进入循环,重新生成数。
  52.                 }

  53.                 defaultPrint();
  54.         }

  55.         public void run()                //运行函数
  56.         {
  57.                 Scanner in =new Scanner (System.in);
  58.                 System.out.println("请输入w,a,s,d(必须小写)按规则游戏。");
  59.                 String ss =in.nextLine();
  60.                 caseSS(ss);

  61.                 while (win())
  62.                 {
  63.                         ss=in.nextLine();
  64.                         caseSS(ss);
  65.                 }

  66.                 System.out.println("恭喜过关");

  67.         }

  68.         private boolean win()                       
  69.                 //对游戏win的判断:游戏运行数组与目标(V)数组,对应位置数值有任一不相等,返回True,对应位置值都相等,则返回false.
  70.         {
  71.                 for (int i=0;i<9 ;i++ )
  72.                 {
  73.                         if (arr[i]!=arrV[i])
  74.                                 return true;
  75.                 }

  76.                 return false;
  77.         }

  78.         private void caseSS(String ss)                //对输入的 ss (String类型),进行Switch选择,对应调用动作函数。
  79.         {
  80.                 switch (ss)
  81.                 {
  82.                 case "s":
  83.                         upW();
  84.                         defaultPrint();
  85.                         break;
  86.                 case "d":
  87.                         leftA();
  88.                         defaultPrint();
  89.                         break;
  90.                 case "w":
  91.                         downS();
  92.                         defaultPrint();
  93.                         break;
  94.                 case "a":
  95.                         rightD();
  96.                         defaultPrint();
  97.                         break;
  98.                 default:
  99.                         defaultPrint();
  100.                         break;
  101.                 }
  102.                 return;
  103.         }

  104.         private void upW()                // 值为0对应角标数值的与对应角标正上面数值换位。
  105.         {
  106.                 if(arr[0]!=0 && arr[1]!=0 && arr[2]!=0)
  107.                         swap(arr,getIndex0(),getIndex0()-3);
  108.                
  109.                 return;
  110.                        
  111.         }

  112.         private void leftA()
  113.         {
  114.                 if(arr[0]!=0 && arr[3]!=0 && arr[6]!=0)
  115.                         swap(arr,getIndex0(),getIndex0()-1);
  116.        
  117.                 return;
  118.         }
  119.        
  120.         private void downS()
  121.         {
  122.                 if(arr[6]!=0 && arr[7]!=0 && arr[8]!=0)
  123.                         swap(arr,getIndex0(),getIndex0()+3);
  124.                
  125.                 return;
  126.         }

  127.         private void rightD()
  128.         {
  129.                 if(arr[2]!=0 && arr[5]!=0 && arr[8]!=0)
  130.                         swap(arr,getIndex0(),getIndex0()+1);
  131.                
  132.                 return;
  133.         }

  134.         private void setArr(int [] arr,int a,int b )
  135.         {
  136.                
  137.         }

  138.         private int getIndex0()
  139.         {
  140.                 for (int i = 0;i<arr.length ;i++ )
  141.                 {
  142.                         if (arr[i]==0)
  143.                         {
  144.                                 return i;
  145.                         }
  146.                 }
  147.                 return 0;
  148.         }

  149.         private void swap(int [] arr,int a,int b)
  150.         {
  151.                 int temp =arr[a] ;
  152.                 arr[a]=arr[b];
  153.                 arr[b]=temp;

  154.                 return;
  155.         }

  156.         //默认输出:
  157.         private void defaultPrint()
  158.         {
  159.                 for (int i=0,ii=1,iii=0;i<35 ;i++ )                        // 5行,7列 定义到一起0~35
  160.                 {
  161. /*                        if(arr[iii]==0){
  162.                                 System.out.print("■"+str);
  163.                                 i++;
  164.                                 iii++;}
  165.                         else
  166.                         {        */
  167.                         switch (i)
  168.                         {
  169.                                 case 8:
  170.                                 case 10:
  171.                                 case 12:
  172.                                 case 15:
  173.                                 case 17:
  174.                                 case 19:
  175.                                 case 22:
  176.                                 case 24:
  177.                                 {
  178.                                         if (arr[iii]==0)
  179.                                                 System.out.print(str);
  180.                                         else
  181.                                                 System.out.print(arr[iii]+""+arr[iii]);
  182.                                         iii++;
  183.                                         break;
  184.                                 }
  185.                                 case 26:
  186.                                         if (arr[iii]==0)
  187.                                                 System.out.print(str);
  188.                                         else
  189.                                                 System.out.print(arr[iii]+""+arr[iii]);
  190.                                         iii=0;
  191.                                         break;
  192.                                 default:
  193.                                 {
  194.                                         if (i!=(7*ii-1))
  195.                                         {       
  196.                                                 System.out.print("■");
  197.                                                
  198.                                         }
  199.                                         else
  200.                                         {       
  201.                                                 System.out.println("■");
  202.                                                 ii++;
  203.                                         }
  204.                                         break;
  205.                                 }
  206.                         }//}
  207.                 }
  208.                 return;
  209.         }
  210. }
复制代码

总是喜欢倒腾一点小东西,只是才疏学浅,要黑马发掘自己无限牛X的潜力,我爱编程,我爱黑马,我要做程序猿。




点评

补一个链接 ↓ ↓ ↓ ↓ ↓ 这是在这个游戏基础上写的另一个游戏:扫雷 http://bbs.itheima.com/thread-209205-1-1.html (出处: 黑马程序员IT技术论坛)  发表于 2015-7-6 21:45

评分

参与人数 1黑马币 +2 收起 理由
1014914737 + 2 很给力!

查看全部评分

76 个回复

倒序浏览
程序猿大哥,写的真好!!!!!1
回复 使用道具 举报 1 0
  1. while (!win())
  2.                 {
  3.                         ss=in.nextLine();
  4.                         caseSS(ss);
  5.                 }

  6.                 System.out.println("恭喜过关");

  7.         }

  8.         private boolean win()                        
  9.                 //对游戏win的判断:游戏运行数组与目标(V)数组,对应位置数值有任一不相等,返回false,对应位置值都相等,则返回true.
  10.         {
  11.                 for (int i=0;i<9 ;i++ )
  12.                 {
  13.                         if (arr[i]!=arrV[i])
  14.                                 return false;
  15.                 }

  16.                 return true;
  17.         }
复制代码


我喜欢这样.. win的true就是赢了,false就是还没赢
回复 使用道具 举报
好多代码。。。
回复 使用道具 举报
很给力!!!!
回复 使用道具 举报
不错,加油
回复 使用道具 举报
不错,很给力了
回复 使用道具 举报
有点牛!!
回复 使用道具 举报
厉害 给力。。。
回复 使用道具 举报
五天,厉害啊
回复 使用道具 举报
学习一下 我的基础第五天还是很初级水平
回复 使用道具 举报
给力,赞
回复 使用道具 举报
这是什么鬼
回复 使用道具 举报
牛逼。。。。。。。。。
回复 使用道具 举报
学了五天,自己写出一个游戏,可以说是大神了
回复 使用道具 举报
楼主 随机数那可以优化一点
  1. int n = 9;
  2.                 int[] randoms = new int[n];
  3.                 boolean[] bool = new boolean[n];
  4.                 Random rand = new Random();

  5.                 for(int i=0; i<n; i++)
  6.                 {
  7.                         do{
  8.                                 randoms[i]=rand.nextInt(n);
  9.                         }while(bool[randoms[i]]);
  10.                        
  11.                         bool[randoms[i]]=true;
  12.                 }
复制代码
回复 使用道具 举报
我擦!牛B啊。
回复 使用道具 举报
好厉害~{:2_41:}
回复 使用道具 举报
其实很想看看游戏界面啊。
回复 使用道具 举报
膜拜中!!!!!!!!!!
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马