黑马程序员技术交流社区

标题: 学了五天,写的一个小游戏 [打印本页]

作者: samove    时间: 2015-6-28 16:54
标题: 学了五天,写的一个小游戏
  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的潜力,我爱编程,我爱黑马,我要做程序猿。





作者: 1014914737    时间: 2015-6-28 16:58
程序猿大哥,写的真好!!!!!1
作者: kirsting    时间: 2015-6-28 17:47
  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就是还没赢
作者: 爱李萝卜    时间: 2015-6-28 18:05
好多代码。。。
作者: 我要当大牛    时间: 2015-6-28 18:22
很给力!!!!
作者: 飘影    时间: 2015-6-28 19:18
不错,加油
作者: SouthKai    时间: 2015-6-28 19:22
不错,很给力了
作者: very爱    时间: 2015-6-28 23:30
有点牛!!
作者: 空城dream    时间: 2015-6-28 23:40
厉害 给力。。。
作者: 蓦然回首3Y    时间: 2015-6-29 07:21
五天,厉害啊
作者: fmi110    时间: 2015-6-29 09:11
学习一下 我的基础第五天还是很初级水平
作者: zzy1990    时间: 2015-6-29 09:22
给力,赞
作者: asinzuo    时间: 2015-6-29 09:42
这是什么鬼
作者: 黑马无敌    时间: 2015-6-29 09:53
牛逼。。。。。。。。。
作者: 1958078929    时间: 2015-6-29 10:02
学了五天,自己写出一个游戏,可以说是大神了
作者: guiqulaixi    时间: 2015-6-29 10:27
楼主 随机数那可以优化一点
  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.                 }
复制代码

作者: 改变    时间: 2015-6-29 11:39
我擦!牛B啊。
作者: hgr3306    时间: 2015-6-29 12:32
好厉害~{:2_41:}
作者: fantianfei    时间: 2015-6-29 13:11
其实很想看看游戏界面啊。
作者: weiwei1    时间: 2015-6-29 18:04
膜拜中!!!!!!!!!!
作者: 一口老郭    时间: 2015-6-29 18:09
牛 B!楼主这么厉害
作者: 357955778    时间: 2015-6-29 19:29
有想法!
作者: 琼琼~    时间: 2015-6-29 20:10
学习学习,学了半个月看你程序都很费劲。。。
作者: JJJD    时间: 2015-6-29 20:24
太厉害啦!
作者: iyi    时间: 2015-6-29 20:41
游戏是什么效果啊
作者: xxpotato    时间: 2015-6-29 21:35
厉害,大神级别的啊
作者: 十五号的人生    时间: 2015-6-29 21:38
祝早日成为大牛
作者: Overheat    时间: 2015-6-29 21:39
给力啊!!
作者: Dean_Tian    时间: 2015-6-29 22:05
感觉叼叼的啊~~
作者: 崔司龙    时间: 2015-6-29 22:36
看起来很厉害的样子,,,,,,,,,,,,
作者: tinibuzhi    时间: 2015-6-29 23:06
厉害啊                 
作者: 汪磊の    时间: 2015-6-29 23:13
顶大神啊~~
作者: GiveUp    时间: 2015-6-29 23:16
好高端的样子
作者: zhand    时间: 2015-6-29 23:38
我都学七天了 却看不懂代码 !差距啊~
作者: 王冲6060    时间: 2015-6-29 23:38
不错 ,加油
作者: tream    时间: 2015-6-30 00:11
很强大呀
作者: 张朝阳    时间: 2015-6-30 00:31
不错,挺赞
作者: Z·H    时间: 2015-6-30 00:34
好长的代码啊
作者: bingo54    时间: 2015-6-30 00:38
好像很厉害的样子
膜拜中!!!!!!!!!!
作者: 1014914737    时间: 2015-6-30 21:59
“总是喜欢倒腾一点小东西,只是才疏学浅”!!!!!
作者: samove    时间: 2015-6-30 22:00
kirsting 发表于 2015-6-28 17:47
我喜欢这样.. win的true就是赢了,false就是还没赢

谢谢指点。
作者: 呵呵君    时间: 2015-6-30 22:00
很厉害的说.
作者: 夜空中最亮的星    时间: 2015-6-30 22:01
厉害,加油!
作者: samove    时间: 2015-6-30 22:03
guiqulaixi 发表于 2015-6-29 10:27
楼主 随机数那可以优化一点

谢谢,学习了!:victory:
作者: 牧师1990    时间: 2015-6-30 22:11
必须顶一个!
作者: tangpeng    时间: 2015-6-30 22:12
写得太好了,虽然看不懂,也要赞个。。。
作者: jk2015    时间: 2015-6-30 22:28
真是谦虚!
作者: Chasel    时间: 2015-6-30 22:32
不错,come on !
作者: samove    时间: 2015-7-5 20:57
fantianfei 发表于 2015-6-29 13:11
其实很想看看游戏界面啊。

可以直接复制代码运行的。
作者: 加多宝    时间: 2015-7-6 18:27
自己制作的小游戏,能玩么
作者: 992791011    时间: 2015-7-6 18:41
牛B,我服了,只是我纳闷,你哪来那么多时间来搞这些玩意儿
作者: life木子飞    时间: 2015-7-6 18:54
也只能膜拜了::funk:
作者: firwood    时间: 2015-7-6 21:07
游戏写的很好,码一会儿代码,然后玩玩小游戏,放松一下。
作者: samove    时间: 2015-7-6 21:17
加多宝 发表于 2015-7-6 18:27
自己制作的小游戏,能玩么

复制代码到记事本,有java运行环境就能玩了。
作者: linjian931219    时间: 2015-7-6 21:18
学了五天就有这水平了,自行惭秽啊
作者: samove    时间: 2015-7-6 21:18
firwood 发表于 2015-7-6 21:07
游戏写的很好,码一会儿代码,然后玩玩小游戏,放松一下。

其实我以写这种游戏为娱乐。
作者: threeforPP    时间: 2015-7-6 21:23
5天???算你狠啊
作者: 胡家兵    时间: 2015-7-6 21:25
5天你就吹把
作者: niuniu123456    时间: 2015-7-6 21:35
好厉害啊!我都学了三天了,感觉还是不能做什么?你学的什么?能告诉我一些小窍门吗?
作者: home7192    时间: 2015-7-6 21:37
太牛叉了,努力学习,追~~~~
作者: samove    时间: 2015-7-6 21:42
niuniu123456 发表于 2015-7-6 21:35
好厉害啊!我都学了三天了,感觉还是不能做什么?你学的什么?能告诉我一些小窍门吗? ...

java基础班,虽然不是计算机专业毕业的,但大学都有一门计算机语言必修吧,当年也过了国家二级,稍微还记得一点  if,while,的原理,然后就是逻辑思维了。其实这个小游戏也不难,只是写之前要有思路,有思路就都好写,前五天的知识加自学一个scanner和random两个东东,就能写了。
小窍门也没什么:就写东西之前,要有思路吧,有思路,代码就自然出来了。
作者: 半山岩    时间: 2015-7-6 21:42
很不错啊,5天就这么牛了
作者: niuniu123456    时间: 2015-7-6 21:45
samove 发表于 2015-7-6 21:42
java基础班,虽然不是计算机专业毕业的,但大学都有一门计算机语言必修吧,当年也过了国家二级,稍微还记 ...

我们今天才学习了scanner,我在看看代码!
作者: 李玉    时间: 2015-7-6 22:09
给力呀,自己学得不少,但还没像楼主去付诸实践啊!惭愧
作者: 赵文斌    时间: 2015-7-6 22:12
不错啊  黑马的 大神就是多  
作者: heimayili    时间: 2015-7-6 22:19
程序猿了,哈哈
作者: maoczsd    时间: 2015-7-6 22:21
这个必须赞  
作者: maoczsd    时间: 2015-7-6 22:22
轮子哥 为什么到你这我都感觉世界真是看本身不看长相啊
作者: 如初见    时间: 2015-7-6 22:56
学习了, 这个 看完,我也有点灵感了,
作者: 慕容旺财    时间: 2015-7-6 23:58
学了5天......我简直要羞愧自尽了...................




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2