asp.net网站开发项目源码,大连建设网官网首页,.net网站开发过程,公司怎么做网站5.1 创建战舰游戏
创建一个类似战舰的游戏#xff1a;攻击网站
有一种棋盘类的战舰游戏#xff0c;目标是要猜测对方战舰的坐标#xff0c;然后轮流开炮攻击#xff0c;命中数发就可以打沉对方的战舰。不过我们不喜欢战争#xff0c;只要打垮这些达康公司就好(因为与商业…5.1 创建战舰游戏
创建一个类似战舰的游戏攻击网站
有一种棋盘类的战舰游戏目标是要猜测对方战舰的坐标然后轮流开炮攻击命中数发就可以打沉对方的战舰。不过我们不喜欢战争只要打垮这些达康公司就好(因为与商业行为有关如此一来本书就可以归类在经营企管的费用上)。
游戏目标以最少的猜测次数打掉计算机所安排的达康公司Dot Com网站。计算机会根据你的表现来评分。
初始设置程序启动后计算机会在虚拟的7×7方格上安排3个达康网站。安排完成后游戏会要求你开始猜坐标。
进行游戏因为我们还没有学到图形接口的程序设计所以这一版会在命令栏上进行。计算机会提示你输入所猜测的位格子你会输入“A3”或“C5”等。计算机会反馈给你命中“Hit”没中“Miss”或击沉“Sunk”等回应。当你清光所有的达康时游戏会列出你的分数并结束。 首先进行高层设计
游戏流程
1.玩家启动游戏
A.计算机创建3个达康网站
B.将此3个达康网站停在虚拟机战场上
2.游戏开始
重复下面的操作直到所有达康网站被歼灭为止
A.提示玩家输入坐标
B.检查是否击中、没中或击沉。若命中就删除格子击沉就删除达康网站
3.游戏结束
根据猜测次数给分 5.2 简单版
攻击网站游戏 简单的开始
1.游戏启动 创建单一的DotCom并指定3个各自在共7格的横列中的位置。相对于使用“A2的表示法现在的为止只需要数字就可以。 2.开始游戏 提示玩家猜测然后检查是否名中国DotCom的格子。若是则递增numOfHits变量的值。
3.游戏结束 3格都命中时游戏结束当numOfHits的值递增到3并告诉玩家他们花了多少次才干掉这个DotCom
看起来我们至少需要两个类Game类和DotCom类。但在我们着手开发完整功能版之前先从一个简单版本开始。简单版称为“Simple Dot Com Game”。这一章会创建出此版本下一章会进行豪华版的开发工作。该版本的东西都比较简单。相对于二维方阵我们只使用横列并且只设定一家达康公司。然而游戏的目标仍然相同因此游戏还是会需要做出DotCom的实例将它指派在横列上取得玩家的输入并在所有的DotCom格子被命中时结束游戏。这个简单版能够作为豪华版的踏脚石。
在这个简单版中Game这个类没有实例变量且所有的程序代码都在main()中。也就是说程序启动执行main()只会做出一个DotCom的实例挑出一个位置来放3个连续的格子要 求玩家猜测检查是否命中重复这些步骤直到3格都被命中为止。
要知道虚拟的横列是虚拟的。换言之它并没有出现在程序中只要玩家与计算机都知道有3个连续的格子会出现在7格的横列中就好横列并不一定要表现在程序代码中。你也许会想要用有7个int的数组来代表横列并用其中3个元素代表达康出现的位置但其实不需这么做。我们只需要3个元素的数组来代表DotCom占据的位置。 开发类
身为一个程序员你或许会有编写程序的方法论methodology/过程process/步骤approach。我们的顺序设计是先通过编写程序来帮助你了解和学习我们的想法并不需要遵循我们实际上怎样写程序的方式。当然啦实际工作时你会遵循个人、项目或客户的规范。但我们完全是依照我们自己的想法去做的。当我们在创建Java的类以当作“学习经验”时程序会像下面这样口 找出类应该做的事情。 口 列出实例变量和方法。 口 编写方法的伪码稍后说明。 口编写方法的测试用程序。 口 实现类。 口 测试方法。 口 除错或重新设计。 口 邀请辣妹参加庆功派对没有成功过
我们会让每个类写出下列的事物 伪码能帮助你专注于逻辑而不需要顾虑到程序语法
测试码测试用的程序代码
真实码实际设计出的真正Java程序代码 5.3 编写伪码 伪码是介于真正的Java程序与正常英语之间的语言大致上包括3部分实例变量的声明、方法的声明和方法的逻辑。其中最重要的是方法的逻辑因为它会定义出会发生“什么事” 编写方法的实现部分 开始编写真正可用的方法程序代码 在我们开始编写方法之前让我们先退回一步来写出测试方法用的程序代码。没错我们会在有东西可以测试前就先写出测试用的部分 先编写测试用程序代码的概念来自于极限编程XP方法论这样做会让你能够更容易与更快地写出程序代码。我们并不强制采用极限编程XP但觉得这个概念真的很不错并且极限编程XP听起来也很酷。
5.4 测试
为SimpleDotCom编写测试码
我们需要写出能够创建SimpleDotCom对象并加以测试的程序代码。对SimpleDotCom这个类来说我们真正在意的只有checkYourselft()方法然而我们还要实现出setLocationCells()方法以便让checkYourself()方法能够正确地执行。 先来看下面checkYourself()方法这个方法的伪码setLocationCells()是个用手肘想也知道的setter所以我们不用花太多时间去关心但真正的应用程序会需要更稳固的setter此时就会需要加以测试。 然后自问如果checkYourself()方法已经写好的话我要用什么样的测试码才能证明这个方法能够正确地运行
应该要测试的部分 1 SimpleDotCom对象的初始化。 2赋值位置带有3个int的数组像是{234}。 3创建代表玩家猜设的字符串“2”或“0”等 4传入伪造的玩家猜测来叫用checkYourself()方法。 5列出结果以观察是否正确。 5.5 编写程序
SimpleDotCom的测试码
public class SimpleDotComTestDrive {public static void main(String[] args) {SimpleDotCom dot new SimpleDotCom();int[] locations {2, 3, 4};dot.setLocationCells(locations);String userGuess 2;String result dot.checkYourself(userGuess);String testResult failed;if (result.euquals(hit)) {testResult psssed;}System.out.println(testResult);}
}checkYourself()方法 public String checkYourself(String stringGuess) {int guess Integer.parseInt(stringGuess);String result miss;for (int cell : locationCells) {if (guess cell) {result hit;numOfHits;break;}}if (numOfHits locationCells.length) {result kill;}System.out.println(result);return result;}
5.6 完成版
SimpleDotCom与SimpleDotComTester的最终版本
public class SimpleDotComTestDrive {public static void main(String[] args) {SimpleDotCom dot new SimpleDotCom();int[] locations {2, 3, 4};dot.setLocationCells(locations);String userGuess 2;String result dot.checkYourself(userGuess);}
}SimpleDotComGame类的伪码 游戏的main()方法 public static void main(String[] args) {int numOfGuesses 0;GameHelper helper new GameHelper();SimpleDotCom theDotCom new SimpleDotCom();int randomNum (int) (Math.random() * 5);int[] locations {randomNum, randomNum1, randomNum2};theDotCom.setLocationCells(locations);boolean isAlive true;while (isAlive true) {String guess helper.getUserInput(enter a number);String result theDotCom.checkYourself(guess);numOfGuesses;if (result.equals(kill)) {isAlive false;System.out.println(You took numOfGuesses guesses);}}}
}5.7 用Math.random()产生随机数
radom()与getUserInput()
1.产生随机数 2.取得玩家输入 5.8 预先输入好的程序
最后一个类GameHelper
public class GameHelper {public String getUserInput(String prompt) {String inputLine null;System.out.println(prompt );try {BufferedReader is new BufferedReader(new InputStreamReader(System.in));inputLine is.readLine();if (inputLine.length() 0) return null;} catch (IOException e) {System.out.println(IOException: e);}return inputLine;}
}5.9 循环
关于for循环
基本非加强版的for循环 第一段初始化
第二段boolean测试true或false
第三段重复表达式
基本同C语言
循环之旅
前置与后置的递增/递减操作符 -- 同C语言
while循环同C语言
加强版的for循环
从Java 5.0Tiger开始Java语言就有称为加强版的for循环它能够很容易地逐个 运行数组或其他集合collection的元素。下一章会讨论其他类型的集合。这 是个很好的强化功能因为这是for循环很常见的用途。我们会在讨论非数组的集合 时再次看到加强版的for循环。 上面这行程序以中文来说就是“对nameArray中的每个元素执行一次”而编译器会这么认为 1创建名称为name的String变量。 2将nameArray的第一个元素值赋给name。 3执行重复的内容。 4赋值给下一个元素name。 5重复执行至所有元素都被运行为止。
第一段声明循环变量
使用这个部分来声明与初始化用在循环内容的变量。循环过程中此变量所携带的值会有所不同。此变量的类型必须要与数组元素匹配。
第二段要运行的集合
这必须是对数组或其他集合的引用
5.10 类型转换
转换primitive主数据类型
我们在第3章讨论过各种primitive主数据类型的大小以及小杯子无法装载大杯子的内容物的内容 long y 42; int x y; // 不能通过编译
long比int大且编译器无法确定long的内容是否可以截掉。若要强制编译器装你可以使用cast运算符。 long y 42; int x (int) y;前置的类型转换会告诉编译器要将y的值裁剪成int的大小来赋值给x但这个值可能会很诡异(见附录B) long y 40002; short x(short) y;// x的值会是-25534
重点是这样可以通过编译程序。假如说你要取浮点数的整数值 float f 3.14f; int x (int) f; // x的值会是3 5.11 用Integer.parseInt()转换字符串
若要解决这类问题我们必须要把String的“2”转换成int的2。Java内置有Integer这个类它有一个方法能够将String所表示的数字转换成实际的数目