package com.example.musicwork.chuangguan; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.example.musicwork.Data; import com.example.musicwork.R; import com.example.musicwork.SignIn; import org.json.JSONException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Random; public class GameActivity extends AppCompatActivity { TextView curgrade; Button startgame, gradeinfo; String mode;//记录用户选择的模式 Dialog dialog;//选择模式的对话框 ArrayList testKeys = new ArrayList();//记录测试音乐集中的键 int count = 0;//记录被点击的按钮数 int grade = 0;//记录用户成绩 int num;//记录当前模式每组会播放的音符数 //所有音符对应的资源文件(c2-低音阶段1-7,c3-中音阶段8-14,c4-高音阶段15-21 HashMap musicMap = new HashMap() {{ put(1, R.raw.c2); put(2, R.raw.d2); put(3, R.raw.e2); put(4, R.raw.f2); put(5, R.raw.g2); put(6, R.raw.a2); put(7, R.raw.b2); put(8, R.raw.c3); put(9, R.raw.d3); put(10, R.raw.e3); put(11, R.raw.f3); put(12, R.raw.g3); put(13, R.raw.a3); put(14, R.raw.b3); put(15, R.raw.c4); put(16, R.raw.d4); put(17, R.raw.e4); put(18, R.raw.f4); put(19, R.raw.g4); put(20, R.raw.a4); put(21, R.raw.b4); }}; PianoMusic music;//播放音乐对象 boolean finishFlag = false; String username ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game); init();//初始化按钮 music = new PianoMusic(getApplicationContext());//初始化音乐播放器 final TextView text_username = (TextView) this.findViewById(R.id.text_username); final Data data = (Data)getApplication(); username = data.getUsername(); text_username.setText("当前用户: "+username); } public void init() { // 获取按钮ID startgame = (Button) this.findViewById(R.id.startgame); gradeinfo = (Button) this.findViewById(R.id.gradeinfo); curgrade = (TextView) this.findViewById(R.id.curgrade); gradeinfo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { GameService.CheckScore(username); Intent intent = new Intent(GameActivity.this, GradeInfoActivity.class); startActivity(intent); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } }); startgame.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ModeDialog();//弹出选择模式的对话框 } }); } //计算被点击的按钮数(在开始闯关之前不允许点击? public void countPressedBtn(View v) { //pressedFlag = true; if(count>=num){ Log.e("map","不允许多点"); } else{ countGrade(v);//计算分数 count += 1; } //显示分数 TextView gradeView = (TextView) findViewById(R.id.curgrade); gradeView.setText(" "+grade); //闯关完成 if(finishFlag){ //创建一个弹出框提示闯关结束,显示成功或失败 TextView successinfo = new TextView(this); if (grade>=60){ successinfo.setText("闯关成功!"); }else { successinfo.setText("成绩低于60分,继续努力~"); } new AlertDialog.Builder(this) .setView(successinfo) .create().show(); try{ if (GameService.SaveScore(username, grade)) runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(GameActivity.this, "保存成绩成功", Toast.LENGTH_SHORT).show(); } }); }catch (IOException e) { e.printStackTrace(); Log.e("GA","e"); } grade = 0;//闯关结束,成绩清零 } } //判断用户是否选择正确并计分(点击按钮时则开始计分 public void countGrade(View v) { Button musicbtn = (Button) v; int answer = Integer.parseInt(musicbtn.getText().toString()); if (answer == testKeys.get(count)) {//判断答案是否正确 switch (mode) {//不同模式 case "简单模式": grade += 10; break; case "普通模式": grade += 5; break; case "困难模式": grade += 2; break; } } } //随机选择每组测试要播放的音效 public ArrayList randomChooseMusic() { Integer[] keys = musicMap.keySet().toArray(new Integer[0]);//键的集合 Random random = new Random(); int randomKey; ArrayList tempKey = new ArrayList();//存储随机抽出的key //HashMap testMusic = new HashMap<>();//存储抽取出的测试音乐集 // HashMap testMusicMap = new HashMap<>(); while(tempKey.size()