好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java实现打砖块游戏算法

一个打砖块游戏算法,供大家参考,具体内容如下

这里有一个打砖块游戏:小明面前有很多砖块,每个砖块上有一个字符,小明每击中一个砖块,会产生一个分值,而总分即这些分值总和。砖块上的字符可以是数字,符号或者字母,每个字符的规则如下:

如果击中的砖块上是数字,分数就是数字的值 如果击中的砖块上是’D’,分数就是上一个分值的两倍 如果击中的砖块上是’+’,分数就是前两个分值的和 如果击中的砖块上是’C’,则取消上一次成绩,之后的统计中不计算上一次成绩

写一个算法,为小明的游戏过程计算总成绩。

要求

输入为两个参数,一个叫blocks,代表一个字符列表,另一个叫n,代表列表中字符数量。
输出为一个整数,代表对给定列表计算的总成绩。

例子

输入为:
blocks = [5, -2, 4, C, D, 9, +, +], n = 8
输出为
27

计算过程如下:

第一次打中数字5,得分5分,总成绩5分
第二次打中数字-2,得分-2分,总成绩5 - 2 = 3分
第三次打中数字4,得分4分,总成绩3 + 4 = 7分
第四次打中字母C,上次成绩作废,总成绩回到第二次时的3分
第五次打中字母D,取上次分值-2,乘以2即-4分,总成绩为-1分。注意之前的C把第三次成绩取消了,不计入计算,所以再之前的第二次的得分作为上次成绩。
第六次打中数字9,得9分,总成绩-1 + 9 = 8分
第七次打中符号+,得9 - 4 = 5分,总成绩8 + 5 = 13分
第八次打中符号+,得5 + 9 = 14分,总成绩14 + 13 = 27分

算出总成绩27分

分析过程略,直接上代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

import java.util.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

public class Solution {

    public static int totalScore(String[] blocks, int n) {

        if (n <= 0 ) return 0 ;

        if (blocks.length != n) return 0 ;

        int sum = 0 ;

        Integer[] lastScores = new Integer[n];

        Arrays.fill(lastScores, 0 );

        List<Integer> scoreList = new ArrayList<>(n);

        for ( int i = 0 ; i < n; i++) {

            if ( "C" .equals(blocks[i])) {

                sum -= lastScores[ 1 ];

                scoreList.remove(lastScores[ 1 ]);

                lastScores[ 1 ] = scoreList.get(scoreList.size() - 1 );

                lastScores[ 2 ] = scoreList.get(scoreList.size() - 2 );

            } else {

                lastScores[ 0 ] = getScore(blocks[i], lastScores[ 1 ], lastScores[ 2 ]);

                sum += lastScores[ 0 ];

                scoreList.add(lastScores[ 0 ]);

                lastScores[ 2 ] = lastScores[ 1 ];

                lastScores[ 1 ] = lastScores[ 0 ];

 

            }

        }

        return sum;

    }

 

    private static int getScore(String mark, int lastScore, int lastScore2) {

        if ( null == mark || "" .equals(mark)) return 0 ;

        if (isInteger(mark)) {

            return Integer.parseInt(mark);

        } else if ( "D" .equals(mark)) {

            return lastScore * 2 ;

        } else if ( "+" .equals(mark)) {

            return lastScore + lastScore2;

        }

        return 0 ;

    }

 

    private static boolean isInteger(String mark) {

        Pattern pattern = Pattern测试数据pile( "^-?[\\d]+$" );

        Matcher matcher = pattern.matcher(mark);

        return matcher.matches();

    }

 

    public static void main(String[] args) {

        String[] blocks = { "5" , "-2" , "4" , "C" , "D" , "9" , "+" , "+" };

        int n = blocks.length;

        System.out.println(Solution.totalScore(blocks, n));

    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/qshn2sky/article/details/72354898

查看更多关于java实现打砖块游戏算法的详细内容...

  阅读:19次