TETRİS 9999 in 1 Oyunu (Test)

Legal ve Freeware Oyun paylaşımları ve oyunlarla ilgili güncel bilgiler
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15218
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2526 kez
Teşekkür edildi: 5344 kez

Başardık Sonunda....!!!! : )

Mesaj gönderen TRWE_2012 »

Sonunda kendi kendime başardım...

Ekran Görüntüsü (Sistem : GNU/Linux Mint 22.2 Mate v1.26.2 x64 OS)
Resim
Derleme Komut Çıktıları :

Kod: Tümünü seç

[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 50 source files to /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  51.762 s
[INFO] Finished at: 2026-03-07T00:49:22+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.0:compile (default-compile) on project brick-game: Fatal error compiling: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0xe3692ca) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0xe3692ca -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ java -jar target/brick-game-0.3.0-SNAPSHOT.jar
Error: Unable to access jarfile target/brick-game-0.3.0-SNAPSHOT.jar
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ xed ~/Masaüstü/Brick-Game-9999-in-1-master/pom.xml
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ mvn package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------< com.github.vitalibo:brick-game >-------------------
[INFO] Building brick-game 0.3.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok-maven-plugin/1.18.20.0/lombok-maven-plugin-1.18.20.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok-maven-plugin/1.18.20.0/lombok-maven-plugin-1.18.20.0.pom (4.1 kB at 4.9 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok-maven/1.18.20.0/lombok-maven-1.18.20.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok-maven/1.18.20.0/lombok-maven-1.18.20.0.pom (15 kB at 66 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok-maven-plugin/1.18.20.0/lombok-maven-plugin-1.18.20.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok-maven-plugin/1.18.20.0/lombok-maven-plugin-1.18.20.0.jar (20 kB at 84 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.30/lombok-1.18.30.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.30/lombok-1.18.30.pom (1.5 kB at 7.2 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar (2.0 MB at 860 kB/s)
[INFO] 
[INFO] --- lombok-maven-plugin:1.18.20.0:delombok (default) @ brick-game ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.pom (28 kB at 106 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/47/commons-parent-47.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/47/commons-parent-47.pom (78 kB at 302 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/19/apache-19.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/19/apache-19.pom (15 kB at 74 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.20/lombok-1.18.20.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.20/lombok-1.18.20.pom (1.5 kB at 5.2 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.20/lombok-1.18.20.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar (502 kB at 493 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.20/lombok-1.18.20.jar (1.9 MB at 990 kB/s)
[WARNING] Skipping Delombok; no source to process.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 30 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:compile (default-compile) @ brick-game ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 50 source files to /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:testCompile (default-testCompile) @ brick-game ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 25 source files to /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ brick-game ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/2.0.9/maven-plugin-api-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/2.0.9/maven-plugin-api-2.0.9.pom (1.5 kB at 6.8 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven/2.0.9/maven-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven/2.0.9/maven-2.0.9.pom (19 kB at 97 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/8/maven-parent-8.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/8/maven-parent-8.pom (24 kB at 116 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/4/apache-4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/4/apache-4.pom (4.5 kB at 23 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.pom (3.0 kB at 17 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.pom (2.5 kB at 13 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/2.12.4/maven-surefire-common-2.12.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/2.12.4/maven-surefire-common-2.12.4.pom (5.5 kB at 28 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-annotations/3.1/maven-plugin-annotations-3.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-annotations/3.1/maven-plugin-annotations-3.1.pom (1.6 kB at 8.5 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-tools/3.1/maven-plugin-tools-3.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-tools/3.1/maven-plugin-tools-3.1.pom (16 kB at 79 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact/2.0.9/maven-artifact-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact/2.0.9/maven-artifact-2.0.9.pom (1.6 kB at 8.5 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.8/plexus-utils-3.0.8.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.8/plexus-utils-3.0.8.pom (3.1 kB at 17 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.2/plexus-3.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.2/plexus-3.2.pom (19 kB at 99 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-project/2.0.9/maven-project-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-project/2.0.9/maven-project-2.0.9.pom (2.7 kB at 13 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.0.9/maven-settings-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.0.9/maven-settings-2.0.9.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-model/2.0.9/maven-model-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-model/2.0.9/maven-model-2.0.9.pom (3.1 kB at 15 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-profile/2.0.9/maven-profile-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-profile/2.0.9/maven-profile-2.0.9.pom (2.0 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact-manager/2.0.9/maven-artifact-manager-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact-manager/2.0.9/maven-artifact-manager-2.0.9.pom (2.7 kB at 14 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-repository-metadata/2.0.9/maven-repository-metadata-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-repository-metadata/2.0.9/maven-repository-metadata-2.0.9.pom (1.9 kB at 10 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-registry/2.0.9/maven-plugin-registry-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-registry/2.0.9/maven-plugin-registry-2.0.9.pom (2.0 kB at 9.9 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-core/2.0.9/maven-core-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-core/2.0.9/maven-core-2.0.9.pom (7.8 kB at 42 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.9/maven-plugin-parameter-documenter-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.9/maven-plugin-parameter-documenter-2.0.9.pom (2.0 kB at 9.8 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.9/maven-reporting-api-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.9/maven-reporting-api-2.0.9.pom (1.8 kB at 6.9 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.9/maven-reporting-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.9/maven-reporting-2.0.9.pom (1.5 kB at 7.7 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.9/maven-error-diagnostics-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.9/maven-error-diagnostics-2.0.9.pom (1.7 kB at 9.1 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.9/maven-plugin-descriptor-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.9/maven-plugin-descriptor-2.0.9.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-monitor/2.0.9/maven-monitor-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-monitor/2.0.9/maven-monitor-2.0.9.pom (1.3 kB at 6.8 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-toolchain/2.0.9/maven-toolchain-2.0.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-toolchain/2.0.9/maven-toolchain-2.0.9.pom (3.5 kB at 18 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.pom (17 kB at 83 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/22/commons-parent-22.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/22/commons-parent-22.pom (42 kB at 188 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom (15 kB at 82 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.3/maven-common-artifact-filters-1.3.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.3/maven-common-artifact-filters-1.3.pom (3.7 kB at 18 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-components/12/maven-shared-components-12.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-components/12/maven-shared-components-12.pom (9.3 kB at 50 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/13/maven-parent-13.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/13/maven-parent-13.pom (23 kB at 119 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom (1.2 kB at 6.4 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/2.0.9/maven-plugin-api-2.0.9.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/2.12.4/maven-surefire-common-2.12.4.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/2.0.9/maven-plugin-api-2.0.9.jar (13 kB at 59 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.3/maven-common-artifact-filters-1.3.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar (35 kB at 148 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.8/plexus-utils-3.0.8.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.3/maven-common-artifact-filters-1.3.jar (31 kB at 47 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact/2.0.9/maven-artifact-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar (118 kB at 88 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.8/plexus-utils-3.0.8.jar (232 kB at 174 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-project/2.0.9/maven-project-2.0.9.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.0.9/maven-settings-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/2.12.4/maven-surefire-common-2.12.4.jar (263 kB at 192 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-profile/2.0.9/maven-profile-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar (316 kB at 231 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-model/2.0.9/maven-model-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-profile/2.0.9/maven-profile-2.0.9.jar (35 kB at 21 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact-manager/2.0.9/maven-artifact-manager-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.0.9/maven-settings-2.0.9.jar (49 kB at 29 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-registry/2.0.9/maven-plugin-registry-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-model/2.0.9/maven-model-2.0.9.jar (87 kB at 50 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-core/2.0.9/maven-core-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-project/2.0.9/maven-project-2.0.9.jar (122 kB at 69 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.9/maven-plugin-parameter-documenter-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-registry/2.0.9/maven-plugin-registry-2.0.9.jar (29 kB at 15 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.9/maven-reporting-api-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact-manager/2.0.9/maven-artifact-manager-2.0.9.jar (58 kB at 29 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-repository-metadata/2.0.9/maven-repository-metadata-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.9/maven-plugin-parameter-documenter-2.0.9.jar (21 kB at 10 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.9/maven-error-diagnostics-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-core/2.0.9/maven-core-2.0.9.jar (160 kB at 76 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.9/maven-plugin-descriptor-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact/2.0.9/maven-artifact-2.0.9.jar (89 kB at 41 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-monitor/2.0.9/maven-monitor-2.0.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.9/maven-reporting-api-2.0.9.jar (10 kB at 4.5 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-repository-metadata/2.0.9/maven-repository-metadata-2.0.9.jar (25 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-toolchain/2.0.9/maven-toolchain-2.0.9.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-annotations/3.1/maven-plugin-annotations-3.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.9/maven-error-diagnostics-2.0.9.jar (14 kB at 6.0 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.9/maven-plugin-descriptor-2.0.9.jar (37 kB at 16 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-monitor/2.0.9/maven-monitor-2.0.9.jar (10 kB at 4.2 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-annotations/3.1/maven-plugin-annotations-3.1.jar (14 kB at 5.7 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-toolchain/2.0.9/maven-toolchain-2.0.9.jar (38 kB at 15 kB/s)
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ brick-game ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom (4.5 kB at 21 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archiver/2.1/plexus-archiver-2.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archiver/2.1/plexus-archiver-2.1.pom (2.8 kB at 14 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.pom (4.1 kB at 17 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/sonatype/spice/spice-parent/16/spice-parent-16.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/sonatype/spice/spice-parent/16/spice-parent-16.pom (8.4 kB at 41 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/2.0.2/plexus-io-2.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/2.0.2/plexus-io-2.0.2.pom (1.7 kB at 9.0 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-components/1.1.19/plexus-components-1.1.19.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-components/1.1.19/plexus-components-1.1.19.pom (2.7 kB at 13 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.0.1/plexus-3.0.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.0.1/plexus-3.0.1.pom (19 kB at 91 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.pom (1.0 kB at 4.7 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.pom (9.9 kB at 49 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archiver/2.1/plexus-archiver-2.1.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/2.0.2/plexus-io-2.0.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar (38 kB at 110 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.jar (60 kB at 168 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.jar (22 kB at 59 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archiver/2.1/plexus-archiver-2.1.jar (184 kB at 415 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/2.0.2/plexus-io-2.0.2.jar (58 kB at 71 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.jar (208 kB at 230 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar (226 kB at 245 kB/s)
[INFO] Building jar: /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-shade-plugin:2.4.3:shade (default) @ brick-game ---
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom (815 B at 3.7 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom (4.2 kB at 22 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-compat/3.0/maven-compat-3.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-compat/3.0/maven-compat-3.0.pom (4.0 kB at 19 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.pom (1.8 kB at 8.9 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-6/wagon-1.0-beta-6.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-6/wagon-1.0-beta-6.pom (12 kB at 61 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom (2.0 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.2/asm-5.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.2/asm-5.0.2.pom (1.9 kB at 9.8 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.2/asm-parent-5.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.2/asm-parent-5.0.2.pom (5.5 kB at 28 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.0.2/asm-commons-5.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.0.2/asm-commons-5.0.2.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.2/asm-tree-5.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.2/asm-tree-5.0.2.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/jdom/jdom/1.1/jdom-1.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/jdom/jdom/1.1/jdom-1.1.pom (2.2 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-dependency-tree/2.2/maven-dependency-tree-2.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-dependency-tree/2.2/maven-dependency-tree-2.2.pom (7.3 kB at 36 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-components/20/maven-shared-components-20.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-components/20/maven-shared-components-20.pom (5.1 kB at 25 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/24/maven-parent-24.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/24/maven-parent-24.pom (37 kB at 157 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/apache/14/apache-14.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/apache/14/apache-14.pom (15 kB at 73 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/eclipse/aether/aether-util/0.9.0.M2/aether-util-0.9.0.M2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/eclipse/aether/aether-util/0.9.0.M2/aether-util-0.9.0.M2.pom (2.0 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/eclipse/aether/aether/0.9.0.M2/aether-0.9.0.M2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/eclipse/aether/aether/0.9.0.M2/aether-0.9.0.M2.pom (28 kB at 136 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/2.2/commons-io-2.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/2.2/commons-io-2.2.pom (11 kB at 57 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/24/commons-parent-24.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/24/commons-parent-24.pom (47 kB at 199 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/vafer/jdependency/1.1/jdependency-1.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/vafer/jdependency/1.1/jdependency-1.1.pom (11 kB at 56 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.4/asm-5.0.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.4/asm-5.0.4.pom (1.9 kB at 10 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.4/asm-parent-5.0.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.4/asm-parent-5.0.4.pom (5.5 kB at 28 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.0.4/asm-analysis-5.0.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.0.4/asm-analysis-5.0.4.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.4/asm-tree-5.0.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.4/asm-tree-5.0.4.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.0.4/asm-commons-5.0.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.0.4/asm-commons-5.0.4.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.0.4/asm-util-5.0.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.0.4/asm-util-5.0.4.pom (2.1 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/11.0.2/guava-11.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/11.0.2/guava-11.0.2.pom (5.5 kB at 27 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/11.0.2/guava-parent-11.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/11.0.2/guava-parent-11.0.2.pom (2.0 kB at 8.4 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom (4.8 kB at 25 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.pom (965 B at 4.6 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-compat/3.0/maven-compat-3.0.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.22/plexus-utils-3.0.22.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.2/asm-5.0.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar (4.2 kB at 5.1 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.0.2/asm-commons-5.0.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.jar (53 kB at 61 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.2/asm-tree-5.0.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.2/asm-5.0.2.jar (53 kB at 58 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/jdom/jdom/1.1/jdom-1.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.22/plexus-utils-3.0.22.jar (245 kB at 254 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-dependency-tree/2.2/maven-dependency-tree-2.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-compat/3.0/maven-compat-3.0.jar (285 kB at 278 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/eclipse/aether/aether-util/0.9.0.M2/aether-util-0.9.0.M2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.2/asm-tree-5.0.2.jar (29 kB at 25 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/2.2/commons-io-2.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/jdom/jdom/1.1/jdom-1.1.jar (153 kB at 122 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/vafer/jdependency/1.1/jdependency-1.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-dependency-tree/2.2/maven-dependency-tree-2.2.jar (64 kB at 47 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.0.4/asm-analysis-5.0.4.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.0.2/asm-commons-5.0.2.jar (42 kB at 29 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.0.4/asm-util-5.0.4.jar
Downloaded from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/2.2/commons-io-2.2.jar (174 kB at 105 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/11.0.2/guava-11.0.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/eclipse/aether/aether-util/0.9.0.M2/aether-util-0.9.0.M2.jar (134 kB at 80 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/vafer/jdependency/1.1/jdependency-1.1.jar (22 kB at 13 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.0.4/asm-analysis-5.0.4.jar (20 kB at 12 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.0.4/asm-util-5.0.4.jar (43 kB at 14 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar (33 kB at 11 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/11.0.2/guava-11.0.2.jar (1.6 MB at 339 kB/s)
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar with /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  32.882 s
[INFO] Finished at: 2026-03-07T00:57:13+03:00
[INFO] ------------------------------------------------------------------------
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ java -jar ~/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar
Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
	at com.github.vitalibo.brickgame.core.ui.BrickGameFrame.init(BrickGameFrame.java:51)
	at com.github.vitalibo.brickgame.core.ui.BrickGameFrame.<init>(BrickGameFrame.java:40)
	at com.github.vitalibo.brickgame.Run.main(Run.java:30)
Caused by: java.lang.ClassNotFoundException: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:536)
	at java.base/java.lang.Class.forName(Class.java:515)
	at java.desktop/javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:2042)
	at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:636)
	at com.github.vitalibo.brickgame.core.ui.BrickGameFrame.init(BrickGameFrame.java:48)
	... 2 more
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ $ xe~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.javava
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ mvn package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------< com.github.vitalibo:brick-game >-------------------
[INFO] Building brick-game 0.3.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- lombok-maven-plugin:1.18.20.0:delombok (default) @ brick-game ---
[WARNING] Skipping Delombok; no source to process.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 30 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:compile (default-compile) @ brick-game ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 50 source files to /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:testCompile (default-testCompile) @ brick-game ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ brick-game ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ brick-game ---
[INFO] Building jar: /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-shade-plugin:2.4.3:shade (default) @ brick-game ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar with /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.026 s
[INFO] Finished at: 2026-03-07T01:04:05+03:00
[INFO] ------------------------------------------------------------------------
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ java -jar target/brick-game-0.3.0-SNAPSHOT.jar
^Clinuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ grep -n "setSize\|setPreferredSize\|Dimension" ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java
35:            .with(i -> i.setPreferredSize(new Dimension(16, 16)))
38:            .with(i -> i.setPreferredSize(new Dimension(40, 13)))
55:        this.setSize(new Dimension(190, 260));
57:        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ xed +55 ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ mvn package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------< com.github.vitalibo:brick-game >-------------------
[INFO] Building brick-game 0.3.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- lombok-maven-plugin:1.18.20.0:delombok (default) @ brick-game ---
[WARNING] Skipping Delombok; no source to process.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 30 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:compile (default-compile) @ brick-game ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 50 source files to /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:testCompile (default-testCompile) @ brick-game ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ brick-game ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ brick-game ---
[INFO] Building jar: /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-shade-plugin:2.4.3:shade (default) @ brick-game ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar with /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.205 s
[INFO] Finished at: 2026-03-07T01:15:30+03:00
[INFO] ------------------------------------------------------------------------
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ java -jar target/brick-game-0.3.0-SNAPSHOT.jar
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ grep -n "Dimension\|setPreferredSize\|setSize" ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java
35:            .with(i -> i.setPreferredSize(new Dimension(16, 16)))
38:            .with(i -> i.setPreferredSize(new Dimension(40, 13)))
55:        this.setSize(new Dimension(380, 520));
57:        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ grep -rn "Dimension\|setPreferredSize\|setSize" ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/NumberPanel.java:74:            this.setPreferredSize(new Dimension(8, 13));
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/IconPanel.java:42:    public void setPreferredSize(Dimension preferredSize) {
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/IconPanel.java:43:        super.setPreferredSize(preferredSize);
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/IconPanel.java:44:        this.getComponent(0).setPreferredSize(preferredSize);
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickPanel.java:51:            .collect(BooleanCollector.toTwoDimensionalArray());
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java:35:            .with(i -> i.setPreferredSize(new Dimension(16, 16)))
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java:38:            .with(i -> i.setPreferredSize(new Dimension(40, 13)))
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java:55:        this.setSize(new Dimension(380, 520));
/home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java:57:        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ xed ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ xed ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/NumberPanel.java
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ mvn package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------< com.github.vitalibo:brick-game >-------------------
[INFO] Building brick-game 0.3.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- lombok-maven-plugin:1.18.20.0:delombok (default) @ brick-game ---
[WARNING] Skipping Delombok; no source to process.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 30 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:compile (default-compile) @ brick-game ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 50 source files to /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:testCompile (default-testCompile) @ brick-game ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ brick-game ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ brick-game ---
[INFO] Building jar: /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-shade-plugin:2.4.3:shade (default) @ brick-game ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar with /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.165 s
[INFO] Finished at: 2026-03-07T01:24:11+03:00
[INFO] ------------------------------------------------------------------------
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ java -jar target/brick-game-0.3.0-SNAPSHOT.jar
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ xed ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/BrickGameFrame.java
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ xed ~/Masaüstü/Brick-Game-9999-in-1-master/src/main/java/com/github/vitalibo/brickgame/core/ui/NumberPanel.java
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ mvn package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------< com.github.vitalibo:brick-game >-------------------
[INFO] Building brick-game 0.3.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- lombok-maven-plugin:1.18.20.0:delombok (default) @ brick-game ---
[WARNING] Skipping Delombok; no source to process.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 30 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:compile (default-compile) @ brick-game ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 50 source files to /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ brick-game ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:testCompile (default-testCompile) @ brick-game ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ brick-game ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ brick-game ---
[INFO] Building jar: /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-shade-plugin:2.4.3:shade (default) @ brick-game ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT.jar with /home/linuxmaster/Masaüstü/Brick-Game-9999-in-1-master/target/brick-game-0.3.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.239 s
[INFO] Finished at: 2026-03-07T01:30:44+03:00
[INFO] ------------------------------------------------------------------------
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ java -jar target/brick-game-0.3.0-SNAPSHOT.jar
linuxmaster@notebook-pc:~/Masaüstü/Brick-Game-9999-in-1-master$ 

Aşağıya İndirme Linkini bırakıyorum (ZİP içinde Windows11 için ve Linux İçin ayrı ayrı iki dizin var)

https://www.upload.ee/files/19137216/Te ... n.zip.html

NOT:

Bu oyun Java tabanlı, dolayısıyla Windows'ta çalıştırmak için:

1.JRE veya JDK 21 kurulu olması gerekiyor.

Çalıştırma

Kod: Tümünü seç

java -jar target/brick-game-0.3.0-SNAPSHOT.jar
Veya

Ya da JAR dosyasına çift tıklayarak da çalışabilirsiniz, eğer `.jar` uzantısı Java ile ilişkilendirilmişse.....[/i]

GNU/Linux ClamAV Virüs Tarama Sonuçları - Temiz-

Kod: Tümünü seç

[2026-03-07 02:01:27] Betik başlatıldı
[2026-03-07 02:01:27] Virüs imza veritabanı güncellemesi başlatıldı
ClamAV update process started at Sat Mar  7 02:01:27 2026
Sat Mar  7 02:01:28 2026 -> daily.cld database is up-to-date (version: 27932, sigs: 355191, f-level: 90, builder: svc.clamav-publisher)
Sat Mar  7 02:01:28 2026 -> main.cvd database is up-to-date (version: 63, sigs: 3287027, f-level: 90, builder: tomjudge)
Sat Mar  7 02:01:28 2026 -> bytecode.cvd database is up-to-date (version: 339, sigs: 80, f-level: 90, builder: nrandolp)
[2026-03-07 02:01:28] Virüs imza veritabanı güncellemesi tamamlandı
[2026-03-07 02:01:55] Kullanıcıdan tam yol alındı: /home/linuxmaster/Oyunlar/Tetris
[2026-03-07 02:01:55] Hedef türü tespit edildi: DİZİN
[2026-03-07 02:01:58] Kullanıcı taramayı onayladı
[2026-03-07 02:01:58] Tarama başlatıldı
[2026-03-07 02:01:59] Dizin taranıyor: /home/linuxmaster/Oyunlar/Tetris

----------- SCAN SUMMARY -----------
Known viruses: 3627604
Engine version: 1.4.3
Scanned directories: 88
Scanned files: 246
Infected files: 0
Data scanned: 0.41 MB
Data read: 0.41 MB (ratio 1.02:1)
Time: 7.392 sec (0 m 7 s)
Start Date: 2026:03:07 02:01:59
End Date:   2026:03:07 02:02:07
[2026-03-07 02:02:07] Tarama tamamlandı
Kullanıcı avatarı
burak35
Zettabyte3
Zettabyte3
Mesajlar: 17564
Kayıt: 07 Eki 2016, 13:06
cinsiyet: Erkek
Teşekkür etti: 10125 kez
Teşekkür edildi: 11787 kez

Re: TETRİS 9999 in 1 Oyunu (Test)

Mesaj gönderen burak35 »

Bende vardı bu tetrislerden. Muhtemelen bi süre sonra bozmuşumdur bunu.
Kullanıcı avatarı
Kayserilifatih
Petabyte4
Petabyte4
Mesajlar: 9511
Kayıt: 30 Ağu 2024, 20:48
cinsiyet: Erkek
Teşekkür etti: 932 kez
Teşekkür edildi: 7046 kez

Re: TETRİS 9999 in 1 Oyunu (Test)

Mesaj gönderen Kayserilifatih »

Bende de çocukken vardı kullanırdım sonra birden ortamdan yok oldu neden oldu bilmiyorum
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15218
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2526 kez
Teşekkür edildi: 5344 kez

Python TK Tetris Suite Geliyor...

Mesaj gönderen TRWE_2012 »

Merhabalar

Önce "BETA" versiyonun (sürüm 3) ekran görüntülerini verelim.(GNU/Linux)

Resim
Resim
Resim
BETA Sürüm 3'ün Kaynak Kodları :

Kod: Tümünü seç

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# =============================================================================
# Project      : Brick Game 9999-in-1  — Python / Tkinter Port
# Original     : https://github.com/vitalibo/Brick-Game-9999-in-1  (Java)
# Games        : 0001-Snake  0002-Race  0003-Tetris  0004-Shoot  0005-Tanks
# Board        : 20 rows × 10 cols  |  Preview : 4 × 4
# Platform     : GNU/Linux Mint 22.2 MATE x64  |  Windows 11 24H2 x64
# Python       : 3.8+  (stdlib only: tkinter, random, collections, copy)
# Controls     : Arrow keys = move  |  Space = rotate/fire
#                P = Pause  S = Sound (stub)  R = Reset
# =============================================================================

import os
import sys

# ---------------------------------------------------------------------------
# VENV BOOTSTRAPPER  (v1.1 - robust)
# ---------------------------------------------------------------------------
VENV_DIR       = "/home/linuxmaster/python-toolchain"
_SENTINEL_FLAG = "_VENV_BOOTSTRAP_DONE"
_candidates    = [
    os.path.join(VENV_DIR, "bin", "python3"),
    os.path.join(VENV_DIR, "bin", "python"),
    os.path.join(VENV_DIR, "Scripts", "python.exe"),
]

def _venv_is_healthy():
    lib = os.path.join(VENV_DIR, "lib")
    if os.path.isdir(lib):
        for e in os.listdir(lib):
            if os.path.isdir(os.path.join(lib, e, "site-packages")):
                return True
    return os.path.isdir(os.path.join(VENV_DIR, "Lib", "site-packages"))

def _bootstrap_venv():
    if os.environ.get(_SENTINEL_FLAG) == "1":
        return
    inside = os.path.normcase(os.path.realpath(sys.executable)).startswith(
        os.path.normcase(os.path.realpath(VENV_DIR)))
    if inside or not _venv_is_healthy():
        return
    for c in _candidates:
        if os.path.isfile(c):
            os.environ[_SENTINEL_FLAG] = "1"
            os.execv(c, [c] + sys.argv)

_bootstrap_venv()

# ---------------------------------------------------------------------------
import tkinter as tk
import random
import copy
from collections import deque

# ---------------------------------------------------------------------------
# CONSTANTS
# ---------------------------------------------------------------------------
ROWS, COLS     = 20, 10
PREV_R, PREV_C = 4, 4
CELL           = 24          # cell pixel size
GAP            = 2           # gap between cells

# Golden ratio padding
PHI    = (1 + 5 ** 0.5) / 2          # ≈ 1.6180
PAD_H  = 20                           # horizontal margin (px)
PAD_V  = round(PAD_H * PHI)           # vertical  margin (px) ≈ 32
MAX_SCORE      = 999999
MAX_SPEED      = 15
MAX_LEVEL      = 15

# Colors
C_ON      = "#1a7a00"        # lit cell
C_OFF     = "#c8e8b0"        # unlit cell
C_BG      = "#8a9a60"        # board background
C_BORDER  = "#2a3a10"
C_SIDE    = "#4a5a30"
C_TEXT    = "#e8f8c0"
C_RED     = "#cc2200"

# Speed → tick ms mapping (lower=faster)
def speed_ms(speed):
    return max(60, 700 - speed * 45)

# ---------------------------------------------------------------------------
# HELPERS
# ---------------------------------------------------------------------------

def empty_board():
    return [[False]*COLS for _ in range(ROWS)]

def empty_prev():
    return [[False]*PREV_C for _ in range(PREV_R)]

def in_bounds(r, c, rows=ROWS, cols=COLS):
    return 0 <= r < rows and 0 <= c < cols

# ---------------------------------------------------------------------------
# TETRIS PIECES  — (rotations as list of (dr,dc) offset lists)
# ---------------------------------------------------------------------------
TETROMINOES = {
    'I': [[(0,0),(0,1),(0,2),(0,3)],
          [(0,0),(1,0),(2,0),(3,0)]],
    'O': [[(0,0),(0,1),(1,0),(1,1)]],
    'T': [[(0,0),(0,1),(0,2),(1,1)],
          [(0,0),(1,0),(2,0),(1,1)],  # corrected
          [(1,0),(1,1),(1,2),(0,1)],
          [(0,1),(1,1),(2,1),(1,0)]],
    'S': [[(0,1),(0,2),(1,0),(1,1)],
          [(0,0),(1,0),(1,1),(2,1)]],
    'Z': [[(0,0),(0,1),(1,1),(1,2)],
          [(0,1),(1,0),(1,1),(2,0)]],
    'J': [[(0,0),(1,0),(2,0),(2,1)],
          [(0,0),(0,1),(0,2),(1,0)],
          [(0,0),(0,1),(1,1),(2,1)],
          [(0,2),(1,0),(1,1),(1,2)]],
    'L': [[(0,0),(1,0),(2,0),(2,1)],    # reuse with mirror logic
          [(0,0),(0,1),(0,2),(1,2)],
          [(0,0),(0,1),(1,0),(2,0)],
          [(0,0),(1,0),(1,1),(1,2)]],
}
TETRO_NAMES = list(TETROMINOES.keys())

# ---------------------------------------------------------------------------
# GAME STATE
# ---------------------------------------------------------------------------
class State:
    MENU      = "menu"
    RUNNING   = "running"
    PAUSED    = "paused"
    GAME_OVER = "game_over"

# ---------------------------------------------------------------------------
# BASE GAME
# ---------------------------------------------------------------------------
class BaseGame:
    def __init__(self, app):
        self.app   = app
        self.board = empty_board()

    def init(self): pass
    def update(self): pass
    def key(self, k): pass

    def draw_board(self):
        self.app.render_board(self.board)

    def game_over(self):
        self.app.trigger_game_over()

# ===========================================================================
# GAME 1 — SNAKE
# ===========================================================================
class SnakeGame(BaseGame):

    DIR = {'Up':(-1,0), 'Down':(1,0), 'Left':(0,-1), 'Right':(0,1)}
    REVERSE = {'Up':'Down','Down':'Up','Left':'Right','Right':'Left'}

    def init(self):
        self.body = deque([(10,4),(10,5),(10,6)])
        self.direction  = 'Right'
        self.next_dir   = 'Right'
        self.food       = None
        self.spawn_food()
        self.app.lives  = 3
        self.app.score  = 0

    def spawn_food(self):
        body_set = set(self.body)
        free = [(r,c) for r in range(ROWS) for c in range(COLS) if (r,c) not in body_set]
        self.food = random.choice(free) if free else None

    def update(self):
        self.direction = self.next_dir
        dr, dc = self.DIR[self.direction]
        hr, hc = self.body[-1]
        nr, nc = hr+dr, hc+dc

        if not in_bounds(nr, nc) or (nr, nc) in set(self.body):
            self.app.lives -= 1
            if self.app.lives <= 0:
                self.game_over()
            else:
                self.init()
            return

        self.body.append((nr, nc))
        if (nr, nc) == self.food:
            self.app.score = min(MAX_SCORE, self.app.score + 10)
            self.spawn_food()
            if len(self.body) > 33:
                self.app.advance_level()
                self.init()
        else:
            self.body.popleft()

        self._render()

    def key(self, k):
        if k in self.DIR and k != self.REVERSE.get(self.direction):
            self.next_dir = k
        elif k == 'space':
            self.update()

    def _render(self):
        b = empty_board()
        for r,c in self.body:
            if in_bounds(r,c): b[r][c] = True
        if self.food:
            r,c = self.food
            if in_bounds(r,c): b[r][c] = True
        self.board = b
        self.draw_board()

# ===========================================================================
# GAME 2 — RACE
# ===========================================================================
class RaceGame(BaseGame):

    CAR_SHAPE = [(0,0),(0,2),(1,0),(1,1),(1,2),(2,0),(2,2)]  # 3×3 car

    def init(self):
        self.player_col = 4       # top-left col of player car
        self.player_row = 16
        self.enemies    = []      # list of [row, col]
        self.road_lines = []      # list of row positions for dashed lines
        for r in range(0, ROWS, 4):
            self.road_lines.append(r)
        self.traffic    = 0
        self.app.score  = 0
        self.app.lives  = 3
        self._spawn_enemy()

    def _spawn_enemy(self):
        cols = [0, 2, 4, 6, 8]
        c = random.choice(cols)
        self.enemies.append([0, c])

    def update(self):
        # move road lines
        self.road_lines = [(r+1) % ROWS for r in self.road_lines]
        # move enemies
        for e in self.enemies:
            e[0] += 1
        self.enemies = [e for e in self.enemies if e[0] < ROWS]
        self.traffic += 1
        if self.traffic % 9 == 0:
            self._spawn_enemy()
            if len(self.enemies) > 3:
                self.enemies.pop(0)
        self.app.score = min(MAX_SCORE, self.app.score + 10)
        self._check_crash()
        self._render()
        if self.traffic >= 1000:
            self.traffic = 0
            self.app.advance_level()

    def _player_cells(self, row, col):
        return {(row+dr, col+dc) for dr,dc in self.CAR_SHAPE if in_bounds(row+dr, col+dc)}

    def _check_crash(self):
        pc = self._player_cells(self.player_row, self.player_col)
        for e in self.enemies:
            ec = self._player_cells(e[0], e[1])
            if pc & ec:
                self.app.lives -= 1
                if self.app.lives <= 0:
                    self.game_over()
                else:
                    self.init()
                return

    def key(self, k):
        if k == 'Left'  and self.player_col > 0:
            self.player_col -= 1
            self._check_crash(); self._render()
        elif k == 'Right' and self.player_col < COLS-3:
            self.player_col += 1
            self._check_crash(); self._render()
        elif k == 'Up':
            self.update()

    def _render(self):
        b = empty_board()
        # road center dashes
        for r in self.road_lines:
            if in_bounds(r, 5): b[r][5] = True
        # enemies
        for e in self.enemies:
            for dr,dc in self.CAR_SHAPE:
                r,c = e[0]+dr, e[1]+dc
                if in_bounds(r,c): b[r][c] = True
        # player
        for dr,dc in self.CAR_SHAPE:
            r,c = self.player_row+dr, self.player_col+dc
            if in_bounds(r,c): b[r][c] = True
        self.board = b
        self.draw_board()

# ===========================================================================
# GAME 3 — TETRIS
# ===========================================================================
class TetrisGame(BaseGame):

    def init(self):
        self.locked = empty_board()
        self.piece  = self._new_piece()
        self.next_p = self._new_piece()
        self.app.score = 0
        self._render_preview()
        self._render()

    def _new_piece(self):
        name = random.choice(TETRO_NAMES)
        return {'name':name, 'rot':0, 'row':0, 'col':3}

    def _cells(self, p):
        shape = TETROMINOES[p['name']][p['rot'] % len(TETROMINOES[p['name']])]
        return [(p['row']+dr, p['col']+dc) for dr,dc in shape]

    def _valid(self, p):
        for r,c in self._cells(p):
            if not in_bounds(r,c) or (r>=0 and self.locked[r][c]):
                return False
        return True

    def update(self):
        moved = copy.deepcopy(self.piece)
        moved['row'] += 1
        if self._valid(moved):
            self.piece = moved
        else:
            # lock
            for r,c in self._cells(self.piece):
                if in_bounds(r,c): self.locked[r][c] = True
            lines = self._clear_lines()
            if lines:
                self.app.score = min(MAX_SCORE, self.app.score + lines*100)
            self.piece = self.next_p
            self.next_p = self._new_piece()
            self._render_preview()
            if not self._valid(self.piece):
                self.game_over()
                return
        self._render()

    def _clear_lines(self):
        full = [r for r in range(ROWS) if all(self.locked[r])]
        for r in full:
            del self.locked[r]
            self.locked.insert(0, [False]*COLS)
        return len(full)

    def key(self, k):
        p = copy.deepcopy(self.piece)
        if   k == 'Left':  p['col'] -= 1
        elif k == 'Right': p['col'] += 1
        elif k == 'Down':  p['row'] += 1
        elif k in ('Up','space'):
            p['rot'] = (p['rot']katılıyorum) % len(TETROMINOES[p['name']])
        if self._valid(p):
            self.piece = p
            self._render()

    def _render_preview(self):
        pv = empty_prev()
        shape = TETROMINOES[self.next_p['name']][0]
        for dr,dc in shape:
            r,c = dr, dc
            if in_bounds(r,c,PREV_R,PREV_C): pv[r][c] = True
        self.app.render_preview(pv)

    def _render(self):
        b = [row[:] for row in self.locked]
        for r,c in self._cells(self.piece):
            if in_bounds(r,c): b[r][c] = True
        self.board = b
        self.draw_board()

# ===========================================================================
# GAME 4 — SHOOT  (Space Invaders style)
# ===========================================================================
class ShootGame(BaseGame):

    ROWS_ARMY = 3
    COLS_ARMY = 8

    def init(self):
        self.gun_col  = COLS//2
        self.gun_row  = ROWS-1
        self.bullets  = []   # list of [row, col]
        self.army     = []   # list of [row, col]
        self._spawn_army()
        self.army_dir = 1    # 1=right, -1=left
        self.app.lives = 3
        self.app.score = 0
        self._render()

    def _spawn_army(self):
        self.army = []
        for r in range(self.ROWS_ARMY):
            for c in range(self.COLS_ARMY):
                self.army.append([r, c+1])

    def update(self):
        # Move army
        if self.army:
            max_c = max(e[1] for e in self.army)
            min_c = min(e[1] for e in self.army)
            if max_c >= COLS-1:
                self.army_dir = -1
                for e in self.army: e[0] += 1
            elif min_c <= 0:
                self.army_dir = 1
                for e in self.army: e[0] += 1
            else:
                for e in self.army: e[1] += self.army_dir

            # Army reached bottom
            if self.army and max(e[0] for e in self.army) >= self.gun_row:
                self.app.lives -= 1
                if self.app.lives <= 0:
                    self.game_over()
                else:
                    self.init()
                return

        # Move bullets up
        self.bullets = [[r-1,c] for r,c in self.bullets if r-1 >= 0]

        # Check hits
        bullet_set = {(r,c) for r,c in self.bullets}
        army_set   = {(r,c) for r,c in self.army}
        hits = bullet_set & army_set
        if hits:
            self.bullets = [[r,c] for r,c in self.bullets if (r,c) not in hits]
            self.army    = [[r,c] for r,c in self.army    if (r,c) not in hits]
            self.app.score = min(MAX_SCORE, self.app.score + len(hits)*10)

        if not self.army:
            self.app.advance_level()
            self._spawn_army()

        self._render()

    def key(self, k):
        if   k == 'Left'  and self.gun_col > 0:     self.gun_col -= 1
        elif k == 'Right' and self.gun_col < COLS-1: self.gun_col += 1
        elif k in ('Up','space'):
            self.bullets.append([self.gun_row-1, self.gun_col])
        self._render()

    def _render(self):
        b = empty_board()
        b[self.gun_row][self.gun_col] = True
        # gun base
        if self.gun_row-1 >= 0: b[self.gun_row-1][self.gun_col] = False  # barrel drawn above
        for r,c in self.bullets:
            if in_bounds(r,c): b[r][c] = True
        for r,c in self.army:
            if in_bounds(r,c): b[r][c] = True
        # gun shape: 3 cells
        for dc in [-1,0,1]:
            if in_bounds(self.gun_row, self.gun_col+dc):
                b[self.gun_row][self.gun_col+dc] = True
        if in_bounds(self.gun_row-1, self.gun_col):
            b[self.gun_row-1][self.gun_col] = True
        self.board = b
        self.draw_board()

# ===========================================================================
# GAME 5 — TANKS
# ===========================================================================
class TanksGame(BaseGame):

    # Tank shapes per direction: (dr,dc) offsets, 3×3
    TANK = {
        'Up':    [(-1,0),(0,-1),(0,0),(0,1),(1,-1),(1,0),(1,1)],
        'Down':  [(1,0), (0,-1),(0,0),(0,1),(-1,-1),(-1,0),(-1,1)],
        'Left':  [(0,-1),(-1,0),(0,0),(1,0),(-1,1),(0,1),(1,1)],
        'Right': [(0,1), (-1,0),(0,0),(1,0),(-1,-1),(0,-1),(1,-1)],
    }

    def init(self):
        self.p_row, self.p_col = 15, 5
        self.p_dir  = 'Up'
        self.p_shot = None    # [row, col, dir]
        self.enemies = []     # [row, col, dir]
        self.e_shots = []
        for _ in range(3):
            self._spawn_enemy()
        self.app.score = 0
        self.app.lives = 3
        self._render()

    def _spawn_enemy(self):
        attempts = 0
        while attempts < 20:
            r = random.randint(1,5)
            c = random.randint(1,8)
            d = random.choice(['Down','Left','Right'])
            self.enemies.append([r,c,d])
            return
            attempts += 1

    def _tank_cells(self, row, col, direction):
        shape = {
            'Up':   [(-1,0),(0,-1),(0,0),(0,1),(1,-1),(1,0),(1,1)],
            'Down': [(1,0), (0,-1),(0,0),(0,1),(-1,-1),(-1,0),(-1,1)],
            'Left': [(0,-1),(-1,0),(0,0),(1,0),(-1,1),(0,1),(1,1)],
            'Right':[(0,1), (-1,0),(0,0),(1,0),(-1,-1),(0,-1),(1,-1)],
        }[direction]
        return [(row+dr, col+dc) for dr,dc in shape if in_bounds(row+dr, col+dc)]

    def _move_dir(self, row, col, d, step=1):
        offsets = {'Up':(-1,0),'Down':(1,0),'Left':(0,-1),'Right':(0,1)}
        dr,dc = offsets[d]
        return row+dr*step, col+dc*step

    def update(self):
        # AI move enemies
        for e in self.enemies:
            if random.random() < 0.3:
                e[2] = random.choice(['Up','Down','Left','Right'])
            nr,nc = self._move_dir(e[0],e[1],e[2])
            if in_bounds(nr,nc):
                e[0],e[1] = nr,nc
            # AI fire
            if random.random() < 0.15:
                sr,sc = self._move_dir(e[0],e[1],e[2])
                self.e_shots.append([sr,sc,e[2]])

        # Move shots
        if self.p_shot:
            r,c,d = self.p_shot
            nr,nc = self._move_dir(r,c,d)
            if in_bounds(nr,nc): self.p_shot = [nr,nc,d]
            else: self.p_shot = None

        new_e_shots = []
        for s in self.e_shots:
            r,c,d = s
            nr,nc = self._move_dir(r,c,d)
            if in_bounds(nr,nc): new_e_shots.append([nr,nc,d])
        self.e_shots = new_e_shots

        # Hit detection: player shot → enemies
        if self.p_shot:
            pr,pc,_ = self.p_shot
            killed = [e for e in self.enemies
                      if (pr,pc) in [(e[0]+dr,e[1]+dc)
                          for dr,dc in [(0,0),(-1,0),(1,0),(0,-1),(0,1)]]]
            if killed:
                for e in killed: self.enemies.remove(e)
                self.app.score = min(MAX_SCORE, self.app.score + 100*len(killed))
                self.p_shot = None

        # Enemy shot → player
        p_cells = set(self._tank_cells(self.p_row, self.p_col, self.p_dir))
        for s in self.e_shots:
            if (s[0],s[1]) in p_cells:
                self.app.lives -= 1
                self.e_shots.remove(s)
                if self.app.lives <= 0:
                    self.game_over()
                    return
                break

        # Respawn enemies
        while len(self.enemies) < 3:
            self._spawn_enemy()

        self._render()

    def key(self, k):
        if k in ('Up','Down','Left','Right'):
            self.p_dir = k
            nr,nc = self._move_dir(self.p_row, self.p_col, k)
            if in_bounds(nr, nc):
                self.p_row, self.p_col = nr, nc
        elif k == 'space':
            sr,sc = self._move_dir(self.p_row, self.p_col, self.p_dir)
            if in_bounds(sr,sc):
                self.p_shot = [sr,sc,self.p_dir]
        self._render()

    def _render(self):
        b = empty_board()
        # enemies
        for e in self.enemies:
            for r,c in self._tank_cells(e[0],e[1],e[2]):
                b[r][c] = True
        # player
        for r,c in self._tank_cells(self.p_row,self.p_col,self.p_dir):
            b[r][c] = True
        # shots
        if self.p_shot:
            r,c,_ = self.p_shot
            if in_bounds(r,c): b[r][c] = True
        for s in self.e_shots:
            r,c,_ = s
            if in_bounds(r,c): b[r][c] = True
        self.board = b
        self.draw_board()

# ===========================================================================
# MENU GAME  (shows 4-digit number on board)
# ===========================================================================
DIGIT_SHAPES = [
    [[0,1,1,0],[1,0,0,1],[1,0,0,1],[1,0,0,1],[0,1,1,0]],  # 0
    [[0,0,1,0],[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,1,1,1]],  # 1
    [[0,1,1,1],[0,0,0,1],[0,1,1,1],[0,1,0,0],[0,1,1,1]],  # 2
    [[0,1,1,1],[0,0,0,1],[0,1,1,1],[0,0,0,1],[0,1,1,1]],  # 3
    [[0,1,0,1],[0,1,0,1],[0,1,1,1],[0,0,0,1],[0,0,0,1]],  # 4
    [[0,1,1,1],[0,1,0,0],[0,1,1,1],[0,0,0,1],[0,1,1,1]],  # 5
    [[0,1,1,1],[0,1,0,0],[0,1,1,1],[0,1,0,1],[0,1,1,1]],  # 6
    [[0,1,1,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],  # 7
    [[0,1,1,1],[0,1,0,1],[0,1,1,1],[0,1,0,1],[0,1,1,1]],  # 8
    [[0,1,1,1],[0,1,0,1],[0,1,1,1],[0,0,0,1],[0,1,1,1]],  # 9
]

DIGIT_POSITIONS = [(14,5),(10,1),(5,5),(1,1)]  # row,col for each digit (units→thousands)

def draw_number_on_board(n):
    b = empty_board()
    digits = [(n // (10**i)) % 10 for i in range(4)]
    for idx, digit in enumerate(digits):
        shape = DIGIT_SHAPES[digit]
        sr, sc = DIGIT_POSITIONS[idx]
        for dr in range(5):
            for dc in range(4):
                if shape[dr][dc]:
                    r,c = sr+dr, sc+dc
                    if in_bounds(r,c): b[r][c] = True
    return b

# ===========================================================================
# MAIN APPLICATION
# ===========================================================================
GAME_CLASSES = [SnakeGame, RaceGame, TetrisGame, ShootGame, TanksGame]
GAME_NAMES   = ["Snake","Race","Tetris","Shoot","Tanks"]

class BrickGameApp:

    def __init__(self, root):
        self.root    = root
        root.title("Brick Game 9999-in-1")
        root.resizable(False, False)
        root.configure(bg=C_SIDE)

        # Game state
        self.state      = State.MENU
        self.game_num   = 1          # 1-based; menu shows 0001-9999, maps to % 5
        self.score      = 0
        self.speed      = 1
        self.level      = 1
        self.lives      = 3
        self.sound      = False
        self.current    = None
        self._after_id  = None
        # Cached board states for diff-based rendering
        # Only cells that actually changed are redrawn → near-zero input lag
        self._board_cache = [[None]*COLS for _ in range(ROWS)]
        self._prev_cache  = [[None]*PREV_C for _ in range(PREV_R)]

        self._build_ui()
        self._center()
        root.bind("<KeyPress>", self._on_key)
        root.protocol("WM_DELETE_WINDOW", self._on_quit)
        self._show_menu()

    # ------------------------------------------------------------------
    # UI BUILD
    # ------------------------------------------------------------------

    def _build_ui(self):
        # Outer frame — golden ratio padding: horizontal PAD_H, vertical PAD_V
        outer_frame = tk.Frame(self.root, bg=C_SIDE)
        outer_frame.grid(row=0, column=0, padx=PAD_H, pady=PAD_V)

        board_w = COLS*(CELL+GAP)+GAP
        board_h = ROWS*(CELL+GAP)+GAP

        self.cv_board = tk.Canvas(outer_frame,
            width=board_w, height=board_h,
            bg=C_BG, highlightthickness=2, highlightbackground=C_BORDER)
        self.cv_board.grid(row=0, column=0, padx=(0, 8), pady=0)

        # pre-create board cells
        self._cells = []
        for r in range(ROWS):
            row_cells = []
            for c in range(COLS):
                x0 = GAP + c*(CELL+GAP)
                y0 = GAP + r*(CELL+GAP)
                rect = self.cv_board.create_rectangle(
                    x0, y0, x0+CELL, y0+CELL,
                    fill=C_OFF, outline=C_BG, width=1)
                row_cells.append(rect)
            self._cells.append(row_cells)

        # ---- RIGHT: sidebar ----
        side = tk.Frame(outer_frame, bg=C_SIDE)
        side.grid(row=0, column=1, padx=(0, 0), pady=0, sticky="ns")

        tk.Label(side, text="BRICK GAME", bg=C_SIDE, fg=C_TEXT,
                 font=("Courier",10,"bold")).pack(pady=(0,8))

        # Score
        tk.Label(side, text="SCORE", bg=C_SIDE, fg=C_TEXT,
                 font=("Courier",8)).pack()
        self.lbl_score = tk.Label(side, text="000000", bg=C_SIDE, fg=C_TEXT,
                                  font=("Courier",14,"bold"))
        self.lbl_score.pack(pady=(0,8))

        # Level / Speed
        sf = tk.Frame(side, bg=C_SIDE); sf.pack(fill=tk.X, padx=4)
        tk.Label(sf,text="LV",bg=C_SIDE,fg=C_TEXT,font=("Courier",8)).grid(row=0,column=0,padx=4)
        tk.Label(sf,text="SP",bg=C_SIDE,fg=C_TEXT,font=("Courier",8)).grid(row=0,column=1,padx=4)
        self.lbl_lv = tk.Label(sf,text="01",bg=C_SIDE,fg=C_TEXT,font=("Courier",12,"bold"))
        self.lbl_sp = tk.Label(sf,text="01",bg=C_SIDE,fg=C_TEXT,font=("Courier",12,"bold"))
        self.lbl_lv.grid(row=1,column=0,padx=4)
        self.lbl_sp.grid(row=1,column=1,padx=4)

        # Lives
        tk.Label(side,text="LIVES",bg=C_SIDE,fg=C_TEXT,font=("Courier",8)).pack(pady=(8,0))
        self.lbl_lives = tk.Label(side,text="♥♥♥",bg=C_SIDE,fg=C_RED,
                                  font=("Courier",14))
        self.lbl_lives.pack()

        # Preview
        tk.Label(side,text="NEXT",bg=C_SIDE,fg=C_TEXT,font=("Courier",8)).pack(pady=(8,0))
        prev_w = PREV_C*(CELL+GAP)+GAP
        prev_h = PREV_R*(CELL+GAP)+GAP
        self.cv_prev = tk.Canvas(side, width=prev_w, height=prev_h,
            bg=C_BG, highlightthickness=1, highlightbackground=C_BORDER)
        self.cv_prev.pack()
        self._prev_cells = []
        for r in range(PREV_R):
            row_c = []
            for c in range(PREV_C):
                x0 = GAP + c*(CELL+GAP)
                y0 = GAP + r*(CELL+GAP)
                rect = self.cv_prev.create_rectangle(
                    x0, y0, x0+CELL, y0+CELL,
                    fill=C_OFF, outline=C_BG, width=1)
                row_c.append(rect)
            self._prev_cells.append(row_c)

        # Game name
        self.lbl_game = tk.Label(side,text="MENU",bg=C_SIDE,fg=C_TEXT,
                                 font=("Courier",9,"bold"))
        self.lbl_game.pack(pady=(10,0))

        # Controls hint
        hint = ("← → move\n↑ ↓ move/speed\n"
                "SPACE fire/rotate\n"
                "P pause  R reset\n"
                "S sound (stub)")
        tk.Label(side,text=hint,bg=C_SIDE,fg=C_TEXT,
                 font=("Courier",7),justify=tk.LEFT).pack(pady=(8,0))

        # Status
        self.lbl_status = tk.Label(side,text="Press SPACE to play",
            bg=C_SIDE,fg=C_TEXT,font=("Courier",8),wraplength=120,justify=tk.CENTER)
        self.lbl_status.pack(pady=(8,0))

    # ------------------------------------------------------------------
    # RENDERING  — diff-based: only changed cells are redrawn
    # Typical Tetris frame: 4-8 cells change → 4-8 itemconfig calls
    # vs. previous 200 calls every frame → input lag eliminated
    # ------------------------------------------------------------------

    def render_board(self, board):
        cache = self._board_cache
        cells = self._cells
        for r in range(ROWS):
            for c in range(COLS):
                v = board[r][c]
                if v != cache[r][c]:
                    cache[r][c] = v
                    self.cv_board.itemconfig(
                        cells[r][c], fill=C_ON if v else C_OFF)

    def render_preview(self, pv):
        cache = self._prev_cache
        cells = self._prev_cells
        for r in range(PREV_R):
            for c in range(PREV_C):
                v = pv[r][c]
                if v != cache[r][c]:
                    cache[r][c] = v
                    self.cv_prev.itemconfig(
                        cells[r][c], fill=C_ON if v else C_OFF)

    def _invalidate_board_cache(self):
        """Force a full redraw on next render_board call (e.g. after menu/reset)."""
        self._board_cache = [[None]*COLS  for _ in range(ROWS)]
        self._prev_cache  = [[None]*PREV_C for _ in range(PREV_R)]

    def _update_sidebar(self):
        self.lbl_score.config(text=f"{self.score:06d}")
        self.lbl_lv.config(text=f"{self.level:02d}")
        self.lbl_sp.config(text=f"{self.speed:02d}")
        hearts = "♥" * self.lives + "♡" * (3-self.lives)
        self.lbl_lives.config(text=hearts)

    # ------------------------------------------------------------------
    # MENU
    # ------------------------------------------------------------------

    def _show_menu(self):
        self.state = State.MENU
        if self._after_id:
            self.root.after_cancel(self._after_id)
            self._after_id = None
        self._invalidate_board_cache()
        b = draw_number_on_board(self.game_num)
        self.render_board(b)
        self.render_preview(empty_prev())
        idx = (self.game_num-1) % len(GAME_CLASSES)
        self.lbl_game.config(text=GAME_NAMES[idx])
        self.lbl_status.config(text="← → select game\n↑ speed  ↓ level\nSPACE to start")
        self._update_sidebar()

    # ------------------------------------------------------------------
    # GAME START / LOOP
    # ------------------------------------------------------------------

    def _start_game(self):
        self.state = State.RUNNING
        idx = (self.game_num-1) % len(GAME_CLASSES)
        self.current = GAME_CLASSES[idx](self)
        self.current.init()
        self.lbl_game.config(text=GAME_NAMES[idx])
        self.lbl_status.config(text="P=pause  R=reset")
        self._schedule()

    def _schedule(self):
        if self.state == State.RUNNING:
            self._after_id = self.root.after(speed_ms(self.speed), self._tick)

    def _tick(self):
        if self.state != State.RUNNING:
            return
        if self.current:
            self.current.update()
        self._update_sidebar()
        self._schedule()

    # ------------------------------------------------------------------
    # LEVEL / SPEED HELPERS  (called by games)
    # ------------------------------------------------------------------

    def advance_level(self):
        if self.speed < MAX_SPEED:
            self.speed += 1
        else:
            self.speed = 1
            if self.level < MAX_LEVEL:
                self.level += 1

    # ------------------------------------------------------------------
    # GAME OVER
    # ------------------------------------------------------------------

    def trigger_game_over(self):
        self.state = State.GAME_OVER
        if self._after_id:
            self.root.after_cancel(self._after_id)
            self._after_id = None
        # Flash GAME OVER
        self.lbl_status.config(text="GAME OVER\nPress R to reset\nSPACE for menu")
        self._flash(0)

    def _flash(self, count):
        if self.state != State.GAME_OVER:
            return
        board = empty_board() if count % 2 == 0 else self.current.board
        self.render_board(board)
        if count < 6:
            self.root.after(300, lambda: self._flash(count+1))

    # ------------------------------------------------------------------
    # KEY HANDLER
    # ------------------------------------------------------------------

    def _on_key(self, event):
        k = event.keysym   # 'Up','Down','Left','Right','space','p','r','s'

        if k.lower() == 'r':
            self._reset()
            return
        if k.lower() == 'p' and self.state in (State.RUNNING, State.PAUSED):
            self._toggle_pause()
            return
        if k.lower() == 's':
            self.sound = not self.sound
            return

        if self.state == State.MENU:
            if   k == 'Left':  self.game_num = max(1, self.game_num-1); self._show_menu()
            elif k == 'Right': self.game_num = min(9999, self.game_num+1); self._show_menu()
            elif k == 'Up'   and self.speed < MAX_SPEED: self.speed += 1; self._show_menu()
            elif k == 'Down' and self.level < MAX_LEVEL: self.level += 1; self._show_menu()
            elif k == 'space': self._start_game()

        elif self.state == State.RUNNING:
            if self.current:
                self.current.key(k if k != 'space' else 'space')
                self._update_sidebar()

        elif self.state == State.GAME_OVER:
            if k == 'space': self._show_menu()

    def _toggle_pause(self):
        if self.state == State.RUNNING:
            self.state = State.PAUSED
            if self._after_id:
                self.root.after_cancel(self._after_id)
                self._after_id = None
            self.lbl_status.config(text="PAUSED\nP to continue")
        else:
            self.state = State.RUNNING
            self.lbl_status.config(text="P=pause  R=reset")
            self._schedule()

    def _reset(self):
        self.score = 0
        self.level = 1
        self.speed = 1
        self.lives = 3
        if self._after_id:
            self.root.after_cancel(self._after_id)
            self._after_id = None
        self._show_menu()

    # ------------------------------------------------------------------
    # MISC
    # ------------------------------------------------------------------

    def _center(self):
        self.root.update_idletasks()
        w  = self.root.winfo_width()
        h  = self.root.winfo_height()
        sw = self.root.winfo_screenwidth()
        sh = self.root.winfo_screenheight()
        self.root.geometry(f"+{(sw-w)//2}+{(sh-h)//2}")

    def _on_quit(self):
        if self._after_id:
            self.root.after_cancel(self._after_id)
        self.root.destroy()

# ---------------------------------------------------------------------------
# ENTRY POINT
# ---------------------------------------------------------------------------

def main():
    root = tk.Tk()
    BrickGameApp(root)
    root.mainloop()
    input("\nPress ENTER to exit.")

if __name__ == "__main__":
    main()
Nihai , kararlı sürüme ulaşınca ayrı forum konusu açacağım...Şimdilik betasıyla iyi eğlenceler
Cevapla