public static void main(String[] args) {
创新互联长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为乌什企业提供专业的做网站、成都网站制作,乌什网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
int[] indexs = new int[15];
int[] tourists = new int[30];
for (int i = 0; i tourists.length; i++) {
tourists[i] = 1;
}
// 30,9,15
for (int i = 0, j = 1, n = 0; n 15; i++) {
if (j == 9 tourists[i] != 0) {
tourists[i] = 0;// 将游客标记为下海
indexs[n] = i + 1;// 记录游客位置
n++;// 记录下海游客数量
j = 1;// 重开始计数
}
if (tourists[i] != 0) {// 如果数到的游客未被标记为下海,就计数
j++;
}
if (i == tourists.length - 1) {// 到达游客数组末尾,再从头开始。
i = -1;
}
}
System.out.println("被扔下大海的位置:");
for (int i = 0; i indexs.length; i++) {
System.out.print(indexs[i]+",");
}
}
思路?
可以把船写成一个类,储存坐标、方向和长度,坐标不是在屏幕上显示的位置,而是根据你的面板网格划分的位置,不过习惯上最好还是从左上角作为原点来数(毕竟java里所有的窗口面板和图形都是这样的)。
布局面板两个,一个你的一个别人的,在布局面板里添加摆放船的方法(比方说一个按钮,按下之后就在面板里添加一个小船,如果你的小船已经是从JComponent类里继承过来的,可以直接添加MouseMotionListener,拖动鼠标改变位置),摆放好了之后确认一下把船占据的所有格子的坐标都记录下来。
显示面板一个,最好自己新建一个类继承JPanel类,方便绘图,只要画网格就行了,其他什么都不用画出来,反正谁都看不见,自己布的局自己记住就好啦!在这里只需要记录目标坐标(就是对方的船在的位置)就行了,然后添加MouseListener判断点击位置,绘制不同的图像来表示是否击中。最后别忘了每一次点击后都要换一个判断对象(玩家)就行了
import java.util.ArrayList;
import java.util.List;
public class KillThree {
public static void main(String[] args) {
int m = (args==null || args.length 1)?5:Integer.parseInt(args[0]);
int n = (args==null || args.length 2)?100:Integer.parseInt(args[1]);
ListInteger peoples = new ArrayList();
for (int i = 0; i n; i++) {
peoples.add(i+1);
}
int mod = 1;
while (peoples.size() m){
int latestMod = peoples.size()%3;
for (int i = 0; i peoples.size() peoples.size() m; i++) {
if((i+mod)%3==0){
peoples.remove(i);
}
}
mod = 1 + latestMod;
}
for (int i = 0; i peoples.size(); i++) {
System.out.print(peoples.get(i) + ",");
}
}
}
没有看明白是A击中B后,是A移除数据还是B移除,2种情况都写了,个人感觉随机数这块需要更好的算法处理下,代码如下:
package t;
import java.util.ArrayList;
import java.util.Random;
/**
* 海盗船的游戏:创建两个数组,每个数组大小都5,数组里面都存INT值,1-10之间的数字。
* 随机生成。哪果A向B发射炮弹,读一个随机数,是否在在B中存,若存在则B中弹。
* 则移除相应的数据。哪一个先被移除三个数字,则为输。
* @author hyc
*
*/
public class Test {
static boolean isLog = true;
public static void main(String[] args) {
isLog =false;
for (int i = 0; i 100; i++) {
AToB(5, 10, 3);
}
}
public static void print(String str){
if (isLog) {
System.out.println(str);
}
}
/**
* @param len 弹数
* @param max 最大随机范围
* @param dieNum 最大中弹数
* @return
*/
public static void AToB(int len,int max,int dieNum){
ArrayListInteger a = new ArrayListInteger(5);
ArrayListInteger b = new ArrayListInteger(5);
Random random = new Random(System.currentTimeMillis());
for (int i = 0; i len; i++) {
a.add(random.nextInt(max));
b.add(random.nextInt(max));
}
print("A:"+a);
print("B:"+b);
int d_a = 0; //a中弹次数
int d_b = 0;// b中弹次数
for (int i = 0; i len*2; i++) {
if (d_a =dieNum) {
System.out.println("A输了");
return;
}
if (d_b =dieNum) {
System.out.println("B输了");
return;
}
if (i%2==0) {
print(i+"--:"+"A向B发射炮弹");
int index = random.nextInt(a.size());
Integer value = a.get(index);
print(i+"--:"+"A炮弹索引:"+index+",炮弹值:"+value);
if (b.contains(value)) {
d_b++;
a.remove(index);//B中弹A移除数据
// b.remove(value);//B中弹B移除数据
print(i+"--:"+"A的炮弹命中B"+d_b+"次......");
}else {
print(i+"--:"+"A的炮弹未命中B");
}
}else {
print(i+"--:"+"B向A发射炮弹");
int index = random.nextInt(b.size());
Integer value = b.get(index);
print(i+"--:"+"B炮弹索引:"+index+",炮弹值:"+value);
if (a.contains(value)) {
d_a++;
b.remove(index);//A中弹B移除数据
// a.remove(value);//A中弹A移除数据
print(i+"--:"+"B的炮弹命中A"+d_a+"次......");
}else {
print(i+"--:"+"B的炮弹未命中A");
}
}
}
System.out.println("A和B打成了平手......");
}
public static boolean launch(int index,ArrayListInteger list1,ArrayListInteger list2){
if (list2.contains(list1.get(index))) {
list1.remove(index);
return true;
}else {
return false;
}
}
}