java中如何产生n张相同的图片,并随机分布,求代码!!!!
3个回答
展开全部
你这是问JAVA游戏连连看或者对对碰的算法吧?
这里有两个地方需要用到随机算法,一个是图片的随机,一个是位置的随机。
图片的随机比较容易,假如你一共只有20种图片,那你就用20做随机种子,生产随机整数,产出的随机数将大于等于0 并且小于20。 知道随机数字后就知道这次要生产哪一种图片。
图片位置的随机比图片种类的随机麻烦一点点,要看你具体的需求。
比如说你要做连连看游戏:
游戏中的位置或者叫地图是以 N*M个方格格子组成的。 比如10*10 共100个格子。
用最笨的方法生成是:
1。 定义一个类(数据结构),它表明一个格子的意思,有X,Y,ImageType分别代表,这个格子所处位置的行,列,和代表是哪一种图片
1。 两层循环生成所有的格子对象实例,用一个ArrayList或Vector保存起来。即:
for(int row=0;row<9;row++){
for(int col = 0; col <9;col ++){
Position p = new Position();
p.x = row;
p.y = col;
p.imageType = 你前面生成的随机图片种类0〜20之间的整数
positionList.add(p);
}
}
2。 现在你有了一个100长度的动态数组。假如你要随机产生1张图放在四个随机位置,这4个位置是随机的。
那么你只需循环4次。每次在循环体内从当前动态数组内随机找到一个元素取出来Positon实例,得到它的X,Y就完成任务了。
循环体有几个要点,每次随机种子设为产生 0〜当前实例数组长度 之间的数字,比如第一次时,我们产生 0〜99之间的数字,假如得到是10,那么就把positionList的10号元素取出并删除,这时候positionList的长度只有99了,下次就只能以99为随机数生成数字0〜98之间了。;
for(int i=0;i <4; i++){
int length = positionList.size();
int randomInt = XXX//生成0〜length之间的数字。
Position p = positionList.get(randomInt);
int row = p.x;
int col = p.y;
int imageIndex = p.imageType;
//这里用代码来完成你的逻辑,比如在第row行,第col列画上你的第imageIndex种图片
//TODO
positionList.remove(p);//要删除掉己选中的,免得下次相同的位置被复杂选种
}
这里有两个地方需要用到随机算法,一个是图片的随机,一个是位置的随机。
图片的随机比较容易,假如你一共只有20种图片,那你就用20做随机种子,生产随机整数,产出的随机数将大于等于0 并且小于20。 知道随机数字后就知道这次要生产哪一种图片。
图片位置的随机比图片种类的随机麻烦一点点,要看你具体的需求。
比如说你要做连连看游戏:
游戏中的位置或者叫地图是以 N*M个方格格子组成的。 比如10*10 共100个格子。
用最笨的方法生成是:
1。 定义一个类(数据结构),它表明一个格子的意思,有X,Y,ImageType分别代表,这个格子所处位置的行,列,和代表是哪一种图片
1。 两层循环生成所有的格子对象实例,用一个ArrayList或Vector保存起来。即:
for(int row=0;row<9;row++){
for(int col = 0; col <9;col ++){
Position p = new Position();
p.x = row;
p.y = col;
p.imageType = 你前面生成的随机图片种类0〜20之间的整数
positionList.add(p);
}
}
2。 现在你有了一个100长度的动态数组。假如你要随机产生1张图放在四个随机位置,这4个位置是随机的。
那么你只需循环4次。每次在循环体内从当前动态数组内随机找到一个元素取出来Positon实例,得到它的X,Y就完成任务了。
循环体有几个要点,每次随机种子设为产生 0〜当前实例数组长度 之间的数字,比如第一次时,我们产生 0〜99之间的数字,假如得到是10,那么就把positionList的10号元素取出并删除,这时候positionList的长度只有99了,下次就只能以99为随机数生成数字0〜98之间了。;
for(int i=0;i <4; i++){
int length = positionList.size();
int randomInt = XXX//生成0〜length之间的数字。
Position p = positionList.get(randomInt);
int row = p.x;
int col = p.y;
int imageIndex = p.imageType;
//这里用代码来完成你的逻辑,比如在第row行,第col列画上你的第imageIndex种图片
//TODO
positionList.remove(p);//要删除掉己选中的,免得下次相同的位置被复杂选种
}
追问
是做一个小猪吃豆的小游戏,在panel上随机产生一些豆子,可以给可执行的代码吗???不会用随机数啊!!!
追答
Random 随机数是JAVA里面最简单的方法之一, 一定要自己学会, 不可以拿来主义。 自己查资料翻文档一下子就看懂了。 如果你只是照抄,下次很快就忘记了。你百度一下很快就知道怎么用了。根本不必请别人帮你写。
另外说一句,楼下preferer的随机方法太复杂了根本用不了这样去做,
展开全部
这是我自己写的一个产生随机数的方法
public int[] randomP(int a,int b) {//a,b表示这个随机数的范围
int x5;
int[] x=new int[b-a+1];
int[] x1=new int[b-a+1];
Random x4=new Random();
for (int x2 =a ; x2 <b+1; x2++) {
x[x2]=x2;
}
for (int x3 = 0; x3 <b-a+1; x3++) {
x5=x4.nextInt(b-a+1-x3);
x1[x3]=x[x5];
x[x5]=x[x.length-x3-1];
}
return x1;
}
public int[] randomP(int a,int b) {//a,b表示这个随机数的范围
int x5;
int[] x=new int[b-a+1];
int[] x1=new int[b-a+1];
Random x4=new Random();
for (int x2 =a ; x2 <b+1; x2++) {
x[x2]=x2;
}
for (int x3 = 0; x3 <b-a+1; x3++) {
x5=x4.nextInt(b-a+1-x3);
x1[x3]=x[x5];
x[x5]=x[x.length-x3-1];
}
return x1;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Math.random()方法是一个不错的选择!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询