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

© samove 中级黑马   /  2015-6-28 16:54  /  4742 人查看  /  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的潜力,我爱编程,我爱黑马,我要做程序猿。




评分

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

查看全部评分

76 个回复

正序浏览
学了5天......我简直要羞愧自尽了...................
回复 使用道具 举报
学习了, 这个 看完,我也有点灵感了,
回复 使用道具 举报
轮子哥 为什么到你这我都感觉世界真是看本身不看长相啊
回复 使用道具 举报
这个必须赞  
回复 使用道具 举报
程序猿了,哈哈
回复 使用道具 举报
不错啊  黑马的 大神就是多  
回复 使用道具 举报
给力呀,自己学得不少,但还没像楼主去付诸实践啊!惭愧
回复 使用道具 举报
samove 发表于 2015-7-6 21:42
java基础班,虽然不是计算机专业毕业的,但大学都有一门计算机语言必修吧,当年也过了国家二级,稍微还记 ...

我们今天才学习了scanner,我在看看代码!
回复 使用道具 举报
很不错啊,5天就这么牛了
回复 使用道具 举报
niuniu123456 发表于 2015-7-6 21:35
好厉害啊!我都学了三天了,感觉还是不能做什么?你学的什么?能告诉我一些小窍门吗? ...

java基础班,虽然不是计算机专业毕业的,但大学都有一门计算机语言必修吧,当年也过了国家二级,稍微还记得一点  if,while,的原理,然后就是逻辑思维了。其实这个小游戏也不难,只是写之前要有思路,有思路就都好写,前五天的知识加自学一个scanner和random两个东东,就能写了。
小窍门也没什么:就写东西之前,要有思路吧,有思路,代码就自然出来了。
回复 使用道具 举报
太牛叉了,努力学习,追~~~~
回复 使用道具 举报
好厉害啊!我都学了三天了,感觉还是不能做什么?你学的什么?能告诉我一些小窍门吗?
回复 使用道具 举报
5天你就吹把
回复 使用道具 举报
5天???算你狠啊
回复 使用道具 举报
firwood 发表于 2015-7-6 21:07
游戏写的很好,码一会儿代码,然后玩玩小游戏,放松一下。

其实我以写这种游戏为娱乐。
回复 使用道具 举报
学了五天就有这水平了,自行惭秽啊
回复 使用道具 举报
加多宝 发表于 2015-7-6 18:27
自己制作的小游戏,能玩么

复制代码到记事本,有java运行环境就能玩了。
回复 使用道具 举报
游戏写的很好,码一会儿代码,然后玩玩小游戏,放松一下。
回复 使用道具 举报
也只能膜拜了::funk:
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马