java编写:一个游戏程序

java编写:一个游戏程序,第1张

这应该有很多种算法把。。如果不考虑效率的话穷举法是肯定可以的。。。也就是说试过所有的排列组合。。然后计算每次排列的剩余防御卡的价值和。。和最大的排列就是你要的匹配。。当然这个算法 当N很大的时候非常没效率。。但你的问题只要给出算法然后说明正确性。。所以穷举是肯定可行的。。

下面是模拟代码

import java.util.ArrayList

public class Test {

//攻击卡数组

private int [] a = {1,1,3,4}

//匹配结果

private ArrayList<int []>result = new ArrayList<int []>()

//防御卡数组

private D [] d = {new D(1,5),new D(2,2),new D(2,8),new D(3,4)}

//最大防御卡价值初始化为0

private int value = 0

public static void main(String []args){

int [] input = {1,2,3,4}

Test t = new Test()

t.process(input, input.length, 0)

ArrayList<int []>r = t.getResult()

int size = r.size()

System.out.println("可能的组合有"+size+"种 ")

for(int i=0i<sizei++){

int resultSize = r.get(i).length

System.out.print("第"+(i+1)+"种 为:")

for(int j=0j<resultSizej++){

System.out.print(r.get(i)[j])

}

}

System.out.println()

System.out.println("Value = "+t.getValue())

System.out.println("结束")

}

public void process(int[] input, int n, int k) {

if (n == k) {

int count = 0

int size = input.length

int [] out = new int [size]

for (int i = 0i <sizei++) {

if(d[input[i]-1].getX()>a[i]){

count += d[input[i]-1].getY()

}

out [i] = input[i]

}

//如果排列价值和大于之前的最大防御价值改变最优匹配

if(count >value){

if(result.size() != 0){

result.clear()

}

result.add(out)

value = count

for(int in:out){

System.out.print(in)

}

System.out.println()

}

//如果价值和一样并且没有这个组合增加到结果list

if(count == value &&!this.inTheResult(input)){

result.add(out)

for(int in:out){

System.out.print(in)

}

System.out.println()

}

} else {

for (int i = ki <ni++) {

swap(input, k, i)

process(input, n, k + 1)

swap(input, i, k)

}

}

}

public boolean inTheResult(int[]a){

int size = this.result.size()

for(int i=0i<sizei++){

int s = this.result.get(i).length

for(int j=0j<sj++){

if(a[j] != this.result.get(i)[j]){

return false

}

}

}

return true

}

public ArrayList<int[]>getResult(){

return this.result

}

public int getValue(){

return this.value

}

public void swap(int[] a, int x, int y) {

int temp = a[x]

a[x] = a[y]

a[y] = temp

}

//防御卡的类 x是di y是wi

public class D{

// x = di y = wi

private int x,y

D (int x,int y){

this.x = x

this.y = y

}

public int getX(){

return x

}

public int getY(){

return y

}

}

}

运行结果

1234

1243

1324

1342

2314

2341

3214

3241

3412

3421

4321

4312

可能的组合有4种

第1种 为:3412第2种 为:3421第3种 为:4321第4种 为:4312

Value = 12

结束

貌似测试了下应该是正确的

其实这个问题挺有意思的建议你不要看我的代码根据我的提示自己做次

import java.util.Random

public class Game {

public static void main(String[] args) {

System.out.println("比赛开始")

Person p1 = new Person("刘邦", 100, 10)

Person p2 = new Person("项羽", 100, 10)

while (p1.getBlood() >0 &&p2.getBlood() >0) {

Random random = new Random()

if (random.nextInt(100) >50) {

p1.beat(p2)

p2.beat(p1)

} else {

p2.beat(p1)

p1.beat(p2)

}

}

p1.printState()

p2.printState()

System.out.println("game over!")

}

}

class Person {

private int blood// 初始血量

private int range// 掉血范围

private String name// 姓名

public String getName() {

return name

}

public void setName(String name) {

this.name = name

}

public int getRange() {

return range

}

public void setRange(int range) {

this.range = range

}

public int getBlood() {

return blood

}

public void setBlood(int blood) {

this.blood = blood

}

// 构造函数

public Person(String name, int blood, int range) {

this.name = name

this.blood = blood

this.range = range

}

// 击打

public void beat(Person person) {

int bleeding = person.hurt()

System.out

.println(String.format("%s打了%s一耳光,%s流了%s滴血。", this.name, person.getName(), person.getName(), bleeding))

}

// 被打,受伤

public int hurt() {

Random random = new Random()

int bleeding = random.nextInt(this.range) + 1

if (bleeding >this.blood) {

bleeding = this.blood

}

this.blood -= bleeding

return bleeding

}

// 输出状态

public void printState() {

if (this.blood == 0) {

System.out.println(String.format("%s被打死了", this.name))

} else {

System.out.println(String.format("%s还剩%s滴血", this.name, this.blood))

}

}

}

结果(随机):

比赛开始

刘邦打了项羽一耳光,项羽流了6滴血。

项羽打了刘邦一耳光,刘邦流了4滴血。

刘邦打了项羽一耳光,项羽流了8滴血。

项羽打了刘邦一耳光,刘邦流了2滴血。

刘邦打了项羽一耳光,项羽流了9滴血。

项羽打了刘邦一耳光,刘邦流了7滴血。

项羽打了刘邦一耳光,刘邦流了8滴血。

刘邦打了项羽一耳光,项羽流了9滴血。

刘邦打了项羽一耳光,项羽流了1滴血。

项羽打了刘邦一耳光,刘邦流了10滴血。

刘邦打了项羽一耳光,项羽流了2滴血。

项羽打了刘邦一耳光,刘邦流了7滴血。

项羽打了刘邦一耳光,刘邦流了7滴血。

刘邦打了项羽一耳光,项羽流了2滴血。

刘邦打了项羽一耳光,项羽流了1滴血。

项羽打了刘邦一耳光,刘邦流了7滴血。

刘邦打了项羽一耳光,项羽流了10滴血。

项羽打了刘邦一耳光,刘邦流了9滴血。

项羽打了刘邦一耳光,刘邦流了5滴血。

刘邦打了项羽一耳光,项羽流了1滴血。

刘邦打了项羽一耳光,项羽流了5滴血。

项羽打了刘邦一耳光,刘邦流了8滴血。

刘邦打了项羽一耳光,项羽流了9滴血。

项羽打了刘邦一耳光,刘邦流了6滴血。

项羽打了刘邦一耳光,刘邦流了5滴血。

刘邦打了项羽一耳光,项羽流了6滴血。

项羽打了刘邦一耳光,刘邦流了5滴血。

刘邦打了项羽一耳光,项羽流了6滴血。

项羽打了刘邦一耳光,刘邦流了4滴血。

刘邦打了项羽一耳光,项羽流了7滴血。

刘邦打了项羽一耳光,项羽流了4滴血。

项羽打了刘邦一耳光,刘邦流了6滴血。

刘邦被打死了

项羽还剩14滴血

game over!

全手写,望采纳,谢谢!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12082703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存