/
arti4
/
IndividualProject
Обзор
Документация
Войти
/
arti4
/
IndividualProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
MyGame/app/src/main/java/com/example/mygame/MainMenuActivity.java
356 строк
13 KB
arti4
upload files
18 ноя 2025, 12:41
18 ноя 2025, 12:41
f3a2f8a
Код
Авторство
О чём код?
package com.example.mygame; import android.content.Context; import android.content.SharedPreferences; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageButton; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.activity.OnBackPressedCallback; import androidx.appcompat.app.AppCompatActivity; public class MainMenuActivity extends AppCompatActivity { private TriangleButton startButton; private Button carButton; private Button mapButton; private ImageButton settingsButton; private ImageButton infoButton; private Button exitButton; private SoundManager soundManager; private BackgroundLayer backgroundLayer; private MenuBackgroundView backgroundView; private MenuThread menuThread; private float cameraX = 0f; private TextView highScoreText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main_menu); RelativeLayout rootLayout = findViewById(R.id.rootLayout); backgroundView = new MenuBackgroundView(this); rootLayout.addView(backgroundView, 0); soundManager = createSoundManagerWithSettings(); startButton = findViewById(R.id.startButton); carButton = findViewById(R.id.carButton); mapButton = findViewById(R.id.mapButton); settingsButton = findViewById(R.id.settingsButton); infoButton = findViewById(R.id.infoButton); highScoreText = findViewById(R.id.highScoreText); exitButton = findViewById(R.id.exitButton); loadAndDisplayHighScore(); DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int screenWidth = displayMetrics.widthPixels; int screenHeight = displayMetrics.heightPixels; backgroundLayer = new BackgroundLayer(this, screenWidth, screenHeight, 1.0f); backgroundView.setBackgroundLayer(backgroundLayer); startButton.setTextColor(Color.TRANSPARENT); startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startGame(); } }); startButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, android.view.MotionEvent event) { switch (event.getAction()) { case android.view.MotionEvent.ACTION_DOWN: startButton.setPressed(true); return true; case android.view.MotionEvent.ACTION_UP: startButton.setPressed(false); v.postDelayed(new Runnable() { @Override public void run() { startGame(); } }, 100); return true; case android.view.MotionEvent.ACTION_CANCEL: startButton.setPressed(false); return true; } return false; } }); carButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openCarSelection(); } }); mapButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openMapSelection(); } }); settingsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openSettings(); } }); infoButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openInstructions(); } }); setupBackPressedHandler(); initializeGameData(); exitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { exitGame(); } }); } private void loadAndDisplayHighScore() { SharedPreferences prefs = getSharedPreferences("GamePrefs", Context.MODE_PRIVATE); int highScore = prefs.getInt("high_score", 0); if (highScoreText != null) { highScoreText.setText("Рекорд: " + highScore); } } private SoundManager createSoundManagerWithSettings() { SharedPreferences prefs = getSharedPreferences("SoundSettings", Context.MODE_PRIVATE); int musicVolume = prefs.getInt("music_volume", 50); int effectsVolume = prefs.getInt("effects_volume", 50); float musicVolumeFloat = musicVolume / 100.0f; float effectsVolumeFloat = effectsVolume / 100.0f; return new SoundManager(this, musicVolumeFloat, effectsVolumeFloat); } @Override protected void onResume() { super.onResume(); updateSoundManagerVolume(); loadAndDisplayHighScore(); if (soundManager != null) { soundManager.stopSound(SoundManager.SOUND_GAME); soundManager.playSound(SoundManager.SOUND_MAIN_MENU); } if (startButton != null) { startButton.setPressed(false); } startMenuAnimation(); } private void startMenuAnimation() { if (menuThread == null) { menuThread = new MenuThread(); menuThread.setRunning(true); menuThread.start(); } } private void stopMenuAnimation() { if (menuThread != null) { menuThread.setRunning(false); menuThread = null; } } private void exitGame() { if (soundManager != null) { soundManager.stopAllSounds(); } stopMenuAnimation(); new android.app.AlertDialog.Builder(this) .setTitle("Выход из игры") .setMessage("Вы уверены, что хотите выйти?") .setPositiveButton("Да", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(android.content.DialogInterface dialog, int which) { finishAffinity(); System.exit(0); } }) .setNegativeButton("Нет", null) .setCancelable(true) .show(); } private void updateSoundManagerVolume() { SharedPreferences prefs = getSharedPreferences("SoundSettings", Context.MODE_PRIVATE); int musicVolume = prefs.getInt("music_volume", 50); int effectsVolume = prefs.getInt("effects_volume", 50); float musicVolumeFloat = musicVolume / 100.0f; float effectsVolumeFloat = effectsVolume / 100.0f; if (soundManager != null) { soundManager.setMusicVolume(musicVolumeFloat); soundManager.setEffectsVolume(effectsVolumeFloat); } } @Override protected void onPause() { super.onPause(); stopMenuAnimation(); } @Override protected void onDestroy() { super.onDestroy(); if (menuThread != null) { menuThread.setRunning(false); try { menuThread.join(100); } catch (InterruptedException e) { e.printStackTrace(); } } if (backgroundLayer != null) { backgroundLayer.release(); } if (soundManager != null) { soundManager.release(); } } private void setupBackPressedHandler() { getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { finishAffinity(); } }); } private void startGame() { if (soundManager != null) { soundManager.stopSound(SoundManager.SOUND_MAIN_MENU); } stopMenuAnimation(); Intent intent = new Intent(MainMenuActivity.this, MainActivity.class); startActivity(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } private void openCarSelection() { Intent intent = new Intent(MainMenuActivity.this, CarSelectionActivity.class); startActivity(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } private void openMapSelection() { Intent intent = new Intent(MainMenuActivity.this, MapSelectionActivity.class); startActivity(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } private void openSettings() { Intent intent = new Intent(MainMenuActivity.this, SettingsActivity.class); startActivity(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } private void openInstructions() { Intent intent = new Intent(MainMenuActivity.this, InstructionsActivity.class); startActivity(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } private void initializeGameData() { SharedPreferences prefs = getSharedPreferences("MotorcyclePrefs", Context.MODE_PRIVATE); SharedPreferences mapPrefs = getSharedPreferences("MapPrefs", Context.MODE_PRIVATE); if (!prefs.contains("unlocked_motorcycles")) { prefs.edit() .putString("unlocked_motorcycles", "0") .putInt("selected_motorcycle", 0) .apply(); } if (!mapPrefs.contains("unlocked_maps")) { mapPrefs.edit() .putString("unlocked_maps", "0") .putInt("selected_map", 0) .apply(); } SharedPreferences gamePrefs = getSharedPreferences("GamePrefs", Context.MODE_PRIVATE); if (!gamePrefs.contains("collected_crystals")) { gamePrefs.edit().putInt("collected_crystals", 0).apply(); } } private class MenuThread extends Thread { private boolean running; private long lastTime = System.currentTimeMillis(); public void setRunning(boolean running) { this.running = running; } @Override public void run() { while (running) { long currentTime = System.currentTimeMillis(); long elapsedTime = currentTime - lastTime; cameraX += 1.0f; if (backgroundLayer != null) { backgroundLayer.update(cameraX); } runOnUiThread(new Runnable() { @Override public void run() { if (backgroundView != null) { backgroundView.setCameraX(cameraX); backgroundView.invalidate(); } } }); try { Thread.sleep(16); } catch (InterruptedException e) { e.printStackTrace(); } lastTime = currentTime; } } } private static class MenuBackgroundView extends View { private BackgroundLayer backgroundLayer; private float cameraX = 0f; public MenuBackgroundView(Context context) { super(context); } public MenuBackgroundView(Context context, android.util.AttributeSet attrs) { super(context, attrs); } public MenuBackgroundView(Context context, android.util.AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setBackgroundLayer(BackgroundLayer backgroundLayer) { this.backgroundLayer = backgroundLayer; } public void setCameraX(float cameraX) { this.cameraX = cameraX; } @Override protected void onDraw(android.graphics.Canvas canvas) { super.onDraw(canvas); if (backgroundLayer != null) { backgroundLayer.draw(canvas, cameraX); } } } }