早上没有带电脑,手写了一部分代码,下午学校的ic共享空间开了,兴奋,立马赶过来学习了。
总算是完成了一个简易版的DotCom游戏,从头到尾的自己再走一遍吧。
分析流程,注意类,实力变量,行为的设置
游戏说明:
游戏中有三个虚拟的连续的战舰占位,需要用户猜测,每猜测一次进行相应的判断,直到用户将三个占位全部击倒。
需要两个类
一个类用来做事(就以游戏名命名SimpleDotCom),一个类用来测试(SimpleDotComGame)
伪码——做事的类中
功能:
1.初始化战舰状态void setLocation(int[] local);
2.根据用户的输入判断用户的击中状态String checkYourself(String guess);
实例变量:
战舰位置locationCell数组
用户击中三次numOfHits整数=0;
method:
收到用户输入的数字(转换成可以用的int)
遍历所储存的战舰位置
如果用户输入击中 (在战舰存储位置中找到了)hits
如果沉船(用户击中三次numOfhits==3)sink
如果用户没有击中miss
返回相应的结果result(创造局部变量)
做事类的测试类
(用来测试做事类的准确性)
功能:创建做事类的实例,直接赋值初始化,直接赋值得到结果和预想的结果比较,如果是对的passed,错的failed
main()的伪码
功能:初始化战舰状态
(控制猜测-判断-继续或者结束的流程)
让用户输入所猜数字,并记录猜测次数
判断数字所对应结果
根据结果判断是否应该继续
结束之后输出用户的猜测次数
局部变量
战舰的位置(用随机数生成)int[] locals;
用户猜测数字String guess(循环中专用)
数字对应的结果String result(循环中专用)
判断状态boolean isAlive
用户猜测次数int numOfGuess
过程中
初始化战舰状态(实例化SimpleDotCom,随机生成0-4中的一个数字,setLocationCells)
(控制猜测-判断-继续或者结束的流程)
让用户输入所猜数字,helper类的方法得到int guess
并记录猜测次数numOfGuess++
判断数字所对应结果String result=SimpleDotCom.checkYourself(guess)
根据结果判断是否应该继续(如果result是sink就退出 用isAlive来控制while循环)
结束之后输出用户的猜测次数(直接输出)
实现代码(依据伪码来实现)
做事类
public class SimpleDotCom
{ int[] locationCell;
int numOfHits=0;void setLocation(int[] local)
{
locationCell=local;
}
String checkYourself(String userGuess)
{
int guess=Integer.parseInt(userGuess);
String result="miss";
for (int cell :locationCell)
{
if(guess==cell)
{
numOfHits++;
result="hits";
break;}
}
if(numOfHits==3)
result="sink";
return result;
}//checkYourself结束}//SimpleDotCom类结束
测试类
public class SimpleDotComTestDrive
{
public static void main(String[] args)
{
int[]locals={2,3,4};
String userGuess="2";
String testResult="failed";
SimpleDotCom dot=new SimpleDotCom();
dot.setLocation(locals);
String result=checkYourself(userGuess);
if(result.equals("hits"))
{
testResult="passed";
}
System.out.println(testResult);
}
}//SimpleDotComTestDrive类结束
main()方法的实现(辅助类就不实现了,功能就是获得用户输入并且可以抛出异常)
public class SimpleDotComGame
{
public static void main(String[] args)
{
GameHelper helper=new GameHelper();
boolean isAlive=true;
int numOfGuess=0;
SimpleDotCom dot new SimpleDotCom();
int randomNum=(int)(Math.random()*5);
int[] locals={randomNum,randomNum+1,randomNum+2};
dot.setLocation(locals);while(isAlive)
{
String guess=helper.getUserInput("Enter your guess number:");
String result =checkYourself(guess);
numOfGuess++;
if (result.equals("sink"))
{
isAlive==false;
}
}//while循环结束
System.out.println("You took num of guess:"+numOfGuess);
}main()方法结束
}//SimpleDotComGame类结束
来一个本章总结吧
整个第五章就是一个大程序的集合,告诉我们怎么分析一个程序,用面对对象的思维,先分析流程,在流程中找到需要的类,实例变量,和行为。实现代码的过程要先写伪码,对于需要测试的类要写上测试码,测试码在编写之前也要写一定的伪码让逻辑线条清晰,让每一个部分要做的事情和功能明确。最后实现代码的过程就直接对照伪码即可实现。所以伪码可以说是重中之重。
下一章,如同第一章看到的那样,要用上java的api函数库。这些函数库不需要自己去实现,只要会运用即可。
下一章将会引入ArrayList类,与数组进行比较(是完全击败还是各有好处,在不同的情形下运用?);将原有的Dotcom游戏的bug进行改进,并且直接面对二维网络、三个战舰进行编程,又应该如何处理存储结构和算法呢?;怎么灵活运用java的3500个内置类呢?
由于时间关系,这次的学习活动可以将第一个点潜心修习完毕。