Rumah > Java > javaTutorial > Bagaimana untuk melaksanakan permainan memecahkan batu bata di java

Bagaimana untuk melaksanakan permainan memecahkan batu bata di java

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2023-05-05 12:34:12
ke hadapan
1223 orang telah melayarinya

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

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

  • 如果击中的砖块上是数字,分数就是数字的值

  • 如果击中的砖块上是’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分

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

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.compile("^-?[\\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));
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan permainan memecahkan batu bata di java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Isu terkini
Bolehkah java digunakan sebagai bahagian belakang web?
daripada 1970-01-01 08:00:00
0
0
0
Pasang JAVA
daripada 1970-01-01 08:00:00
0
0
0
Tidak dapat memasang java
daripada 1970-01-01 08:00:00
0
0
0
Bagaimanakah php melaksanakan penyulitan sha1 java?
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan