Head first java 第五章(一)
来源:互联网 发布:英雄无敌7mac 编辑:程序博客网 时间:2024/09/21 09:28
Dotcom游戏
实现一个战舰类的棋牌游戏
1.0 首先写出一个测试代码SimpleDotComTestDrive(该版本为最简易版本,无需输入)
public class SimpleDotComTestDrive { public static void main (String[] args){ SimpleDotCom dot = new SimpleDotCom(); //创建实例对象 int [] locations = {2,3,4}; //假设目标坐标 dot.setLocationCells(locations); //为实例对象设置坐标 String userGuess = "2"; //假设游戏者输入坐标2 String result = dot.checkYourself(userGuess); //使用checkYourself方法检查 }}
根据测试码可知运行该游戏后,输出为hit
真实码
public class SimpleDotCom { int [] locationCells; //目标数组 int numOfHits = 0; public void setLocationCells(int[] locs){ locationCells = locs; } public String checkYourself(String stringGuess){ int guess = Integer.parseInt(stringGuess); //Sting转换为int 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; }}
2.0 仍然保留SimpleDotCom类,删除SimpleDotComTestDrive类,另外加入SimpleDotComGame类,该类代码如下:
package game;public class SimpleDotComGame { public static void main (String[] args){ int numOfGuesses = 0; GameHelper helper = new GameHelper(); SimpleDotCom theDotCom = new SimpleDotCom(); int radomNum = (int) (Math.random()*5); int[] locations = {radomNum,radomNum+1,radomNum+2}; theDotCom.setLocationCells(locations); boolean isAlive = true; while (isAlive == true){ String guess = helper.getUserInput("你猜"); String result = theDotCom.checkYourself(guess); numOfGuesses++; if(result.equals("kill")){ isAlive = false; System.out.println("你猜了"+numOfGuesses); } }}}
以及GameHelper类:(该部分代码为copy,暂且不管)
package game;import java.io.*;import java.util.*;public class GameHelper { private static final String alphabet = "abcdefg"; private int gridLength = 7; private int gridSize = 49; private int [] grid = new int[gridSize]; private int comCount = 0; public String getUserInput(String prompt) { String inputLine = null; System.out.print(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.toLowerCase(); } public ArrayList<String> placeDotCom(int comSize) { // line 19 ArrayList<String> alphaCells = new ArrayList<String>(); String [] alphacoords = new String [comSize]; // holds 'f6' type coords String temp = null; // temporary String for concat int [] coords = new int[comSize]; // current candidate coords int attempts = 0; // current attempts counter boolean success = false; // flag = found a good location ? int location = 0; // current starting location comCount++; // nth dot com to place int incr = 1; // set horizontal increment if ((comCount % 2) == 1) { // if odd dot com (place vertically) incr = gridLength; // set vertical increment } while ( !success & attempts++ < 200 ) { // main search loop (32) location = (int) (Math.random() * gridSize); // get random starting point //System.out.print(" try " + location); int x = 0; // nth position in dotcom to place success = true; // assume success while (success && x < comSize) { // look for adjacent unused spots if (grid[location] == 0) { // if not already used coords[x++] = location; // save location location += incr; // try 'next' adjacent if (location >= gridSize){ // out of bounds - 'bottom' success = false; // failure } if (x>0 & (location % gridLength == 0)) { // out of bounds - right edge success = false; // failure } } else { // found already used location // System.out.print(" used " + location); success = false; // failure } } } // end while int x = 0; // turn good location into alpha coords int row = 0; int column = 0; // System.out.println("\n"); while (x < comSize) { grid[coords[x]] = 1; // mark master grid pts. as 'used' row = (int) (coords[x] / gridLength); // get row value column = coords[x] % gridLength; // get numeric column value temp = String.valueOf(alphabet.charAt(column)); // convert to alpha alphaCells.add(temp.concat(Integer.toString(row))); x++; // System.out.print(" coord "+x+" = " + alphaCells.get(x-1)); } // System.out.println("\n"); return alphaCells; }}
结果为该次改动能够实现输入的读取,进行互动化;
然而存在不足,为当命中目标后再次猜测统一坐标仍然有效,需要再改。
3.0
0 0
- Head first java 第五章(一)
- Head first java 第五章(二)
- 记录-Head first java-第五章
- JAVA Head First 第五章 编写程序
- head first python第五章
- Head First SQL 第五章
- Head First Python(第五章)
- Head First Java 一 二章
- Head First Java读书笔记 (一)
- Head First Java笔记(一)
- 《Head First JAVA》学习笔记(一)
- Head First Java 总结(一)
- <Head First Java>学习笔记--第五章:编写程序
- Head First Java第二章
- Head First设计模式C++实现--第五章:单件(Singleton)模式
- 【阅读】《Head First Javascript》第五章——循环
- 【PMP】Head First PMP 学习笔记 第五章 范围管理
- 单件模式-《Head First 设计模式》第五章
- python安装之后,创建快捷方式
- Android 一张高清图,几行代码解决所有屏幕适配
- 图论复习
- 计算机网络五层协议——TCP协议实例图解
- Java匿名内部类
- Head first java 第五章(一)
- 图像拼接(六):OpenCV单应变换模型拼接两幅图像
- android怎么重新加载List
- 解决注册表 error while deleting key 方法之一
- 设置启动界面、界面间跳转、intent初步接触
- Harr特征描述子代码实现
- Ubuntu 14.04 上安装 CUDA 7.5/8.0 超详细教程
- 如何让浏览器访问最新的js、css等外部引用文件?
- 判断一个BigDecimal数值是否为零