264 Commits
Author SHA1 Message Date
kennyboy55 b4d0706443 Fix for empty object array 2015-07-09 22:35:06 +02:00
kennyboy55 5c239b17f7 Made the game more difficult 2015-07-09 22:34:56 +02:00
jancoow 78acc6aa5f SQLFix 2015-07-09 22:33:08 +02:00
kennyboy55 55f9c1a623 Removed old code 2015-07-09 22:00:36 +02:00
kennyboy55 d322e0ca3f Changed timing slightly 2015-07-09 22:00:17 +02:00
kennyboy55 04ad4edc2b Merge remote-tracking branch 'origin/bugfix/general' into bugfix/general 2015-07-09 21:40:02 +02:00
kennyboy55 675daadd13 Possible fix for audio stopping 2015-07-09 21:39:37 +02:00
kennyboy55 137eb5384f Fixed wrong highscores 2015-07-09 21:39:27 +02:00
kennyboy55 9d50e6d9f9 Added more time to win 2015-07-09 21:39:19 +02:00
jancoow 06a3d74445 Undecorated window on arcade 2015-07-09 21:27:09 +02:00
kennyboy55 7ebf6a18e8 Fix selecting wrong difficulty 2015-07-09 21:26:14 +02:00
kennyboy55 4250e99682 Fix preplay-state only showing once 2015-07-09 21:25:55 +02:00
kennyboy55 c0123378aa Added current difficulty 2015-07-09 21:17:12 +02:00
kennyboy55 cb57ce7fe6 Fix for ledstrip 2015-07-09 20:13:17 +02:00
kennyboy55 b39e62d69b Oops... 2015-07-09 16:49:55 +02:00
kennyboy55 86cec99367 Added LedStrip effects 2015-07-09 16:48:54 +02:00
kennyboy55 fc21037006 Moved SongHandler 2015-07-09 16:48:42 +02:00
kennyboy55 da934f7111 Changed variable name 2015-07-09 16:26:30 +02:00
kennyboy55 f771fb4e2d Draw copyright on top. Made frames slower 2015-07-09 16:26:19 +02:00
kennyboy55 e32165f654 Changed variable name 2015-07-09 16:25:52 +02:00
kennyboy55 67455ccd72 Finally removed GameOverState 2015-07-09 16:25:43 +02:00
kennyboy55 6dda54928c Changed variable name 2015-07-09 16:25:28 +02:00
kennyboy55 56710c1b46 Added timeout before you can send your highscore 2015-07-09 16:25:05 +02:00
kennyboy55 b81c5c73f9 Changed first button color 2015-07-09 16:24:34 +02:00
jancoow 3f08675d9e Feature/daniel info panel
# Conflicts:
#	model/objects/DifficultyButton.java
2015-07-09 14:50:33 +02:00
jancoow f3f1a11a75 Fixed nullpointer exception when highsore doesn't exist 2015-07-09 13:37:41 +02:00
Dofensmirtsz 1edab2daac screenshot verandert 2015-07-09 13:07:03 +02:00
jancoow e739255d23 Feature/sub screen fix 2015-07-09 12:56:45 +02:00
jancoow 201fa6d0b1 Bug: Added missing image 2015-07-09 12:55:02 +02:00
jancoow cc69ad63c3 Feature/title screen kast fix 2015-07-09 12:47:14 +02:00
kennyboy55 749c80c748 Merge remote-tracking branch 'origin/develop' into develop 2015-07-09 12:42:37 +02:00
Dofensmirtsz bac38b5aa5 locatie kast fix 2015-07-09 12:40:25 +02:00
Dofensmirtsz effbcc3670 kast vervangen door nieuw plaatje 2015-07-09 12:38:46 +02:00
Dofensmirtsz 8c858e93e1 kast veranderd 2015-07-09 12:38:35 +02:00
kennyboy55 a6f7177084 Added button color 2015-07-09 12:38:22 +02:00
Dofensmirtsz 2c3cdd4d15 nummer toegevoegt, locatie alles gefixt 2015-07-09 12:34:14 +02:00
Dofensmirtsz 764fc33836 randje gefixt 2015-07-09 12:33:37 +02:00
jancoow 713cfaf836 Fixed endless scrolling and removed cursor on rasp 2015-07-09 12:30:04 +02:00
Dofensmirtsz 9380506d06 QWERTY 2015-07-09 12:18:24 +02:00
kennyboy55 61fdeb27c5 Merge pull request #26 from ProjectGroepA2/feature/HelpVerandert
Help state verandert
2015-07-09 12:16:54 +02:00
Daniel 458ccb99d0 Help state verandert 2015-07-09 11:54:16 +02:00
kennyboy55 7a6d2e9d5d Removed black bar 2015-07-09 11:28:01 +02:00
kennyboy55 74b6cafc40 Color fix 2015-07-09 11:27:53 +02:00
Daniel 5679b20616 Changed infopanel 2015-07-09 11:24:42 +02:00
jancoow 172454e13f Feature/herkasingen
# Conflicts:
#	model/gameState/PlayState.java
# Bugs:
#   model/gameState/PlayState.java highscore empty
2015-07-09 10:17:39 +02:00
kennyboy55 5480476837 Merge pull request #23 from ProjectGroepA2/feature/sorting
Feature/sorting
2015-07-07 12:21:42 +02:00
Daniel e349ec9fa6 Een highscore ophalen 2015-07-07 12:18:55 +02:00
Daniel 4cc41ea2c8 Kleuren ovalen locatie verandert 2015-07-07 12:18:42 +02:00
Daniel 06cc34a8fe InfoPanel herdeelt 2015-07-07 12:18:19 +02:00
Remco b4cd80807f lines nice round 2015-07-07 10:51:34 +02:00
kennyboy55 18d6a9dcbd Sort on highest score 2015-07-06 17:01:45 +02:00
kennyboy55 c111a52f52 Sort on Author name A-Z 2015-07-06 17:01:39 +02:00
kennyboy55 e64fc291fe Added highest score 2015-07-06 17:00:17 +02:00
kennyboy55 803c0e1707 Added highest score 2015-07-06 17:00:14 +02:00
kennyboy55 fc86051f04 Bugfixes 2015-07-06 17:00:02 +02:00
kennyboy55 2fa9c3afe8 Added two new sorting methods 2015-07-06 16:59:52 +02:00
kennyboy55 54d9a91f6a Load highest score on startup 2015-07-06 16:59:40 +02:00
Remco bedd6899db If you not die you win 2015-07-06 16:55:15 +02:00
Remco 0516027069 little bug fix 2015-07-06 14:45:48 +02:00
jancoow be274685b5 Fixed double songs playing 2015-06-26 21:51:58 +02:00
jancoow f229153346 Feature/help state
Conflicts:
	image/Images.java
2015-06-26 21:17:09 +02:00
jancoow 4a3208c85f Turned full screen mode on the rasp off 2015-06-26 21:14:25 +02:00
jancoow b4e7a7c213 - Scorebalk kleur krijgt geen Alpha meer mee
- Scorebalk renderde niet opnieuw wanneer speler score verliest.
- Boot Animatie toegevoegd.
- Nog wat kleine verbeteringen. (reverted from commit d0a91023b3)
2015-06-26 21:02:09 +02:00
jancoow 951ff4367e Removed Syso's 2015-06-26 20:50:32 +02:00
jancoow c25ae6757d Fixed bug infopanel and added send method for PRI 2015-06-26 20:36:30 +02:00
Daniel dbf3312801 help.png zit er nu in 2015-06-21 23:04:51 +02:00
Remco a54c3e2991 While on gamestate and you press the start button you go back to the title_state 2015-06-19 11:17:36 +02:00
Remco 8adc39f00f joystick bugg fix? 2015-06-19 10:57:31 +02:00
jancoow d86d4dc62e Remove some system outs 2015-06-19 10:25:44 +02:00
Remco 2ed5ceeaba qrimage is set in the middle of the gameoverscreen, frame is not resizable anymore 2015-06-19 10:17:58 +02:00
kennyboy55 93cb22b0c0 Removed broken characters and added new ones 2015-06-18 20:28:07 +02:00
kennyboy55 3d2e0c666c Load timesPlayed value on start 2015-06-18 20:18:17 +02:00
kennyboy55 fb08e22b0e Changed SortPLAYED to use new timesplayed value 2015-06-18 20:18:06 +02:00
kennyboy55 f2fd2b5993 Added times played 2015-06-18 20:17:47 +02:00
kennyboy55 1c1b6f0c8e Changed default sort to mostplayed 2015-06-18 20:17:35 +02:00
kennyboy55 3f22402bc4 Added mostplayed counter 2015-06-18 20:17:23 +02:00
kennyboy55 1520a6a104 Add mostplayed.
Don't ask for highscore if 0
2015-06-18 20:17:10 +02:00
kennyboy55 ec2d6cbc29 Removed sysos 2015-06-18 20:16:45 +02:00
kennyboy55 5ce2cca4df Moved menubuttons 2015-06-18 20:16:32 +02:00
kennyboy55 b60ff37301 Added extra text 2015-06-18 20:16:19 +02:00
kennyboy55 75ec5ccf37 Removed syso 2015-06-18 20:16:04 +02:00
kennyboy55 ef36b2052e Added cancel button color 2015-06-18 20:15:50 +02:00
Daniel 35c6c27d15 HelpState beter gemaakt 2015-06-18 17:41:18 +02:00
Remco ec8f1e5bb3 Games played underneath 5 secs will nog be added to database 2015-06-18 16:47:27 +02:00
Daniel 2d9daf8844 Help State Added 2015-06-18 16:39:21 +02:00
jancoow 5248ae94d1 New network thing.. 2015-06-18 16:34:35 +02:00
Remco df35dbeb8d back to title when you wait too long 2015-06-18 16:32:47 +02:00
Dofensmirtsz 665f04ceef nieuwe screenshot 2015-06-18 14:53:13 +02:00
Dofensmirtsz 699c58952a qwerqwerqwerqwerqwer 2015-06-18 14:51:14 +02:00
Dofensmirtsz 6a86f2a522 pregamestate yolo 2015-06-18 14:50:51 +02:00
Dofensmirtsz 82f903828f Àchtergrond verandert van kleur en inforpanel is beter 2015-06-18 14:02:38 +02:00
Janco Kock 7507d0fd63 Merge pull request #16 from ProjectGroepA2/feature/database
Feature/database
2015-06-15 22:09:43 +02:00
Janco Kock 16c41b94d5 Merge pull request #15 from ProjectGroepA2/revert-14-coin
Revert "Coin"
2015-06-15 21:46:58 +02:00
Janco Kock 54156e52b3 Revert "Coin" 2015-06-15 21:43:12 +02:00
jancoow 1f0030b90d Added webcam support + QR code generator.
Some cleanup
2015-06-15 19:29:55 +02:00
kennyboy55 06a26fc058 Small fix 2015-06-14 10:59:50 +02:00
Remco c731797f7d allen op je pc krijg je te zien in de playstate welke kleur welke knop is 2015-06-14 10:23:04 +02:00
kennyboy55 a8e1c30024 Added highscore queries.
Added playdata queries
2015-06-13 19:35:43 +02:00
kennyboy55 6644b80480 Bugfixes 2015-06-13 19:35:11 +02:00
kennyboy55 b0ce0bb6f8 Added playdata SQL call.
Bugfixes
2015-06-13 19:35:02 +02:00
kennyboy55 67764c1608 Added infinite scrolling.
Bugfixes
2015-06-13 19:34:36 +02:00
kennyboy55 5b5f4e0ce1 Added infinite scrolling 2015-06-13 19:32:03 +02:00
kennyboy55 2131f845b5 Public to Private 2015-06-13 19:31:52 +02:00
kennyboy55 9c17b654e8 Added infinite scrolling 2015-06-13 19:31:34 +02:00
kennyboy55 4d2d6c68ac Added infinite scrolling.
Added highscores SQL call
2015-06-13 19:31:21 +02:00
kennyboy55 e3a15dc28b Removed border 2015-06-13 19:30:40 +02:00
BilelAvans 427cd9accc Merge pull request #14 from ProjectGroepA2/coin
Coin
2015-06-12 19:26:21 +02:00
Bilel Bghiel d0a91023b3 - Scorebalk kleur krijgt geen Alpha meer mee
- Scorebalk renderde niet opnieuw wanneer speler score verliest.
- Boot Animatie toegevoegd.
- Nog wat kleine verbeteringen.
2015-06-12 19:17:21 +02:00
Remco 3fcefa6df5 bug fix 2015-06-12 14:52:01 +02:00
Remco 336a3051ff By gameoverscreen able to typ a name 2015-06-12 14:42:40 +02:00
Dofensmirtsz 1a3f2cbc17 getters gemaakt voor time,name, en score in highscore.
weergeven van highscores in menustate, geeft niks weer omdat de database leeg is.
2015-06-12 14:37:01 +02:00
kennyboy55 b4a223fdd1 Added SQLConnector to states 2015-06-12 13:15:06 +02:00
kennyboy55 211bdda4a8 Added highscore loading 2015-06-12 13:10:13 +02:00
kennyboy55 3dba4b6b92 Added SQL and Network 2015-06-12 12:40:23 +02:00
Bilel Bghiel 9f0752c577 Merge branch 'develop' of https://github.com/ProjectGroepA2/Arcade into coin 2015-06-12 11:42:46 +02:00
Bilel Bghiel 68f5f2392c - mooiere afdaling.
- scorebar vult pas nadat muntje 'erin valt'
2015-06-11 21:23:02 +02:00
kennyboy55 ce35aaf667 Added network joystick handling 2015-06-11 19:55:54 +02:00
jancoow 44f4444ad0 Network buttons 2015-06-11 19:11:38 +02:00
Dofensmirtsz 702ce6a245 iets 2015-06-11 17:30:16 +02:00
Dofensmirtsz b1a194c45d iets 2015-06-11 17:28:48 +02:00
Dofensmirtsz d1e50f823a SWAY 2015-06-11 17:28:32 +02:00
kennyboy55 22853812f3 Added border around enemies 2015-06-11 17:15:41 +02:00
Dofensmirtsz b89ea8a5df PREGAMESTATE YUYYYYY 2015-06-11 17:05:01 +02:00
kennyboy55 5e0a7512bb Merge remote-tracking branch 'origin/develop' into develop 2015-06-11 16:31:21 +02:00
kennyboy55 a9de8f077a Fixed IndexOutOfBounds 2015-06-11 16:31:03 +02:00
kennyboy55 86bd970fe1 Changing to network 2015-06-11 16:30:53 +02:00
Dofensmirtsz e979252aae Submenu fix, songselect fix 2015-06-11 15:38:11 +02:00
Bilel Bghiel 01169b0ab7 Coin on hit 2015-06-11 15:36:07 +02:00
Bilel Bghiel 1e09c3e024 Coin on hit 2015-06-11 14:33:33 +02:00
jancoow fd46800e80 Fixed menu merge errors 2015-06-11 14:32:25 +02:00
jancoow 409866ab75 Feature/menu
# Conflicts:
#	model/gameState/MenuState.java
#	model/objects/MenuButton.java
2015-06-11 14:22:22 +02:00
jancoow a9201902e1 Feature/help
# Conflicts:
#	model/gameState/PlayState.java
2015-06-11 14:15:27 +02:00
jancoow 04305bc4fb Feature/glowing hit area 2015-06-11 14:03:42 +02:00
Dofensmirtsz 7dd4066a8a Aanwijzertje toegevoegt 2015-06-11 13:32:27 +02:00
Remco 6f17124e02 help line added, helps where the closest enemy is 2015-06-11 13:00:51 +02:00
Dofensmirtsz fc4410c160 Buttons verbeterd 2015-06-11 12:57:21 +02:00
kennyboy55 61757652c3 Fixed timing 2015-06-11 12:48:48 +02:00
kennyboy55 7671294207 Changed init 2015-06-11 12:48:42 +02:00
kennyboy55 2e24060a12 Fixed button leds 2015-06-11 12:48:28 +02:00
Dofensmirtsz 5d153d3a2c Kleuren scrollen mee met het liedje 2015-06-11 12:39:54 +02:00
Remco 69bc3c2bee Glowing hitArea if you hit the enemy 2015-06-11 11:28:45 +02:00
Daniel b28114c40b Help++ 2015-06-11 11:09:31 +02:00
kennyboy55 136d9fe2cf Objects stop on song end.
Added time and song name.
Changed WHITE to ORANGE.
2015-06-11 10:42:05 +02:00
jancoow 44cc0e38d5 Enabled keys on rpi 2015-06-08 14:55:44 +02:00
Daniel cce3c22deb Added Game Over State 2015-06-08 14:51:12 +02:00
Daniel 85107d85a9 Gameover toegevoegt 2015-06-08 14:50:38 +02:00
Dofensmirtsz 236b74ba7c Merge remote-tracking branch 'origin/develop' into develop 2015-06-08 14:22:49 +02:00
Dofensmirtsz 44f50f2698 Merge remote-tracking branch 'origin/develop' into develop
Conflicts:
	image/Images.java
	model/gameState/TitleState.java
2015-06-08 14:22:44 +02:00
jancoow 6735334064 Disabled GPIO pins and system out led 2015-06-08 14:20:16 +02:00
jancoow 38a0bc4620 Gradients veranderd naar plaatjes voor betere prestaties hue (reverted from commit 3f7cd5a964) 2015-06-08 14:13:46 +02:00
Dofensmirtsz ad81242081 Afbeelding van knopdrukken toegevoegt 2015-06-08 14:13:29 +02:00
kennyboy55 634451fa20 Fixed leds 2015-06-08 14:13:25 +02:00
kennyboy55 1e70111800 Ignore Image files 2015-06-08 14:05:58 +02:00
jancoow ed1f44299e Bugfix/everything
# Conflicts:
#	model/SongHandler.java
#	model/gameState/PlayState.java
2015-06-08 14:01:07 +02:00
kennyboy55 861a973cde Fixed resetting playState 2015-06-08 13:54:26 +02:00
kennyboy55 8297ff79e8 Merge remote-tracking branch 'origin/bugfix/everything' into bugfix/everything 2015-06-08 13:45:47 +02:00
kennyboy55 0525163195 GamePlay fixes 2015-06-08 13:45:28 +02:00
jancoow 0e2c9a53bf Faster subscreen drawing 2015-06-08 13:37:54 +02:00
kennyboy55 a3069af5c0 Bugfix things 2015-06-08 12:50:51 +02:00
Dofensmirtsz 3f7cd5a964 Gradients veranderd naar plaatjes voor betere prestaties hue 2015-06-08 12:41:03 +02:00
kennyboy55 8766037def Fixed a lot of bugs 2015-06-08 11:41:01 +02:00
Dofensmirtsz d221bbf1b1 Pulse op button pressed 2015-06-08 10:10:33 +02:00
Dofensmirtsz bbc6747d41 Nu for real, playeranimatie 2015-06-08 09:53:16 +02:00
Dofensmirtsz 38c4785fd2 Merge remote-tracking branch 'origin/develop' into develop 2015-06-08 09:49:34 +02:00
Dofensmirtsz 1a11235534 Player is veranderd naar de regenboogshit, en de submenu cursor is gefixt (geen foutmeldingen meer) 2015-06-08 09:45:40 +02:00
jancoow 37b721215c Optimized submenu 2015-06-08 09:16:03 +02:00
jancoow d79d73fc9e A lot of improvements for the RPI. Uses images cached on the gpu. 2015-06-07 23:46:43 +02:00
jancoow 750f525c2d Optimized code, everything is buffered in a buffered image now 2015-06-07 14:22:56 +02:00
jancoow 396769317c Feature/menu
Conflicts:
	audio/AudioPlayer.java
	model/GameModel.java
	model/SongHandler.java
	model/gameState/MenuState.java

Menu now works togheter with the game. A lot of known bugs with audio player
2015-06-05 23:17:29 +02:00
jancoow ab5fd4007d Changed sound player, code will work on java 7 2015-06-05 20:45:39 +02:00
Dofensmirtsz e424faf0e6 Mooie aanwijzer voor submenu, met mooie spritesheet 2015-06-05 17:31:59 +02:00
Dofensmirtsz 30e630879a zat nog klein foutje in y-positie difficulties 2015-06-05 13:11:47 +02:00
Remco f9e6a90160 fixed button collors in song 2015-06-05 12:45:09 +02:00
Dofensmirtsz 560147a4d8 Difficulty Selection + press1 for gamestate in submenu 2015-06-05 12:17:22 +02:00
Remco 76c288cfec game logic fixed1.0 2015-06-05 11:48:09 +02:00
Dofensmirtsz ed18c37640 Mooie achtergronden gemaakt :^) 2015-06-05 11:21:54 +02:00
Dofensmirtsz 0b368b5dbf SongInstanceDifficultyButtonColor fixed en display en load etc. y0l0 2015-06-04 14:50:48 +02:00
kennyboy55 8f8a42e9ce Fixed SongInstanceDifficultyButtons and added colors 2015-06-04 14:17:11 +02:00
Dofensmirtsz 5f8e7706f2 Added SongInstanceDifficultyButtons :))))))) 2015-06-04 13:48:49 +02:00
Remco 1bf525c6b7 game logic fixed by tips of johan 2015-06-04 13:20:46 +02:00
Daniel 65e5cb3eac Difficulty Toegevoegt 2015-06-04 12:53:19 +02:00
Daniel 3fe5c0ad93 Nieuw Subtab 2015-06-04 11:24:54 +02:00
Daniel 2c960355a3 Fixed songs dir 2015-06-04 10:06:55 +02:00
jancoow 1acba841fa Added slider menu 2015-06-04 08:27:37 +02:00
Remco 76a41dbbd1 playable game 2015-06-02 15:47:23 +02:00
Remco 6a356982a6 game logic updated 2015-06-02 14:08:53 +02:00
jancoow 058d18784f Merge remote-tracking branch 'origin/feature/menu' into feature/menu
# Conflicts:
#	model/gameState/MenuState.java
2015-06-02 12:00:27 +02:00
Daniel 10f73d6e91 Menu art verandert 2015-06-02 11:43:25 +02:00
jancoow ab827600b1 Last fix 2015-06-02 11:26:46 +02:00
Remco 0e62a2e2b0 fixed playarea 2015-06-02 11:24:26 +02:00
Remco 663abb7043 fixed playstate 2015-06-02 11:19:20 +02:00
Remco 8cda332a95 fixed buggs 2015-06-02 11:14:05 +02:00
jancoow 42ae80b1b3 Feature/json
# Conflicts:
#	control/GameStateManager.java
#	image/Images.java
#	main/Window.java
#	model/gameState/MenuState.java
2015-06-02 10:51:47 +02:00
jancoow df207836e0 original game? (reverted from commit 3fc6c98ea5)
Fixed overwrited code
2015-06-02 10:22:52 +02:00
Remco 3fc6c98ea5 original game? 2015-06-02 09:59:26 +02:00
jancoow d685ffc6ac Added fade in animation 2015-05-31 22:55:38 +02:00
jancoow b99c4aa67d Added main menu for selecting songs 2015-05-31 21:05:32 +02:00
Daniel 39e521421a Nieuwe achtergrond 2015-05-31 20:30:47 +02:00
Daniel 77ff6ba0f5 test! 2015-05-31 15:12:46 +02:00
Daniel 4e0a94adeb background verandert samen met het logo, test 2015-05-31 00:27:47 +02:00
Daniel 22f0824e1c Menu Verandert, Menu State is TitleState en Menu = new Menu. 2015-05-30 21:50:41 +02:00
Daniel 50e2ea18dc Color Strike toegevoegt 2015-05-29 18:41:31 +02:00
Daniel 7251d919ae Menu added and having fun~! 2015-05-29 18:07:21 +02:00
kennyboy55 7b21aa1e09 Added songs, new libraries and more code 2015-05-29 12:47:25 +02:00
kennyboy55 4f4b10fd89 Added so much shit 2015-05-29 00:03:01 +02:00
kennyboy55 34f5cf8034 Merge remote-tracking branch 'origin/feature/json' into feature/json 2015-05-28 23:12:45 +02:00
kennyboy55 c2674ae382 Implemented all csf handling 2015-05-28 23:11:35 +02:00
kennyboy55 526d400a9d Update README.md 2015-05-28 19:25:48 +02:00
kennyboy55 9ba62993e8 Quick test class 2015-05-28 19:24:39 +02:00
kennyboy55 484d2aee81 Added Song and subclasses 2015-05-28 19:24:31 +02:00
kennyboy55 9eb634e3f6 JSON Parser for custom CSF Format
This JSON Parser will read a CSF File, parse it and turn it into a Song, SongInstances and ObjectInstances.
2015-05-28 19:24:07 +02:00
kennyboy55 05df81c4f6 Fixed Eclipse error
Might have broken some other stuff by doing this.
2015-05-28 19:23:18 +02:00
kennyboy55 c9af5e930b Libary for JSON Parsing 2015-05-28 19:22:07 +02:00
Remco 7263442ea3 Highscore + highscore bar added + life bar 2015-05-28 14:48:29 +02:00
Remco a7c52c04b6 highscore added 2015-05-28 12:56:31 +02:00
jancoow ea6895c6c1 Code cleanup and some improvements 2015-05-28 12:25:42 +02:00
jancoow fab4ac6ce7 Buttonpress improved 2015-05-28 11:58:19 +02:00
Remco 2276964639 bug fixed 2015-05-28 10:13:39 +02:00
jancoow ab3c3ae694 Fixed double method name 2015-05-28 09:49:40 +02:00
Remco 6808919490 Merge branch 'develop' of https://github.com/ProjectGroepA2/Arcade into develop
Conflicts:
	main/Window.java
	model/drawObjects/Player.java
	model/gameState/PlayState.java
2015-05-28 09:45:41 +02:00
Remco dc8f3c92e4 First bug free game? 2015-05-28 09:30:17 +02:00
jancoow 7bb04196f7 Merge branch 'testGameSprint1' into develop 2015-05-28 07:43:08 +02:00
jancoow 30def21275 Feature/test game sprint1
# Conflicts:
#	control/GameControl.java
#	main/Main.java
#	main/Window.java

Sprint 1 finished
2015-05-28 07:37:59 +02:00
Remco ad447eedf8 Waarschijnlijk de exception opgelost, ik krijg de expection zelf niet 2015-05-27 20:10:28 +02:00
kennyboy55 7fa92e3cbf Delete JoyStick.java 2015-05-27 13:35:08 +02:00
kennyboy55 ad7fcae6fb Delete Button.java 2015-05-27 13:35:02 +02:00
jancoow 07e35d02c8 Cursor remove on fullscreen on rpi 2015-05-27 12:03:01 +02:00
jancoow 6510d4b93a Only full screen on rpi & enabled AA 2015-05-27 11:41:10 +02:00
Remco 54382e9c1d Colors 2015-05-27 10:42:29 +02:00
Remco 3bc4f55f5a GameSprint1Done, little bug. When aiming right down not possible to hit with button 1 and 3 :S 2015-05-26 22:14:44 +02:00
kennyboy55 adab5234bb Added ButtonRelease(ButtonEvent e) 2015-05-26 13:04:59 +02:00
jancoow 973aef2d59 Fixed full-screen method for linux/rpi 2015-05-26 12:05:52 +02:00
Remco 2af16890d4 Changed size to resolution of arcade screen 2015-05-26 11:30:03 +02:00
Janco Kock e55f112d79 Merge pull request #2 from ProjectGroepA2/feature/controls
Feature/controls
2015-05-26 11:11:28 +02:00
kennyboy55 54090a86cb Removed old files 2015-05-24 20:21:36 +02:00
Janco Kock 98013548f7 Delete .project 2015-05-24 20:13:59 +02:00
Janco Kock 8026bb7c84 Delete .gitignore 2015-05-24 20:13:49 +02:00
Janco Kock cd2295b939 Delete .classpath 2015-05-24 20:13:44 +02:00
jancoow ff0dafcee0 Merge remote-tracking branch 'arcade-controls/develop' into feature/controls
Conflicts:
	README.md
	control/GameControl.java
	main/Main.java
	main/Window.java
	model/GameModel.java
	view/GameView.java
2015-05-24 20:09:58 +02:00
jancoow 2338366080 Moved to main directory instead of src folder 2015-05-24 18:03:16 +02:00
Janco Kock 1225a82a07 Merge pull request #1 from ProjectGroepA2/GpioButtons
Gpio buttons
2015-05-24 17:23:36 +02:00
jancoow 9be062fcd9 Added support for GPIO joystick
Users can now simply test on their own pc without argument added to the launch file
2015-05-24 15:50:01 +02:00
Janco Kock bf2a183407 Merge pull request #1 from ProjectGroepA2/feature/player
Player added
2015-05-22 22:08:27 +02:00
jancoow 3bf8280f79 Changed button handler to work with GPIO pins on Rpi 2015-05-22 21:45:49 +02:00
kennyboy55 35884a2726 Removed old files 2015-05-22 12:37:41 +02:00
kennyboy55 c5c9b58b16 Bugfixes 2015-05-22 12:29:36 +02:00
Remco 0af599077e Timer changed from control to model 2015-05-22 12:15:16 +02:00
kennyboy55 678201d118 Fixed buttons changing color 2015-05-21 22:10:11 +02:00
kennyboy55 36cbc2b012 Added option for PC/RASP 2015-05-21 21:21:23 +02:00
kennyboy55 f7175aa70a Show joystick direction on screen 2015-05-21 21:21:09 +02:00
kennyboy55 27c04e2b2a General bugfixed 2015-05-21 21:20:47 +02:00
kennyboy55 5683b38210 Implemented Joystick Listener 2015-05-21 21:20:01 +02:00
kennyboy55 28c8d35670 Removed unnecessary libraries 2015-05-21 19:48:43 +02:00
kennyboy55 564f10af62 Added working buttons stuff 2015-05-21 17:15:05 +02:00
Remco 09caaad7e1 Player added 2015-05-21 14:23:30 +02:00
jancoow 68d6c61ca5 Add some comments 2015-05-17 12:16:41 +02:00
jancoow a2c4f6f9eb Ledstrip now working in java. 2015-05-17 12:12:14 +02:00
jancoow d8dbcc0719 Just some ideas for the custom button & joystick event listener 2015-05-04 00:33:08 +02:00
jancoow 2c7c917d02 Pushed some testing & coding ideas 2015-05-03 22:55:15 +02:00
kennyboy55 435296b9be Fix for Janco 2015-05-03 21:57:46 +02:00
kennyboy55 39484a720d Fixed size problem. 2015-05-03 21:44:28 +02:00
kennyboy55 c256cdfe13 First Commit 2015-05-03 21:42:27 +02:00
kennyboy55 985ff7c7bf Initial commit 2015-05-03 20:31:43 +02:00
kennyboy55 e3a1ad7866 First Commit 2015-05-03 19:30:17 +02:00
77 changed files with 4839 additions and 2 deletions
View File
+4 -2
View File
@@ -1,2 +1,4 @@
# Arcade
Arcade game for the fourth term at Avans Hogeschool Breda.
JSON Parser
Add the libraries to your build path.
Add all the folders EXCEPT the 'songs' folder to your source.
The 'songs' folder should be in your project root.
Binary file not shown.
+78
View File
@@ -0,0 +1,78 @@
package audio;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class AudioPlayer{
private Player clip;
private FileInputStream fis;
private Song s;
private Thread thread;
public AudioPlayer() {
clip = null;
}
public void setClip(Song s) {
try {
if(clip!=null)
clip.close();
this.s = s;
} catch (Exception e) {
e.printStackTrace();
}
}
public void play() {
try {
fis = new FileInputStream(s.getAudio());
clip = new Player(fis);
} catch (JavaLayerException | FileNotFoundException e1) {
e1.printStackTrace();
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
if(clip != null){
try {
clip.play();
} catch (JavaLayerException e) {
e.printStackTrace();
}
}
}});
thread.start();
}
public void close() {
if(clip != null)
{
clip.close();
clip = null;
try {
if(fis != null)
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
if(thread != null && thread.isAlive())
thread.stop();
}
}
public long getProgress()
{
if(clip != null)
return clip.getPosition()*1000;
else
return 0L;
}
}
+58
View File
@@ -0,0 +1,58 @@
package audio;
import java.awt.Color;
import control.button.Button;
import control.button.ButtonHandler;
public class ButtonInstance {
private long time;
private int buttonID;
private Color color;
private Button button;
public ButtonInstance()
{
time = 0;
buttonID = 0;
color = null;
button = null;
}
public Button getButton() {
return button;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public int getButtonID() {
return buttonID;
}
public void setButtonID(int buttonID) {
if(buttonID < ButtonHandler.getButtons().size() - 1)
{
this.buttonID = buttonID;
this.button = ButtonHandler.getButton(buttonID);
}
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}
+86
View File
@@ -0,0 +1,86 @@
package audio;
import java.awt.Color;
import control.button.Button;
import control.button.ButtonHandler;
public class ObjectInstance {
private long time;
private int direction;
private int buttonID;
private Button button;
private boolean hold;
private long length;
public ObjectInstance()
{
time = 0;
direction = 0;
buttonID = 0;
button = null;
hold = false;
length = 0;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public int getDirection() {
return direction;
}
public void setDirection(int direction) {
this.direction = direction;
}
public int getButtonID() {
return buttonID;
}
public void setButtonID(int buttonID) {
if(buttonID < ButtonHandler.getButtons().size() - 1)
{
this.buttonID = buttonID;
this.button = ButtonHandler.getButton(buttonID);
}
}
public Color getColor()
{
return button.getColor();
}
public Button getButton() {
return button;
}
public boolean isHold() {
return hold;
}
public void setHold(boolean hold) {
this.hold = hold;
}
public long getLength() {
if(hold)
return length;
else
return 1;
}
public void setLength(long length) {
this.length = length;
}
}
+179
View File
@@ -0,0 +1,179 @@
package audio;
import image.Images;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Song implements Comparable<Song>{
private String title;
private String subtitle;
private String author;
private double sample_start;
private double BPM;
private File audio;
private File background;
private File banner;
private File file;
private BufferedImage backgroundImage;
private BufferedImage bannerImage;
public List<SongInstance> songs;
public Song() {
title = "";
subtitle = "";
author = "";
sample_start = 0;
BPM = 0.0;
audio = null;
background = null;
banner = null;
file = null;
backgroundImage = null;
bannerImage = null;
songs = new ArrayList<SongInstance>();
}
public void addSongInstance(SongInstance s) {
songs.add(s);
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getSampleStart() {
return sample_start;
}
public void setSampleStart(double sample_start) {
this.sample_start = sample_start;
}
public double getBPM() {
return BPM;
}
public void setBPM(double bPM) {
BPM = bPM;
}
public File getAudio() {
return audio;
}
public void setAudio(File audio) {
this.audio = audio;
}
public File getBackground() {
return background;
}
public void setBackground(File background) {
this.background = background;
}
public BufferedImage getBackgroundImage()
{
if(backgroundImage == null)
{
this.backgroundImage = Images.readImage(background);
}
return backgroundImage;
}
public File getBanner() {
return banner;
}
public BufferedImage getBannerImage()
{
if(bannerImage == null)
{
this.bannerImage = Images.readImage(banner);
}
return bannerImage;
}
public void setBanner(File banner) {
this.banner = banner;
}
public File getFile() {
return file;
}
public String getFolder()
{
return file.getParentFile().getName();
}
public void setFile(File file) {
this.file = file;
}
public List<SongInstance> getSongs() {
return songs;
}
public void close()
{
}
@Override
public int compareTo(Song s) {
return getTitle().compareTo(s.getTitle());
}
public int getTimesPlayed()
{
int timesPlayed = 0;
for(SongInstance s : songs)
{
timesPlayed += s.getTimesPlayed();
}
return timesPlayed;
}
public int getHighestScore()
{
int highest = 0;
for(SongInstance s : songs)
{
if(s.getHighestScore() > highest)
highest = s.getHighestScore();
}
return highest;
}
}
+113
View File
@@ -0,0 +1,113 @@
package audio;
import java.util.ArrayList;
import java.util.List;
public class SongInstance {
private String difficulty;
private int timesPlayed;
private int highestScore;
private List<ObjectInstance> objects;
private List<ButtonInstance> buttons;
public SongInstance(String difficulty)
{
this.difficulty = difficulty;
this.timesPlayed = 0;
this.highestScore = 0;
objects = new ArrayList<ObjectInstance>();
buttons = new ArrayList<ButtonInstance>();
}
public void addObjectInstance(ObjectInstance obj)
{
objects.add(obj);
}
public void addButtonInstance(ButtonInstance btn)
{
buttons.add(btn);
}
public List<ObjectInstance> getObjects() {
return objects;
}
public List<ButtonInstance> getButtons() {
return buttons;
}
public String getDifficulty() {
return difficulty;
}
public void setDifficulty(String difficulty) {
this.difficulty = difficulty;
}
public List<ObjectInstance> getObjectsBetween(long oldProgress, long progress) {
List<ObjectInstance> b = new ArrayList<ObjectInstance>();
for(ObjectInstance i : objects)
{
if(i.getTime() >= progress)
{
return b;
}
if(i.getTime() >= oldProgress && i.getTime() < progress)
{
b.add(i);
}
}
return b;
}
public long getEndTime()
{
if(objects.size() == 0)
return 0;
return objects.get(objects.size()-1).getTime();
}
public List<ButtonInstance> getButtonsBetween(long oldProgress, long progress) {
List<ButtonInstance> b = new ArrayList<ButtonInstance>();
for(ButtonInstance i : buttons)
{
if(i.getTime() > progress)
{
return b;
}
if(i.getTime() >= oldProgress && i.getTime() < progress)
{
b.add(i);
}
}
return b;
}
public int getTimesPlayed() {
return timesPlayed;
}
public void setTimesPlayed(int timesPlayed) {
this.timesPlayed = timesPlayed;
}
public int getHighestScore() {
return highestScore;
}
public void setHighestScore(int highestScore) {
this.highestScore = highestScore;
}
public void played()
{
timesPlayed++;
}
}
+55
View File
@@ -0,0 +1,55 @@
package audio.io;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import audio.Song;
public class DirScanner {
public static List<Song> scanDirectories(File f)
{
List<Song> songs = new ArrayList<Song>();
if(!f.isDirectory())
return songs;
FileFilter dirs = new FileFilter()
{
public boolean accept(File e) {
if(e.isDirectory())
return true;
else
return false;
}
};
FileFilter csf = new FileFilter()
{
public boolean accept(File e) {
if(e.isFile() && e.getName().endsWith(".csf"))
return true;
else
return false;
}
};
for(File file : f.listFiles(dirs))
{
for(File file2 : file.listFiles(csf))
{
try {
Song s = JSONReader.readSong(file2);
songs.add(s);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return songs;
}
}
+134
View File
@@ -0,0 +1,134 @@
package audio.io;
import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import model.GameModel;
import audio.ButtonInstance;
import audio.ObjectInstance;
import audio.Song;
import audio.SongInstance;
public class JSONReader {
public static Song readSong(File f) throws IOException {
if(!f.exists())
throw new FileNotFoundException("CSF File does not exist");
// Get CSF File
InputStream is = new FileInputStream(f);
// Read CSF Content
JsonReader rdr = Json.createReader(is);
JsonObject obj = rdr.readObject();
rdr.close();
is.close();
if(!obj.containsKey("meta") || !obj.containsKey("file") || !obj.containsKey("data"))
throw new IOException("Corrupt CSF File");
// Create new Song
Song s = new Song();
// Read META data
JsonObject meta = obj.getJsonObject("meta");
s.setTitle(meta.getString("title"));
s.setSubtitle(meta.getString("subtitle"));
s.setAuthor(meta.getString("author"));
s.setSampleStart(meta.getInt("sample_start"));
s.setBPM(meta.getInt("BPM"));
//Read FILE data
JsonObject file = obj.getJsonObject("file");
File audio = new File(f.getParent() + File.separator + file.getString("audio"));
if(!audio.exists() || !audio.getName().toLowerCase().endsWith(".mp3"))
throw new FileNotFoundException("Audio file does not exist: " + audio.getPath());
s.setAudio(audio);
/*
File background = new File(f.getParent() + File.separator + file.getString("background"));
if(!background.exists() || !(background.getName().toLowerCase().endsWith(".jpg") || background.getName().toLowerCase().endsWith(".png")))
throw new FileNotFoundException("Background image does not exist: " + background.getPath());
s.setBackground(background);*/
s.setBackground(null);
/*
File banner = new File(f.getParent() + File.separator + file.getString("banner"));
if(!banner.exists() || !(banner.getName().toLowerCase().endsWith(".jpg") || banner.getName().toLowerCase().endsWith(".png")))
throw new FileNotFoundException("Banner image does not exist: " + banner.getPath());
s.setBanner(banner);*/
s.setBanner(null);
s.setFile(f);
//Read Data data
JsonArray data = obj.getJsonArray("data");
for(int i = 0; i < data.size(); i++)
{
s.addSongInstance( readSongInstance(data.getJsonObject(i)) );
}
return s;
}
private static SongInstance readSongInstance(JsonObject obj) throws IOException {
String difficulty = obj.getString("difficulty");
SongInstance si = new SongInstance(difficulty);
JsonArray object = obj.getJsonArray("objects");
for(int i = 0; i < object.size(); i++)
{
si.addObjectInstance( readObjectInstance(object.getJsonObject(i)) );
}
JsonArray buttons = obj.getJsonArray("buttons");
for(int i = 0; i < buttons.size(); i++)
{
si.addButtonInstance( readButtonInstance(buttons.getJsonObject(i)) );
}
return si;
}
private static ObjectInstance readObjectInstance(JsonObject obj)
{
ObjectInstance oi = new ObjectInstance();
oi.setTime(obj.getInt("time"));
oi.setDirection(obj.getInt("direction"));
oi.setButtonID(obj.getInt("button"));
if(obj.containsKey("hold") && obj.getBoolean("hold"))
{
oi.setHold(obj.getBoolean("hold"));
oi.setLength(obj.getInt("length"));
}
return oi;
}
private static ButtonInstance readButtonInstance(JsonObject obj)
{
ButtonInstance bi = new ButtonInstance();
bi.setTime(obj.getInt("time"));
bi.setButtonID(obj.getInt("button"));
Color color = GameModel.colors[obj.getInt("color") % GameModel.colors.length];
bi.setColor(color);
return bi;
}
}
+14
View File
@@ -0,0 +1,14 @@
package audio.sorting;
import java.util.Comparator;
import audio.Song;
public class SortALPHA implements Comparator<Song> {
@Override
public int compare(Song s1, Song s2) {
return s1.getTitle().compareTo(s2.getTitle());
}
}
+14
View File
@@ -0,0 +1,14 @@
package audio.sorting;
import java.util.Comparator;
import audio.Song;
public class SortAUTHOR implements Comparator<Song> {
@Override
public int compare(Song s1, Song s2) {
return s1.getAuthor().compareTo(s2.getAuthor());
}
}
+19
View File
@@ -0,0 +1,19 @@
package audio.sorting;
import java.util.Comparator;
import audio.Song;
public class SortPLAYED implements Comparator<Song> {
@Override
public int compare(Song s1, Song s2) {
if(s1.getTimesPlayed() < s2.getTimesPlayed())
return 1;
else if(s1.getTimesPlayed() > s2.getTimesPlayed())
return -1;
else
return s1.getTitle().compareTo(s2.getTitle());
}
}
+18
View File
@@ -0,0 +1,18 @@
package audio.sorting;
import java.util.Comparator;
import audio.Song;
public class SortSCORE implements Comparator<Song> {
public int compare(Song s1, Song s2) {
if(s1.getHighestScore() < s2.getHighestScore())
return 1;
else if(s1.getHighestScore() > s2.getHighestScore())
return -1;
else
return s1.getTitle().compareTo(s2.getTitle());
}
}
+58
View File
@@ -0,0 +1,58 @@
package control;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import model.GameModel;
import view.GameView;
import control.button.ButtonEvent;
import control.button.ButtonListener;
import control.joystick.JoystickEvent;
import control.joystick.JoystickListener;
public class GameControl implements JoystickListener, ButtonListener, ActionListener {
private long lastTime = System.currentTimeMillis();
GameModel model;
GameView view;
GameStateManager gsm;
Timer update;
public GameControl(final GameModel model, final GameView view,GameStateManager gsm)
{
this.model = model;
this.view = view;
this.gsm = gsm;
view.setIgnoreRepaint(true);
update = new Timer(1000/60,this);
update.start();
}
@Override
public void buttonPressed(ButtonEvent e) {
gsm.buttonPressed(e);
}
@Override
public void buttonReleased(ButtonEvent e) {
gsm.buttonReleased(e);
}
@Override
public void onJoystickMoved(JoystickEvent e) {
gsm.onJoystickMoved(e);
}
@Override
public void actionPerformed(ActionEvent e) {
long currentTime = System.currentTimeMillis();
long time = currentTime - lastTime;
if(time > 1000/60)
time = 1000/60;
model.update(time);
lastTime = currentTime;
view.repaint();
}
}
+100
View File
@@ -0,0 +1,100 @@
package control;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import model.gameState.EndState;
import model.gameState.GameState;
import model.gameState.HelpState;
import model.gameState.MenuState;
import model.gameState.PlayState;
import model.gameState.PreGameState;
import model.gameState.TitleState;
import control.button.Button;
import control.button.ButtonEvent;
import control.button.ButtonHandler;
import control.joystick.JoystickEvent;
import control.joystick.JoystickHandler;
import data.io.SQLConnector;
public class GameStateManager {
private List<GameState> gamestates;
public GameState currentState;
private int index = 0;
public int fps;
private float timeOfNoAction = 0,maxTimeToHaveNoAction = 45000;
public enum State {
TITLE_STATE,
MENU_STATE,
HELP_STATE,
PLAY_STATE,
END_STATE,
PRE_GAME_STATE
}
public GameStateManager(SongHandler sh, SQLConnector sql){
gamestates = new ArrayList<GameState>();
gamestates.add(new TitleState(this, sh, sql));
gamestates.add(new MenuState(this, sh, sql));
gamestates.add(new HelpState(this, sh, sql));
gamestates.add(new PlayState(this, sh, sql));
gamestates.add(new EndState(this, sh, sql));
gamestates.add(new PreGameState(this,sh, sql));
setState(State.TITLE_STATE);
}
public void setState(State st) {
if (st.ordinal() > 0 && ( !(currentState instanceof TitleState) || !(currentState instanceof EndState) ))
currentState.stopAudio();
currentState = gamestates.get(st.ordinal());
init();
}
public void next() {
index++;
index %= gamestates.size();
currentState = gamestates.get(index);
init();
}
public void update(float factor){
timeOfNoAction += factor;
if(timeOfNoAction > maxTimeToHaveNoAction){
setState(State.TITLE_STATE);
timeOfNoAction = 0;
}
currentState.update(factor);
fps = (int) (60/(factor/10));
}
public void init()
{
JoystickHandler.REPEAT = false;
for (int i = 1; i < ButtonHandler.getButtons().size(); i++) {
Button b = ButtonHandler.getButton(i);
b.setColor(Color.BLACK);
}
currentState.init();
}
public void buttonPressed(ButtonEvent e) {
timeOfNoAction = 0;
currentState.buttonPressed(e);
}
public void buttonReleased(ButtonEvent e) {
timeOfNoAction = 0;
currentState.buttonReleased(e);
}
public void onJoystickMoved(JoystickEvent e) {
timeOfNoAction = 0;
currentState.onJoystickMoved(e);
}
}
+72
View File
@@ -0,0 +1,72 @@
package control;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class LedHandler {
private BufferedReader inp;
private BufferedWriter out;
private Process p;
public LedHandler(){
try {
p = Runtime.getRuntime().exec("sudo python led.py");
inp = new BufferedReader( new InputStreamReader(p.getInputStream()) );
out = new BufferedWriter( new OutputStreamWriter(p.getOutputStream()) );
}
catch (Exception err) {
err.printStackTrace();
}
}
public void close(){
try {
inp.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
p.destroy();
}
/**
* Set the color of a specific led
* @param Pixel number of the led
* @param Red value
* @param Green value
* @param Blue value
* Remember: Button leds are GRB, normal ledstrip is RGB
*/
public void setLed(int led, int r, int g, int b) {
if(led<0)
return;
try {
out.write( "1|" + led + "|" + r + "|" + g + "|" + b + "\n" );
out.flush();
}
catch (Exception err) {
err.printStackTrace();
}
}
/**
* Shows the (new) colors
*/
public void show(){
try {
out.write( "0\n" );
out.flush();
}
catch (Exception err) {
err.printStackTrace();
}
}
}
+195
View File
@@ -0,0 +1,195 @@
package control;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import control.button.ButtonHandler;
import control.joystick.Joystick.Position;
import control.joystick.JoystickHandler;
public class NetworkHandler implements Runnable{
private DatagramSocket udp;
private String host;
private int port;
private long fistpressed;
private boolean running;
private Thread t;
private byte[] send,
receive;
private ButtonHandler bth;
private JoystickHandler jth;
public NetworkHandler(String host, int port, ButtonHandler bth, JoystickHandler jth)
{
this.host = host;
this.port = port;
this.bth = bth;
this.jth = jth;
udp = null;
send = new byte[1024];
receive = new byte[1024];
try {
udp = new DatagramSocket(1113);
} catch (SocketException e) {
e.printStackTrace();
}
running = true;
t = new Thread(this);
t.start();
}
public void setLed(int led, int r, int g , int b)
{
String cmd = "1|" + led + "|" + r + "|" + g + "|" + b + "\n";
send(cmd);
}
public void show(){
String cmd = "0\n";
send(cmd);
}
private void send(String str)
{
try {
DatagramPacket sendPacket = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName(host), 1113);
udp.send(sendPacket);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void close()
{
running = false;
udp.disconnect();
udp.close();
}
@Override
public void run() {
while(running)
{
DatagramPacket receivePacket = new DatagramPacket(receive, receive.length);
try {
udp.receive(receivePacket);
} catch (IOException e) {
e.printStackTrace();
}
String sentence = new String( receivePacket.getData());
sentence = sentence.trim();
String[] controls = sentence.split("\\|");
int[] control = new int[controls.length];
for(int i=0; i<controls.length; i++)
control[i] = Integer.parseInt(controls[i]);
for(int i = 0; i < 7; i++){
if(control[i] != ButtonHandler.getButton(i).pressed)
{
ButtonHandler.getButton(i).pressed = control[i];
if(control[i] == 0)
bth.buttonPress(ButtonHandler.getButton(i));
}
}
if(control[7] == 0 && control[8] == 0){
if(JoystickHandler.j.getPos() != Position.UP_LEFT )
{
JoystickHandler.j.setPosition(Position.UP_LEFT);
jth.onJoystickMoved(JoystickHandler.j);
}
}
else if(control[7] == 0 && control[9] == 0){
if(JoystickHandler.j.getPos() != Position.UP_RIGHT)
{
JoystickHandler.j.setPosition(Position.UP_RIGHT);
jth.onJoystickMoved(JoystickHandler.j);
}
}
else if(control[10] == 0 && control[8] == 0){
if(JoystickHandler.j.getPos() != Position.DOWN_LEFT)
{
JoystickHandler.j.setPosition(Position.DOWN_LEFT);
jth.onJoystickMoved(JoystickHandler.j);
}
}
else if(control[10] == 0 && control[9] == 0){
if(JoystickHandler.j.getPos() != Position.DOWN_RIGHT)
{
JoystickHandler.j.setPosition(Position.DOWN_RIGHT);
jth.onJoystickMoved(JoystickHandler.j);
}
}
else if(control[7] == 0){
if(JoystickHandler.j.getPos() != Position.UP || JoystickHandler.REPEAT)
{
if(JoystickHandler.j.getPos() != Position.UP)
{
fistpressed = System.currentTimeMillis();
JoystickHandler.j.setPosition(Position.UP);
jth.onJoystickMoved(JoystickHandler.j);
}
if((fistpressed + 500) < System.currentTimeMillis()){
JoystickHandler.j.setPosition(Position.UP);
jth.onJoystickMoved(JoystickHandler.j);
}
}
}
else if(control[8] == 0){
if(JoystickHandler.j.getPos() != Position.LEFT)
{
JoystickHandler.j.setPosition(Position.LEFT);
jth.onJoystickMoved(JoystickHandler.j);
}
}
else if(control[9] == 0){
if(JoystickHandler.j.getPos() != Position.RIGHT)
{
JoystickHandler.j.setPosition(Position.RIGHT);
jth.onJoystickMoved(JoystickHandler.j);
}
}
else if(control[10] == 0){
if(JoystickHandler.j.getPos() != Position.DOWN || JoystickHandler.REPEAT)
{
if(JoystickHandler.j.getPos() != Position.DOWN){
fistpressed = System.currentTimeMillis();
JoystickHandler.j.setPosition(Position.DOWN);
jth.onJoystickMoved(JoystickHandler.j);
}
if((fistpressed + 500) < System.currentTimeMillis()){
JoystickHandler.j.setPosition(Position.DOWN);
jth.onJoystickMoved(JoystickHandler.j);
}
}
}else {
if(JoystickHandler.j.getPos() != Position.CENTER){
fistpressed = 0;
JoystickHandler.j.setPosition(Position.CENTER);
jth.onJoystickMoved(JoystickHandler.j);
}
}
}
}
}
+131
View File
@@ -0,0 +1,131 @@
package control;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import main.Window;
import audio.AudioPlayer;
import audio.Song;
import audio.SongInstance;
import audio.io.DirScanner;
import audio.sorting.SortPLAYED;
import data.io.SQLConnector;
public class SongHandler {
private List<Song> songs;
private Song currentSong;
private SongInstance currentSongInstance;
private int currentIndex;
SQLConnector sql;
private File dir;
private AudioPlayer p;
public SongHandler(SQLConnector sql)
{
this.sql = sql;
songs = new ArrayList<Song>();
currentSong = null;
currentSongInstance = null;
currentIndex = 0;
p = new AudioPlayer();
if(Window.ON_ARCADE)
dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs/");
else
dir = new File(System.getProperty( "user.home" ) + "/Documents/songs/");
songs = DirScanner.scanDirectories(dir);
sql.update(songs);
sort(new SortPLAYED());
updatePlayer();
}
public void next()
{
currentIndex++;
updatePlayer();
}
public void previous()
{
currentIndex--;
updatePlayer();
}
public void set(int i)
{
currentIndex = i;
updatePlayer();
}
public void set(SongInstance si)
{
currentSongInstance = si;
}
public boolean isPlaying(){
return getProgress() > 0 ? true : false;
}
private void updatePlayer()
{
if(currentIndex < 0)
currentIndex = songs.size() + currentIndex;
if(currentIndex >= songs.size())
currentIndex = currentIndex - songs.size();
currentSong = songs.get(currentIndex);
currentSongInstance = currentSong.getSongs().get(0);
p.close();
p.setClip(currentSong);
}
public long getProgress()
{
return p.getProgress();
}
public List<Song> getSongs()
{
return songs;
}
public Song getCurrentSong()
{
return currentSong;
}
public SongInstance getCurrentSongInstance()
{
return currentSongInstance;
}
public void close()
{
p.close();
for(Song s : songs)
{
s.close();
}
}
public void play()
{
p.play();
}
public void sort(Comparator<Song> sorter)
{
Collections.sort(songs, sorter);
}
}
+52
View File
@@ -0,0 +1,52 @@
package control.button;
import java.awt.Color;
import main.Window;
import control.NetworkHandler;
public class Button {
Color color;
int ledID;
int buttonID;
NetworkHandler ntw;
public int pressed;
public Button(int buttonID, int ledID, NetworkHandler ntw)
{
color = new Color(255,255,255);
this.ledID = ledID;
this.buttonID = buttonID;
this.ntw = ntw;
pressed = 1;
setLed();
}
private void setLed()
{
if(Window.ON_ARCADE)
{
ntw.setLed(ledID, color.getGreen(), color.getRed(), color.getBlue());
ntw.show();
}
}
public void setColor(Color newColor)
{
color = newColor;
setLed();
}
public Color getColor(){
return color;
}
public int getButtonID()
{
return buttonID;
}
public int getLedID()
{
return ledID;
}
}
+19
View File
@@ -0,0 +1,19 @@
package control.button;
public class ButtonEvent {
private Button button;
private Long now;
public ButtonEvent(Button button, Long now){
this.button = button;
this.now = now;
}
public Button getButton() {
return button;
}
public Long getNow() {
return now;
}
}
+148
View File
@@ -0,0 +1,148 @@
package control.button;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import main.Window;
import model.GameModel;
import control.NetworkHandler;
public class ButtonHandler implements KeyListener{
List<ButtonListener> listeners;
static List<Button> buttons;
NetworkHandler ntw;
public ButtonHandler()
{
this.ntw = null;
listeners = new ArrayList<ButtonListener>();
buttons = new ArrayList<Button>();
}
public void addButtonListener(ButtonListener toAdd) {
listeners.add(toAdd);
}
public void buttonPress(Button b) {
if(Window.ON_ARCADE)
{
Color c = b.getColor().brighter().brighter();
ntw.setLed(b.getLedID(), c.getGreen(), c.getRed(), c.getBlue());
ntw.show();
}
ButtonEvent e = new ButtonEvent(b, System.currentTimeMillis());
for (ButtonListener bt : listeners)
bt.buttonPressed(e);
}
public void buttonRelease(Button b) {
if(Window.ON_ARCADE)
{
ntw.setLed(b.getLedID(), b.getColor().getGreen(), b.getColor().getRed(), b.getColor().getBlue());
ntw.show();
}
ButtonEvent e = new ButtonEvent(b, System.currentTimeMillis());
for (ButtonListener bt : listeners)
bt.buttonReleased(e);
}
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode())
{
case KeyEvent.VK_0:
buttonPress(buttons.get(0));
break;
case KeyEvent.VK_1:
buttonPress(buttons.get(1));
break;
case KeyEvent.VK_2:
buttonPress(buttons.get(2));
break;
case KeyEvent.VK_3:
buttonPress(buttons.get(3));
break;
case KeyEvent.VK_4:
buttonPress(buttons.get(4));
break;
case KeyEvent.VK_5:
buttonPress(buttons.get(5));
break;
case KeyEvent.VK_6:
buttonPress(buttons.get(6));
break;
case KeyEvent.VK_ESCAPE:
if(!Window.ON_ARCADE)
System.exit(0);
break;
}
}
public void keyReleased(KeyEvent e) {
switch(e.getKeyCode())
{
case KeyEvent.VK_0:
buttonRelease(buttons.get(0));
break;
case KeyEvent.VK_1:
buttonRelease(buttons.get(1));
break;
case KeyEvent.VK_2:
buttonRelease(buttons.get(2));
break;
case KeyEvent.VK_3:
buttonRelease(buttons.get(3));
break;
case KeyEvent.VK_4:
buttonRelease(buttons.get(4));
break;
case KeyEvent.VK_5:
buttonRelease(buttons.get(5));
break;
case KeyEvent.VK_6:
buttonRelease(buttons.get(6));
break;
}
}
public void keyTyped(KeyEvent arg0) {}
public static List<Button> getButtons()
{
return buttons;
}
public static Button getButton(int id)
{
for(Button b : buttons)
{
if(b.getButtonID() == id)
{
return b;
}
}
return null;
}
public void setNetwork(NetworkHandler ntw) {
this.ntw = ntw;
buttons.add(new Button(0, -1, ntw));
buttons.add(new Button(1, 2, ntw));
buttons.add(new Button(2, 1, ntw));
buttons.add(new Button(3, 0, ntw));
buttons.add(new Button(4, -1, ntw));
buttons.add(new Button(5, 3, ntw));
buttons.add(new Button(6, 4, ntw));
for (int i = 1; i < buttons.size(); i++) {
buttons.get(i).setColor(GameModel.colors[i - 1]);
}
}
}
+6
View File
@@ -0,0 +1,6 @@
package control.button;
public interface ButtonListener {
public void buttonPressed(ButtonEvent e);
public void buttonReleased(ButtonEvent e);
}
+32
View File
@@ -0,0 +1,32 @@
package control.joystick;
public class Joystick {
public enum Position {
UP,
LEFT,
DOWN,
RIGHT,
UP_RIGHT,
DOWN_RIGHT,
UP_LEFT,
DOWN_LEFT,
CENTER
}
private Position pos;
public Joystick()
{
pos = Position.CENTER;
}
public void setPosition(Position pos)
{
this.pos = pos;
}
public Position getPos() {
return pos;
}
}
+19
View File
@@ -0,0 +1,19 @@
package control.joystick;
public class JoystickEvent {
private Joystick joystick;
private Long now;
public JoystickEvent(Joystick joystick, Long now){
this.joystick = joystick;
this.now = now;
}
public Joystick getJoystick() {
return joystick;
}
public Long getNow() {
return now;
}
}
+183
View File
@@ -0,0 +1,183 @@
package control.joystick;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
import com.pi4j.io.gpio.event.GpioPinListenerDigital;
import control.joystick.Joystick.Position;
public class JoystickHandler implements KeyListener{
List<JoystickListener> listeners;
Set<Integer> keys;
public static boolean REPEAT = false;
public static Joystick j = new Joystick();;
public JoystickHandler()
{
listeners = new ArrayList<JoystickListener>();
keys = new HashSet<Integer>();
// if(Window.ON_RASP)
// addGpioListeners();
}
private void addGpioListeners(){
ArrayList<GpioPinDigitalInput> inputpins = new ArrayList<GpioPinDigitalInput>();
final GpioController gpio = GpioFactory.getInstance();
inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_04, "UP")); //button 1 to 6 + start button
inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_05, "LEFT"));
inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_11, "RIGHT"));
inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_10, "DOWN"));
for(GpioPinDigitalInput p:inputpins){
p.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent e) {
if(e.getState() == PinState.HIGH){
keyReleased(new KeyEvent(
new java.awt.Component(){
/**
*
*/
private static final long serialVersionUID = 1L;},
KeyEvent.KEY_RELEASED,
System.nanoTime(),
0,
stringToKeyevent(e.getPin().getName()),
KeyEvent.CHAR_UNDEFINED)
);
System.out.println(e.getPin().getName() + " Released");
}else{
keyPressed(new KeyEvent(
new java.awt.Component(){
/**
*
*/
private static final long serialVersionUID = 1L;},
KeyEvent.KEY_PRESSED,
System.nanoTime(),
0,
stringToKeyevent(e.getPin().getName()),
KeyEvent.CHAR_UNDEFINED)
);
System.out.println(e.getPin().getName() + " Pressed");
}
}
});
}
}
public void addJoystickListener(JoystickListener toAdd) {
listeners.add(toAdd);
}
public void onJoystickMoved(Joystick j) {
JoystickEvent e = new JoystickEvent(j, System.currentTimeMillis());
for (JoystickListener yst : listeners)
yst.onJoystickMoved(e);
}
private void updateJoystickPosition()
{
if(keys.contains(KeyEvent.VK_UP) && keys.contains(KeyEvent.VK_RIGHT))
{
j.setPosition(Position.UP_RIGHT);
}
else if(keys.contains(KeyEvent.VK_UP) && keys.contains(KeyEvent.VK_LEFT))
{
j.setPosition(Position.UP_LEFT);
}
else if(keys.contains(KeyEvent.VK_DOWN) && keys.contains(KeyEvent.VK_RIGHT))
{
j.setPosition(Position.DOWN_RIGHT);
}
else if(keys.contains(KeyEvent.VK_DOWN) && keys.contains(KeyEvent.VK_LEFT))
{
j.setPosition(Position.DOWN_LEFT);
}
else if(keys.contains(KeyEvent.VK_UP))
{
j.setPosition(Position.UP);
}
else if(keys.contains(KeyEvent.VK_LEFT))
{
j.setPosition(Position.LEFT);
}
else if(keys.contains(KeyEvent.VK_RIGHT))
{
j.setPosition(Position.RIGHT);
}
else if(keys.contains(KeyEvent.VK_DOWN))
{
j.setPosition(Position.DOWN);
}
else
{
j.setPosition(Position.CENTER);
}
}
private int stringToKeyevent(String s){
switch(s){
case "UP":
return KeyEvent.VK_UP;
case "DOWN":
return KeyEvent.VK_DOWN;
case "LEFT":
return KeyEvent.VK_LEFT;
case "RIGHT":
return KeyEvent.VK_RIGHT;
}
return -1;
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)
{
Set<Integer> keysCopy = new HashSet<Integer>(keys);
keys.add(e.getKeyCode());
updateJoystickPosition();
if(REPEAT || !keys.equals(keysCopy) )
{
onJoystickMoved(j);
}
}
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)
{
Set<Integer> keysCopy = new HashSet<Integer>(keys);
keys.remove(e.getKeyCode());
updateJoystickPosition();
if(REPEAT || !keys.equals(keysCopy))
{
onJoystickMoved(j);
}
}
}
public void keyTyped(KeyEvent e) {}
}
+5
View File
@@ -0,0 +1,5 @@
package control.joystick;
public interface JoystickListener {
public void onJoystickMoved(JoystickEvent e);
}
+2
View File
@@ -0,0 +1,2 @@
/SQLConnector.class
/WebcamUploader.class
+286
View File
@@ -0,0 +1,286 @@
package data.io;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import model.objects.highscore.Highscore;
import audio.Song;
import audio.SongInstance;
public class SQLConnector
{
private Connection myConn = null;
public SQLConnector()
{
this("178.62.254.153", "3306","colorstrike","csadmin","aardbei123");
}
//Start connection with Database
public SQLConnector(String host, String port, String dbName, String userName, String password)
{
try
{
String url = "jdbc:mysql://" + host + ":" + port + "/"+ dbName + "?user="
+ userName
+ "&password="
+ password;
Class.forName("com.mysql.jdbc.Driver").newInstance ();
myConn = DriverManager.getConnection(url);
}
catch( SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
catch(Exception ex)
{
System.out.println("Error : " + ex.getMessage());
}
}
public Highscore getHighscore(Song s, SongInstance si)
{
String query = "SELECT * FROM highscore WHERE songinstance = (SELECT id FROM songinstance WHERE difficulty='" + si.getDifficulty() + "' AND song=(SELECT id FROM song WHERE folder='" + s.getFolder() + "')) ORDER BY score DESC LIMIT 1";
//System.out.println(query);
Statement st = executeResultQuery(query);
ResultSet result = null;
try {
result = st.getResultSet();
} catch (SQLException e1) {
e1.printStackTrace();
}
Highscore hsc = null;
try {
if(result.next() && result != null)
hsc = new Highscore(si, result.getString("username"), result.getInt("score"), result.getDate("date").getTime());
} catch (SQLException e) {
e.printStackTrace();
}
return hsc;
}
public List<Highscore> getHighscores(Song s, SongInstance si)
{
String query = "SELECT * FROM highscore WHERE songinstance = (SELECT id FROM songinstance WHERE difficulty='" + si.getDifficulty() + "' AND song=(SELECT id FROM song WHERE folder='" + s.getFolder() + "')) ORDER BY score DESC";
//System.out.println(query);
Statement st = executeResultQuery(query);
ResultSet result = null;
List<Highscore> hsc = new ArrayList<Highscore>();
try {
result = st.getResultSet();
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
while(result.next())
{
hsc.add(new Highscore(si, result.getString("username"), result.getInt("score"), result.getDate("date").getTime()));
}
} catch (SQLException e) {
e.printStackTrace();
}
return hsc;
}
public List<Highscore> getHighscoresToday(Song s, SongInstance si)
{
Statement st = executeResultQuery("SELECT * FROM highscore WHERE date=CURDATE() AND songinstance = (SELECT id FROM songinstance WHERE difficulty='" + si.getDifficulty() + "' AND song=(SELECT id FROM song WHERE folder='" + s.getFolder() + "')) ORDER BY score DESC");
ResultSet result = null;
List<Highscore> hsc = new ArrayList<Highscore>();
try {
result = st.getResultSet();
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
while(result.next())
{
hsc.add(new Highscore(si, result.getString("username"), result.getInt("score"), result.getDate("date").getTime()));
}
} catch (SQLException e) {
e.printStackTrace();
}
return hsc;
}
public int addHighscore(Song s, SongInstance si, String name, int currentScore) {
if(name.length() <= 5 && currentScore <= Integer.MAX_VALUE)
{
String query = "INSERT INTO highscore (username, score, date, songinstance) VALUES ('" + name.trim() + "', " + currentScore + ", CURDATE(), (SELECT id FROM songinstance WHERE difficulty='" + si.getDifficulty() + "' AND song=(SELECT id FROM song WHERE folder='" + s.getFolder() + "')))";
//System.out.println(query);
return executeInsertQuery(query);
}
return -1;
}
public void addPlaydata(Song s, SongInstance si, long time, int enemies_missed, int enemies_hit, int buttons_pressed, int joystick_moved) {
System.out.println("Inserting PlayData: " + time + ", " + enemies_missed + ", " + enemies_hit + ", " + buttons_pressed + ", " + joystick_moved);
String query = "INSERT INTO playdata (enemies_missed, enemies_hit, buttons_pressed, joystick_moved, start_time, play_time, songinstance) VALUES (" + enemies_missed + ", " + enemies_hit + ", " + buttons_pressed + ", " + joystick_moved + ", NOW(), " + time + ", (SELECT id FROM songinstance WHERE difficulty='" + si.getDifficulty() + "' AND song=(SELECT id FROM song WHERE folder='" + s.getFolder() + "')))";
//System.out.println(query);
executeInsertQuery(query);
}
public void update(List<Song> songs)
{
for(Song s : songs)
{
executeInsertQuery("INSERT INTO song (folder, title, author) VALUES ('" + s.getFolder() + "', '" + s.getTitle() + "', '" + s.getAuthor() + "');");
Statement st = executeResultQuery("SELECT id FROM song WHERE folder='" + s.getFolder() + "'");
ResultSet rs = null;
int id = -1;
try {
rs = st.getResultSet();
rs.next();
id = rs.getInt(1);
//System.out.println("Song " + id + " added to database");
rs.close();
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(id != -1)
{
for(SongInstance si : s.getSongs())
{
Statement st2 = executeResultQuery("SELECT id FROM songinstance WHERE song=" + id + " AND difficulty='" + si.getDifficulty() + "'");
ResultSet rs2 = null;
try {
rs2 = st2.getResultSet();
if(rs2.first())
{
//System.err.println("SongInstance Already Exists ");
}
else
{
executeInsertQuery("INSERT INTO songinstance (song, enemies, difficulty) VALUES (" + id + ", " + si.getObjects().size() + ", '" + si.getDifficulty() + "');");
//System.out.println("Songinstance Added");
}
rs.close();
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
Statement st3 = executeResultQuery("SELECT COUNT(1) FROM playdata WHERE songinstance = (SELECT id FROM songinstance WHERE difficulty='" + si.getDifficulty() + "' AND song=(SELECT id FROM song WHERE folder='" + s.getFolder() + "'))");
try {
ResultSet rs3 = st3.getResultSet();
rs3.next();
int i = rs3.getInt(1);
si.setTimesPlayed(i);
System.out.println(s.getTitle() + " - " + si.getDifficulty() + ": " + i);
} catch (SQLException e) {
e.printStackTrace();
}
Statement st4 = executeResultQuery("SELECT MAX(`score`) as score FROM `highscore` WHERE `songinstance`=(SELECT id FROM songinstance WHERE song=" + id + " AND difficulty='" + si.getDifficulty() + "')");
try {
ResultSet rs4 = st4.getResultSet();
if(rs4.next())
{
int i = rs4.getInt(1);
si.setHighestScore(i);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
else
{
//System.err.println("Insert Failed");
}
}
}
private int executeInsertQuery(String query)
{
try{
Statement s = myConn.createStatement();
s.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = s.getGeneratedKeys();
int id = 0;
if(rs.next())
{
id = rs.getInt(1);
}
s.close();
return id;
}
catch( SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
catch( Exception ex)
{
System.out.println("getMeasurement: " + ex.getMessage());
}
return -1;
}
//Execute a custom query
private Statement executeResultQuery(String query)
{
Statement s = null;
try{
s = myConn.createStatement();
s.executeQuery(query);
}
catch( SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
catch( Exception ex)
{
System.out.println("getMeasurement: " + ex.getMessage());
}
return s;
}
//Close connection with Database
@Override
public void finalize() throws Throwable
{
// Close database connection
if( myConn != null )
{
try
{
myConn.close();
System.out.println("Database connection terminated");
}
catch( Exception e ) {}
}
super.finalize();
}
}
Binary file not shown.
+88
View File
@@ -0,0 +1,88 @@
package data.io;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class WebcamUploader {
public static void takePictureAndUpload(int id) throws IOException{
Runtime.getRuntime().exec("streamer -c /dev/video0 -b 16 -o" + System.getProperty( "user.home" ) + "/ColorStrike/picture.jpeg");
HttpURLConnection httpUrlConnection = (HttpURLConnection)new URL("http://178.62.254.153/colorstrike/images/photoupload.php?filename="+id+".jpeg").openConnection();
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setRequestMethod("POST");
OutputStream os = httpUrlConnection.getOutputStream();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
FileInputStream fis = new FileInputStream(System.getProperty( "user.home" ) +"/ColorStrike/picture.jpeg");
byte[] buffer = new byte[2048];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1)
{
os.write(buffer, 0, bytesRead);
}
os.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(
httpUrlConnection.getInputStream()));
String s = null;
while ((s = in.readLine()) != null) {
System.out.println(s);
}
in.close();
fis.close();
}
public static BufferedImage createQRImage(String qrCodeText, int size) throws WriterException, IOException {
// Create the ByteMatrix for the QR-Code that encodes the given String
Hashtable hintMap = new Hashtable();
hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix byteMatrix = qrCodeWriter.encode(qrCodeText,
BarcodeFormat.QR_CODE, size, size, hintMap);
// Make the BufferedImage that are to hold the QRCode
int matrixWidth = byteMatrix.getWidth();
BufferedImage image = new BufferedImage(matrixWidth, matrixWidth,
BufferedImage.TYPE_INT_RGB);
image.createGraphics();
Graphics2D graphics = (Graphics2D) image.getGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, matrixWidth, matrixWidth);
// Paint and save the image using the ByteMatrix
graphics.setColor(Color.BLACK);
for (int i = 0; i < matrixWidth; i++) {
for (int j = 0; j < matrixWidth; j++) {
if (byteMatrix.get(i, j)) {
graphics.fillRect(i, j, 1, 1);
}
}
}
return image;
}
}
+111
View File
@@ -0,0 +1,111 @@
package image;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import main.Main;
public class Images {
public static ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
public Images() {
}
static {
try {
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/pulse.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/cursor.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/pressstart.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/colorstrike.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/background.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/aanwijzers4sho.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/kast.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/gameover.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/screenshot.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/help.png"))));
images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/youwon.png"))));
} catch (IOException e) {
e.printStackTrace();
}
}
public static BufferedImage getImage(ImageType img) {
return images.get(img.ordinal());
}
public enum ImageType {
pulse,cursor,pressstart,colorstrike,background,aanwijzers,kast,gameover, screenshot, help,youwon
}
public static BufferedImage readImage(File f) {
BufferedImage bf = null;
try {
bf = ImageIO.read(f);
} catch (IOException e) {
e.printStackTrace();
}
return bf;
}
public static BufferedImage toCompatibleImage(BufferedImage image)
{
// obtain the current system graphical settings
GraphicsConfiguration gfx_config = GraphicsEnvironment.
getLocalGraphicsEnvironment().getDefaultScreenDevice().
getDefaultConfiguration();
/*
* if image is already compatible and optimized for current system
* settings, simply return it
*/
if (image.getColorModel().equals(gfx_config.getColorModel()))
return image;
// image is not optimized, so create a new image that is
BufferedImage new_image = gfx_config.createCompatibleImage(
image.getWidth(), image.getHeight(), image.getTransparency());
// get the graphics context of the new image to draw the old image on
Graphics2D g2d = (Graphics2D) new_image.getGraphics();
// actually draw the image and dispose of context no longer needed
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
// return the new optimized image
new_image.setAccelerationPriority(1);
new_image.flush();
return new_image;
}
public static BufferedImage initBufferedImage(int width, int height){
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = env.getDefaultScreenDevice();
GraphicsConfiguration config = device.getDefaultConfiguration();
return config.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
}
public static VolatileImage initVolatileImage(int width, int height, int opc){
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
VolatileImage image = null;
image = gc.createCompatibleVolatileImage(width, height, opc);
int valid = image.validate(gc);
if (valid == VolatileImage.IMAGE_INCOMPATIBLE)
image = initVolatileImage(width, height, opc);
return image;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.
BIN
View File
Binary file not shown.
Executable
+52
View File
@@ -0,0 +1,52 @@
import sys
import time
from neopixel import *
# LED strip configuration:
LED_COUNT = 66 # Number of LED pixels.
LED_PIN = 18 # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ = 700000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 5 # DMA channel to use for generating signal (try 5)
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest
LED_INVERT = False # True to invert the signal (when using NPN transistor level shift)
def setLed(strip, l,r,g,b):
strip.setPixelColor(l,Color(r,g,b))
def strobetest(strip):
on = True
while True:
if on:
on = False
for i in range(strip.numPixels()):
strip.setPixelColor(i, Color(255,255,255))
else:
on = True
for i in range(strip.numPixels()):
strip.setPixelColor(i, Color(0,0,0))
strip.show()
time.sleep(100.0/1000)
if __name__ == '__main__':
ledstrip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS)
ledstrip.begin()
s = sys.stdin.readline().strip()
while s not in ['break', 'quit']:
message = s.split("|")
returnms = 'e'
if(message[0] == '1'):
if (len(message) == 5):
try:
led = int(message[1])
r = int(message[2])
g = int(message[3])
b = int(message[4])
setLed(ledstrip, led,r,g,b)
returnms = 'a'
except ValueError:
returnms = 'e'
elif (message[0] == '0'):
ledstrip.show()
returnms = 'a'
s = sys.stdin.readline().strip()
+15
View File
@@ -0,0 +1,15 @@
package main;
public class Main {
public static void main(String[] args) {
if(args.length != 1)
{
new Window(false);
}
else
{
new Window(true);
}
}
}
+89
View File
@@ -0,0 +1,89 @@
package main;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import model.GameModel;
import view.GameView;
import control.GameControl;
import control.GameStateManager;
import control.NetworkHandler;
import control.SongHandler;
import control.button.ButtonHandler;
import control.joystick.JoystickHandler;
import data.io.SQLConnector;
public class Window extends JFrame {
private static final long serialVersionUID = -9222956702898533696L;
public static boolean ON_ARCADE;
public final static int WIDTH = 1280;
public final static int HEIGHT = 1024;
public Window(boolean ON_ARCADE)
{
//Create window
super("Arcade");
setSize(WIDTH, HEIGHT);
//Create Events
Window.ON_ARCADE = ON_ARCADE;
if(ON_ARCADE){ //Only on the arcade machine
//Remove cursor
setUndecorated(true);
BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImg, new Point(0, 0), "blank cursor");
this.setCursor(blankCursor);
}
ButtonHandler bth = new ButtonHandler();
JoystickHandler jsh = new JoystickHandler();
final SQLConnector sql = new SQLConnector();
NetworkHandler ntw = new NetworkHandler("10.42.0.5", 1113, bth, jsh);
bth.setNetwork(ntw);
//Create Instances
final SongHandler sh = new SongHandler(sql);
GameStateManager gsm = new GameStateManager(sh, sql);
GameView view = new GameView(gsm);
GameModel model = new GameModel(sh, gsm, ntw);
GameControl control = new GameControl(model, view,gsm);
setContentPane(view);
//Set window close listener
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
sh.close();
try {
sql.finalize();
} catch (Throwable e1) {
e1.printStackTrace();
}
System.exit(0);
}
});
//Create EventListeners
addKeyListener(bth);
addKeyListener(jsh);
bth.addButtonListener(control);
jsh.addJoystickListener(control);
//Display
setResizable(false);
pack();
setVisible(true);
}
}
+118
View File
@@ -0,0 +1,118 @@
package model;
import java.awt.Color;
import main.Window;
import control.GameStateManager;
import control.NetworkHandler;
import control.SongHandler;
public class GameModel {
public static Color[] colors = { Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.CYAN, Color.BLUE };
private static String[] ledStripModes = {"full", "half", "quarter", "random"};
private GameStateManager gsm;
private NetworkHandler ntw;
private int count = 0;
public GameModel(SongHandler sh, GameStateManager gsm, NetworkHandler ntw) {
this.gsm = gsm;
this.ntw = ntw;
}
public void update(float factor) {
gsm.update(factor);
if (Window.ON_ARCADE)
updateLedStrip(factor);
}
private void updateLedStrip(float factor)
{
count += factor;
if(count > 400)
{
String mode = ledStripModes[(int) (Math.random() * (ledStripModes.length - 1) + 1)];
switch(mode)
{
default:
case "full":
Color c = colors[(int) (Math.random() * (colors.length - 1) + 1)];
for (int i = 6; i < 46; i++) {
ntw.setLed(i, c.getRed(), c.getGreen(), c.getBlue());
}
ntw.show();
break;
case "half":
Color c1 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
Color c2 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
while(c1==c2)
c2 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
for (int i = 6; i < 26; i++) {
ntw.setLed(i, c1.getRed(), c1.getGreen(), c1.getBlue());
}
for (int i = 27; i < 46; i++) {
ntw.setLed(i, c2.getRed(), c2.getGreen(), c2.getBlue());
}
ntw.show();
break;
case "quarter":
Color c3 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
Color c4 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
Color c5 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
Color c6 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
while(c3==c4)
c4 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
while(c4==c5)
c5 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
while(c5==c6)
c6 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
for (int i = 6; i < 16; i++) {
ntw.setLed(i, c3.getRed(), c3.getGreen(), c3.getBlue());
}
for (int i = 17; i < 26; i++) {
ntw.setLed(i, c4.getRed(), c4.getGreen(), c4.getBlue());
}
for (int i = 27; i < 36; i++) {
ntw.setLed(i, c5.getRed(), c5.getGreen(), c5.getBlue());
}
for (int i = 37; i <46; i++) {
ntw.setLed(i, c6.getRed(), c6.getGreen(), c6.getBlue());
}
ntw.show();
break;
case "random":
Color c7;
for (int i = 6; i < 46; i++) {
c7 = colors[(int) (Math.random() * (colors.length - 1) + 1)];
ntw.setLed(i, c7.getRed(), c7.getGreen(), c7.getBlue());
}
ntw.show();
break;
}
count = 0;
}
}
}
+27
View File
@@ -0,0 +1,27 @@
package model.drawObjects;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
public abstract class DrawObject {
protected AffineTransform transform;
protected double width,height;
protected int index = 0;
public DrawObject() {
transform = new AffineTransform();
}
public int getIndex(){
return index;
}
public void setIndex(int index){
this.index = index;
}
public abstract void draw(Graphics2D g2);
public abstract void update(float factor);
}
+164
View File
@@ -0,0 +1,164 @@
package model.drawObjects;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import model.objects.Path;
public class Enemy extends DrawObject {
public static final double distanceToOctagon = 1000,secondsToEnd = 5.0;
private int length;
private double lengthOf1Side,distanceFromStart;//lengthOf1Side wordt alleen gebruikt als de lijn een schuine lijn is.
public Line2D enemy;
private Color c;
private Path path;
public Enemy(int pathID,int lengthOfEnemy,Color c,Path path){
super();
this.length = lengthOfEnemy;
lengthOf1Side = Math.sqrt(Math.pow(lengthOfEnemy,2)/2);
this.c = c;
this.index = pathID;
this.path = path;
double beginX, beginY,endX = 0,endY = 0;
beginX = path.getX1();
beginY = path.getY1();
//the 8 richtingen van de octagon
switch(index){
case 0:
endY -= this.length;
break;
case 1:
endY -= lengthOf1Side;
endX += lengthOf1Side;
break;
case 2:
endX -= this.length;
break;
case 3:
endY += lengthOf1Side;
endX += lengthOf1Side;
break;
case 4:
endY += this.length;
break;
case 5:
endY += lengthOf1Side;
endX -= lengthOf1Side;
break;
case 6:
endX -= this.length;
break;
case 7:
endY -= lengthOf1Side;
endX -= lengthOf1Side;
break;
}
endX += beginX;
endY += beginY;
enemy = new Line2D.Double(beginX, beginY, endX, endY);
}
@Override
public void draw(Graphics2D g2) {
g2.setPaint(c);
g2.draw(enemy);
}
public void draw(Graphics2D g2, boolean b) {
g2.setPaint(c.darker().darker());
g2.draw(enemy);
}
@Override
public void update(float factor) {
distanceFromStart += (distanceToOctagon/(secondsToEnd*1000))*factor;
double x1,x2,y1,y2;
x1 = enemy.getX1();
x2 = enemy.getX2();
y1 = enemy.getY1();
y2 = enemy.getY2();
double angleX,angleY;
angleX = Math.cos(Math.toRadians(45))*distanceFromStart;
angleY = Math.sin(Math.toRadians(45))*distanceFromStart;
switch(index){
case 0:
y1 = path.getY1() + distanceFromStart;
y2 = y1 - length;
break;
case 1:
x1 = path.getX1() - angleX;
x2 = x1 + lengthOf1Side;
y1 = path.getY1() + angleY;
y2 = y1 - lengthOf1Side;
break;
case 2:
x1 = path.getX1()-distanceFromStart;
x2 = x1 + length;
break;
case 3:
x1 = path.getX1() - angleX;
x2 = x1 + lengthOf1Side;
y1 = path.getY1() - angleY;
y2 = y1 + lengthOf1Side;
break;
case 4:
y1 = path.getY1() - distanceFromStart;
y2 = y1 + length;
break;
case 5:
x1 = path.getX1() + angleX;
x2 = x1 - lengthOf1Side;
y1 = path.getY1() - angleY;
y2 = y1 + lengthOf1Side;
break;
case 6:
x1 = path.getX1() + distanceFromStart;
x2 = x1 - length;
break;
case 7:
x1 = path.getX1() + angleX;
x2 = x1 - lengthOf1Side;
y1 = path.getY1() + angleY;
y2 = y1 - lengthOf1Side;
break;
}
enemy.setLine(x1, y1, x2, y2);
}
public Color getColor() {
return c;
}
public void setColor(Color c) {
this.c = c;
}
public Line2D getEnemy() {
return enemy;
}
public void setBullet(Line2D bullet) {
this.enemy = bullet;
}
public double getDistanceFromStart() {
return distanceFromStart;
}
}
+74
View File
@@ -0,0 +1,74 @@
package model.drawObjects;
import image.Images;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
public class Player extends DrawObject {
private BufferedImage img,pulse;
private AffineTransform transform;
private int lastindex;
private Point2D middlePoint;
private int subImgX,subImgY, indexCursor =0;
private int subImgXBeat, indexBeat = 0;
private boolean beat = false;
public Player(int x, int y){
img = Images.getImage(Images.ImageType.cursor);
pulse = Images.getImage(Images.ImageType.pulse);
width = 100;//img.getWidth();
height = 100;//img.getHeight();
lastindex = -10;
middlePoint = new Point2D.Double(x,y);
}
public void draw(Graphics2D g2){//
subImgX = (indexCursor % 8)*100;
subImgY = (indexCursor / 8)*100;
subImgXBeat = (indexBeat % 9)*100;
BufferedImage subImg2 = pulse.getSubimage(subImgXBeat,0,100,100);
g2.drawImage(subImg2, transform, null);
BufferedImage subImg = img.getSubimage(subImgX,subImgY,100,100);
g2.drawImage(subImg, transform, null);
}
public void update(float update){
if(beat){
indexBeat++;
if(indexBeat >= 9)
{
indexBeat = 0;
beat = false;
}
}
indexCursor++;
indexCursor%=32;
if(lastindex != index){
transform = new AffineTransform();
transform.rotate(Math.toRadians(index*45),middlePoint.getX(),middlePoint.getY());
transform.translate(middlePoint.getX() - width/2, middlePoint.getY() - height);
lastindex = index;
}
}
public void setBeat() {
beat = true;
indexBeat = 0;
}
}
+195
View File
@@ -0,0 +1,195 @@
package model.gameState;
import image.Images;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import java.io.IOException;
import model.GameModel;
import model.objects.InfoPanel;
import model.objects.highscore.HighscoreName;
import com.google.zxing.WriterException;
import control.GameStateManager;
import control.SongHandler;
import control.GameStateManager.State;
import control.button.ButtonEvent;
import control.button.ButtonHandler;
import control.joystick.JoystickEvent;
import control.joystick.JoystickHandler;
import data.io.SQLConnector;
import data.io.WebcamUploader;
public class EndState extends GameState {
BufferedImage end = null;
VolatileImage background;
Font textFont = new Font("OCR A Extended", Font.BOLD, 70);
HighscoreName hsn;
int image_x = 0;
private boolean uploaded;
private BufferedImage QRimage;
boolean timeOut = false;
float timeOutCounter = 0;
int frame;
public EndState(GameStateManager gsm, SongHandler sh, SQLConnector sql) {
super(gsm, sh, sql);
hsn = new HighscoreName(640,717,5,textFont);
}
@Override
public void init() {
createBackground();
ButtonHandler.getButton(1).setColor(GameModel.colors[0]);
ButtonHandler.getButton(2).setColor(GameModel.colors[2]);
JoystickHandler.REPEAT = true;
uploaded = false;
timeOut = true;
timeOutCounter = 0;
if(PlayState.won()){
end = Images.getImage(Images.ImageType.youwon);
}else{
end = Images.getImage(Images.ImageType.gameover);
}
}
@Override
public void update(float factor) {
if(timeOut)
{
timeOutCounter += factor;
if(timeOutCounter > 800)
{
timeOut = false;
}
}
image_x = ((frame / 5) % 5) * 40;
frame++;
}
@Override
public void draw(Graphics2D g2) {
g2.drawImage(background, 0, 0, 1280, 1024, null);
if(end != null){
g2.drawImage(end.getSubimage(image_x, 0, 40, 26), 640-122, 400, 245, 130, null);
}
if(!uploaded)
hsn.drawName(g2);
else if(QRimage != null){
g2.drawImage(QRimage, (1280/2)-(QRimage.getWidth()/2), 600,null);
//1280 is de breedte van de panel
}
}
@Override
public void buttonPressed(ButtonEvent e) {
if(!timeOut)
{
switch(e.getButton().getButtonID()){
case 0:
gsm.setState(State.TITLE_STATE);
break;
case 1:
if(hsn.getName().trim().length() >= 3)
{
if(!uploaded){
int id = sql.addHighscore(sh.getCurrentSong(), sh.getCurrentSongInstance(), hsn.getName(), PlayState.currentScore);
try {
WebcamUploader.takePictureAndUpload(id);
} catch (IOException e2) {
e2.printStackTrace();
}
try {
QRimage = WebcamUploader.createQRImage("http://portfolio.jancokock.me/colorstrike/message.php?id="+id, 400);
} catch (WriterException | IOException e1) {
e1.printStackTrace();
}
uploaded = true;
}else{
gsm.setState(State.MENU_STATE);
}
}
break;
case 2:
gsm.setState(State.MENU_STATE);
break;
}
}
}
@Override
public void buttonReleased(ButtonEvent e) {}
@Override
public void onJoystickMoved(JoystickEvent e) {
if(!timeOut)
{
switch(e.getJoystick().getPos()){
case DOWN:
hsn.down();
break;
case LEFT:
hsn.left();
break;
case RIGHT:
hsn.right();
break;
case UP:
hsn.up();
break;
default:
break;
}
}
}
public void createBackground(){
background = Images.initVolatileImage(1280, 1024, Transparency.OPAQUE);
Graphics2D g2 = background.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(rh);
g2.setColor(new Color(1,1,1, 0.3f));
g2.fillRect(0,0,1280,1024);
g2.setColor(new Color(0,1,0, 0.7f));
g2.fillRect(0,0,100,1024);
g2.fillRect(1180,0,100,1024);
g2.setColor(new Color(1,1,0, 0.7f));
g2.fillRect(100,0,100,1024);
g2.fillRect(1080,0,100,1024);
g2.setColor(new Color(1,0,0, 0.7f));
g2.fillRect(200,0,100,1024);
g2.fillRect(980,0,100,1024);
g2.setColor(Color.BLACK);
g2.setFont(textFont);
g2.drawString("High Score", 385, 212);
g2.drawString(InfoPanel.getTotalHighscore() + "", 390, 342);
g2.dispose();
}
}
+30
View File
@@ -0,0 +1,30 @@
package model.gameState;
import java.awt.Graphics2D;
import control.GameStateManager;
import control.SongHandler;
import control.button.ButtonEvent;
import control.joystick.JoystickEvent;
import data.io.SQLConnector;
public abstract class GameState {
protected GameStateManager gsm;
protected SongHandler sh;
protected SQLConnector sql;
public GameState(GameStateManager gsm, SongHandler sh, SQLConnector sql) {
this.gsm = gsm;
this.sh = sh;
this.sql = sql;
}
public abstract void init();
public abstract void update(float factor);
public abstract void draw(Graphics2D g2);
public abstract void buttonPressed(ButtonEvent e);
public abstract void buttonReleased(ButtonEvent e);
public abstract void onJoystickMoved(JoystickEvent e);
public void stopAudio() { sh.close(); }
}
+93
View File
@@ -0,0 +1,93 @@
package model.gameState;
import image.Images;
import image.Images.ImageType;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import model.GameModel;
import control.GameStateManager;
import control.SongHandler;
import control.GameStateManager.State;
import control.button.ButtonEvent;
import control.button.ButtonHandler;
import control.joystick.JoystickEvent;
import data.io.SQLConnector;
public class HelpState extends GameState {
BufferedImage help = Images.getImage(ImageType.help);
VolatileImage background;
Font textFontSmall = new Font("OCR A Extended", Font.BOLD, 15);
int index = 0;
int frame;
public HelpState(GameStateManager gsm, SongHandler sh, SQLConnector sql){
super(gsm, sh, sql);
createBackground();
}
@Override
public void init() {
ButtonHandler.getButton(2).setColor(GameModel.colors[2]);
sh.play();
}
@Override
public void update(float factor) {
frame++;
}
@Override
public void draw(Graphics2D g2) {
g2.drawImage(background, 0, 0, 1280, 1024, null);
}
@Override
public void buttonPressed(ButtonEvent e) {
if(e.getButton().getButtonID() == 2) {
gsm.setState(State.MENU_STATE);
}
}
@Override
public void buttonReleased(ButtonEvent e) {
}
@Override
public void onJoystickMoved(JoystickEvent e) {
}
public void createBackground() {
background = Images.initVolatileImage(1280, 1024, Transparency.OPAQUE);
Graphics2D g2 = background.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(rh);
g2.drawImage(help, 0,0,1280,1024,null);
g2.setFont(textFontSmall);
//back
g2.setColor(GameModel.colors[2]);
g2.fillOval(80, 965, 30, 30);
g2.drawString("Back", 115, 985);
g2.dispose();
background.createGraphics();
}
}
+533
View File
@@ -0,0 +1,533 @@
package model.gameState;
import image.Images;
import image.Images.ImageType;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import java.util.ArrayList;
import java.util.List;
import model.GameModel;
import model.objects.DifficultyButton;
import model.objects.MenuButton;
import model.objects.highscore.Highscore;
import audio.Song;
import audio.SongInstance;
import audio.sorting.SortALPHA;
import audio.sorting.SortAUTHOR;
import audio.sorting.SortPLAYED;
import audio.sorting.SortSCORE;
import control.GameStateManager;
import control.SongHandler;
import control.GameStateManager.State;
import control.button.ButtonEvent;
import control.button.ButtonHandler;
import control.joystick.Joystick;
import control.joystick.Joystick.Position;
import control.joystick.JoystickEvent;
import control.joystick.JoystickHandler;
import data.io.SQLConnector;
public class MenuState extends GameState {
private ArrayList<MenuButton> buttons;
private ArrayList<DifficultyButton> buttons2;
private int selected, oldselected;
private List<Song> songs;
SQLConnector sql;
private int animationcounter;
private boolean subscreen, startanimation;
private VolatileImage mainScreenBackground, subScreenBackground, subScreenForeground;
int yPosDiffButton = 900;
private int difSelect=0, oldDifSelect = -1;
Font textFont = new Font("OCR A Extended", Font.BOLD, 50);
Font textFont2 = new Font("OCR A Extended", Font.BOLD, 35);
Font textFont3 = new Font("OCR A Extended", Font.BOLD, 20);
Font textFontSmall = new Font("OCR A Extended", Font.BOLD, 15);
BufferedImage aanwijzers = Images.getImage(ImageType.aanwijzers);
int index = 0;
int kleurButton1 = 0;
int kleurButton2 = 1;
int kleurButton3 = 2;
int kleurButton4 = 3;
int kleurButton5 = 4;
public MenuState(GameStateManager gsm, SongHandler sh, SQLConnector sql) {
super(gsm, sh, sql);
buttons = new ArrayList<MenuButton>();
buttons2 = new ArrayList<DifficultyButton>();
this.songs = sh.getSongs();
startanimation = true;
subscreen = false;
this.sql = sql;
selected = 0;
oldselected = -1;
buttons2.clear();
int instanceNr = 0;
for(int i = selectedToSong(selected).getSongs().size(); i>0; i--){
if(sh.getCurrentSong().getSongs().size() == 0)
continue;
SongInstance si = selectedToSong(selected).getSongs().get(i-1);
buttons2.add(new DifficultyButton(yPosDiffButton-instanceNr,si.getDifficulty(), GameModel.colors[i-1]));
instanceNr += 100;
}
difSelect = 0;
generateMainScreenBackground();
generateSubScreenBackground();
}
@Override
public void init() {
if(subscreen)
{
ButtonHandler.getButton(1).setColor(GameModel.colors[0]);
ButtonHandler.getButton(2).setColor(GameModel.colors[2]);
generateSubScreenForeground();
}
else
{
ButtonHandler.getButton(1).setColor(GameModel.colors[0]);
ButtonHandler.getButton(2).setColor(GameModel.colors[3]);
ButtonHandler.getButton(3).setColor(GameModel.colors[1]);
ButtonHandler.getButton(4).setColor(GameModel.colors[2]);
ButtonHandler.getButton(5).setColor(GameModel.colors[4]);
ButtonHandler.getButton(6).setColor(GameModel.colors[5]);
JoystickHandler.REPEAT = true;
}
}
@Override
public void update(float factor) {
if(startanimation){
buttonInAnimation(animationcounter);
if(animationcounter == 5){
startanimation = false;
}
}else if(subscreen){
//nextScreen();
}else{
//previousScreen();
}
if(selected != oldselected){
for(int i = 0; i < buttons.size(); i++){
buttons.get(i).setSong(selectedToSong(selected+(i-2)));
}
oldselected = selected;
}
if(difSelect != oldDifSelect)
{
oldDifSelect = difSelect;
generateSubScreenForeground();
}
index++;
}
@Override
public void draw(Graphics2D g2) {
buttons.clear();
buttons.add(new MenuButton(300,260,GameModel.colors[kleurButton1],selectedToSong(selected-2)));
buttons.add(new MenuButton(300,380,GameModel.colors[kleurButton2],selectedToSong(selected-1)));
buttons.add(new MenuButton(260,520,1020,80,GameModel.colors[kleurButton3],selectedToSong(selected)));
buttons.add(new MenuButton(300,680,GameModel.colors[kleurButton4],selectedToSong(selected+1)));
buttons.add(new MenuButton(300,800,GameModel.colors[kleurButton5],selectedToSong(selected+2)));
buttons.get(2).setSelected(true);
g2.setColor(Color.BLACK);
Font textFont2 = new Font("OCR A Extended", Font.BOLD, 50);
g2.setFont(textFont2);
if(!subscreen) {
g2.drawImage(mainScreenBackground, 0, 0, 1280,1024,null);
for(MenuButton b:buttons){
b.draw(g2);
}
}
if(subscreen) {
g2.drawImage(subScreenBackground,0,0,1280,1024,null);
g2.drawImage(subScreenForeground,0,0,1280,1024,null);
index%=25;
int y = (index/5)*75;
int x = (index%5)*75;
g2.drawImage(aanwijzers.getSubimage(x, y, 75, 75), 825,900 - difSelect*100,75,75,null);
}
}
@Override
public void buttonPressed(ButtonEvent e) {
if(subscreen){ //Screen for Song details
if(e.getButton().getButtonID() == 2){
subscreen = false;
gsm.init();
}
if(e.getButton().getButtonID() == 1){
sh.close();
gsm.setState(control.GameStateManager.State.PRE_GAME_STATE);
}
}else{ //Screen for selecting song
if(e.getButton().getButtonID() == 1){
subscreen = true;
gsm.init();
generateSubScreenForeground();
}else if(e.getButton().getButtonID() == 2){
gsm.setState(control.GameStateManager.State.HELP_STATE);
}
else
{
if(e.getButton().getButtonID() == 3){
sh.sort(new SortALPHA());
}else if(e.getButton().getButtonID() == 4){
sh.sort(new SortAUTHOR());
}else if(e.getButton().getButtonID() == 5){
sh.sort(new SortPLAYED());
}else if(e.getButton().getButtonID() == 6){
sh.sort(new SortSCORE());
}
selected = 0;
sh.set(songs.indexOf(selectedToSong(selected)));
sh.play();
}
}
if(e.getButton().getButtonID() == 0)
{
gsm.setState(State.TITLE_STATE);
}
}
@Override
public void buttonReleased(ButtonEvent e) {
}
@Override
public void onJoystickMoved(JoystickEvent e) {
if(subscreen){
if(e.getJoystick().getPos() == Joystick.Position.DOWN){
difSelect--;
if(difSelect < 0){
difSelect += buttons2.size();
}
}else if(e.getJoystick().getPos() == Joystick.Position.UP){
difSelect++;
if(difSelect > buttons2.size()-1){
difSelect = 0;
}
}
else if(e.getJoystick().getPos() == Joystick.Position.CENTER)
{
sh.set(selectedToSong(selected).getSongs().get( (sh.getCurrentSong().getSongs().size()-1) - difSelect));
}
//generateSubScreenForeground();
}else{ //Screen for selecting song
if(e.getJoystick().getPos() == Joystick.Position.DOWN){
selected++;
kleurButton1++;
kleurButton1 %= 6;
kleurButton2++;
kleurButton2 %= 6;
kleurButton3++;
kleurButton3 %= 6;
kleurButton4++;
kleurButton4 %= 6;
kleurButton5++;
kleurButton5 %= 6;
}else if(e.getJoystick().getPos() == Joystick.Position.UP){
selected--;
kleurButton1--;
if(kleurButton1 < 0){
kleurButton1 = 5;
}
kleurButton2--;
if(kleurButton2 < 0){
kleurButton2 = 5;
}
kleurButton3--;
if(kleurButton3 < 0){
kleurButton3 = 5;
}
kleurButton4--;
if(kleurButton4 < 0){
kleurButton4 = 5;
}
kleurButton5--;
if(kleurButton5 < 0){
kleurButton5 = 5;
}
}
else if(e.getJoystick().getPos() == Position.CENTER)
{
buttons2.clear();
int instanceNr = 0;
for(int i = selectedToSong(selected).getSongs().size(); i>0; i--){
if(sh.getCurrentSong().getSongs().size() == 0)
continue;
SongInstance si = selectedToSong(selected).getSongs().get(i-1);
buttons2.add(new DifficultyButton(yPosDiffButton-instanceNr,si.getDifficulty(), GameModel.colors[i-1]));
instanceNr += 100;
}
difSelect = 0;
sh.set(songs.indexOf(selectedToSong(selected)));
sh.play();
}
}
}
public void generateMainScreenBackground(){
mainScreenBackground = Images.initVolatileImage(1280, 1024, Transparency.OPAQUE);
Graphics2D g2 = mainScreenBackground.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(rh);
g2.setFont(textFont);
g2.setPaint(new GradientPaint(0, 0, new Color(0,0,1, 0.6f),1280,1024 ,new Color(0,0,1, 0.2f)));
g2.fillRect(0, 0, 1280, 1024);
g2.setPaint(new GradientPaint(0, 0, new Color(1,1,0, 0.6f),1280,1024 ,new Color(0,0,1, 0.2f)));
Polygon triangle2 = new Polygon();
triangle2.addPoint(0, 0);
triangle2.addPoint(0, 1024/4+50);
triangle2.addPoint(1280/2+50, 0);
g2.fillPolygon(triangle2);
g2.setColor(Color.ORANGE);
Polygon triangle = new Polygon();
triangle.addPoint(0, 0);
triangle.addPoint(0, 1024/4);
triangle.addPoint(1280/2, 0);
g2.fillPolygon(triangle);
g2.setColor(Color.BLACK);
g2.drawString("Main Menu", 32, 60);
g2.setFont(textFontSmall);
//select
g2.setColor(GameModel.colors[0]);
g2.fillOval(20, 780, 30, 30);
g2.drawString("Play", 55, 800);
//help
g2.setColor(GameModel.colors[3]);
g2.fillOval(20, 820, 30, 30);
g2.drawString("Help", 55, 840);
//letters
g2.setColor(GameModel.colors[1]);
g2.fillOval(20, 860, 30, 30);
g2.drawString("A-Z", 55, 880);
//most played
g2.setColor(GameModel.colors[2]);
g2.fillOval(20, 900, 30, 30);
g2.drawString("Author", 55, 920);
//most played
g2.setColor(GameModel.colors[4]);
g2.fillOval(20, 940, 30, 30);
g2.drawString("Most Played", 55, 960);
//most played
g2.setColor(GameModel.colors[5]);
g2.fillOval(20, 980, 30, 30);
g2.drawString("Highest Score", 55, 1000);
g2.dispose();
mainScreenBackground.createGraphics();
}
public void generateSubScreenBackground(){
subScreenBackground = Images.initVolatileImage(1280, 1024, Transparency.OPAQUE);
Graphics2D g2 = subScreenBackground.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(rh);
g2.setColor(Color.BLACK);
GradientPaint gp3 = new GradientPaint(640, 1024/8,Color.BLUE,640,1024 ,Color.WHITE);
g2.setPaint(gp3);
g2.fillRect(0, 0, 1280, 1024);
GradientPaint gp4 = new GradientPaint(0, 0,new Color(1,1,0,0.6f),1280,1024,new Color(1,1,1,0.2f));
g2.setPaint(gp4);
g2.fillRect(0,128,1280,25);
g2.setColor(Color.ORANGE);
g2.fillRect(0, 0, 1280, 1024/8);
g2.setColor(Color.BLACK);
g2.dispose();
subScreenBackground.createGraphics();
}
public void generateSubScreenForeground(){
subScreenForeground = Images.initVolatileImage(1280, 1024, Transparency.TRANSLUCENT);
Graphics2D g2 = subScreenForeground.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setComposite(AlphaComposite.DstOut);
g2.fillRect(0, 0, subScreenForeground.getWidth(), subScreenForeground.getHeight());
g2.setComposite(AlphaComposite.SrcOver);
g2.setRenderingHints(rh);
g2.setColor(Color.BLACK);
g2.setFont(textFont);
g2.drawString(selectedToSong(selected).getTitle(), 30, 60);
g2.setFont(textFont3);
g2.setColor(Color.WHITE);
g2.drawString("Author: " + selectedToSong(selected).getAuthor(), 30, 100);
g2.setFont(textFont);
boolean highscoresFound = true;
int HIGHSCORES_TO_DISPLAY = 7;
List<Highscore> highscores = sql.getHighscoresToday(selectedToSong(selected), sh.getCurrentSong().getSongs().get((sh.getCurrentSong().getSongs().size() - 1) - difSelect));
if(highscores.isEmpty())
{
highscores = sql.getHighscores(selectedToSong(selected), sh.getCurrentSong().getSongs().get((sh.getCurrentSong().getSongs().size() - 1) - difSelect));
if(highscores.isEmpty())
{
highscoresFound = false;
}
else
g2.drawString("All Time Highscores", 30, 235);
}
else
g2.drawString("Daily Highscore", 30, 235);
g2.setFont(textFont2);
if(highscoresFound)
{
HIGHSCORES_TO_DISPLAY = HIGHSCORES_TO_DISPLAY > highscores.size() ? highscores.size() : HIGHSCORES_TO_DISPLAY;
for(int i = 0; i<HIGHSCORES_TO_DISPLAY; i++)
{
Highscore hi = highscores.get(i);
g2.drawString(" " + (i+1) + "# " + hi.getName() + " - " + hi.getScore(), 30, 290 + i*80);
}
}
else
{
g2.drawString("No Highscores found", 30, 400);
}
for(DifficultyButton b : buttons2){
b.draw(g2);
}
g2.setFont(textFontSmall);
//play song
g2.setColor(GameModel.colors[0]);
g2.fillOval(20, 860, 30, 30);
g2.drawString("Play", 55, 880);
//back
g2.setColor(GameModel.colors[2]);
g2.fillOval(20, 900, 30, 30);
g2.drawString("Back", 55, 920);
//up
g2.setColor(Color.BLACK);
Polygon p = new Polygon();
p.addPoint(35, 940);
p.addPoint(20, 960);
p.addPoint(50, 960);
g2.fillPolygon(p);
g2.drawString("Up", 55, 960);
//down
Polygon p2 = new Polygon();
p2.addPoint(35, 1000);
p2.addPoint(20, 980);
p2.addPoint(50, 980);
g2.fillPolygon(p2);
g2.drawString("Down", 55, 1000);
g2.dispose();
subScreenForeground.createGraphics();
}
public void buttonInAnimation(int button){
if(button >= 0 && button < buttons.size() ){
buttons.get(button).setX(buttons.get(button).getX()+40);
if(buttons.get(button).getX() >= 320){
animationcounter++;
}
if(buttons.get(button).getX() >= -200){
buttonInAnimation(button+1);
}
}
}
/*
public void nextScreen(){
if(buttons.get(0).getX() > -700){
for(MenuButton b:buttons){
b.setX(b.getX()-100);
}
}
}
public void previousScreen(){
if(buttons.get(0).getX() < 300){
for(MenuButton b:buttons){
b.setX(b.getX()+100);
}
}
}
*/
public Song selectedToSong(int s){
s %= songs.size();
if(s < 0){
return songs.get(songs.size()+s);
}else{
return songs.get(s);
}
}
}
+287
View File
@@ -0,0 +1,287 @@
package model.gameState;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D;
import java.util.Iterator;
import model.drawObjects.Enemy;
import model.drawObjects.Player;
import model.objects.InfoPanel;
import model.objects.Path;
import model.objects.PlayArea;
import model.objects.highscore.Highscore;
import audio.ButtonInstance;
import audio.ObjectInstance;
import control.GameStateManager;
import control.SongHandler;
import control.GameStateManager.State;
import control.button.Button;
import control.button.ButtonEvent;
import control.button.ButtonHandler;
import control.joystick.JoystickEvent;
import data.io.SQLConnector;
public class PlayState extends GameState {
public static final Rectangle2D borderRect = new Rectangle2D.Double(256, 0, 1024, 1024);
private PlayArea area;
private InfoPanel infoPanel;
private Player player;
private Stroke stroke;
private Stroke borderStroke;
public static int sizeOfEnemy = 40;
public static int currentScore = 0;
public static int comboScore = 0;
public static double lifePoints = 100;
private int enemies_hit = 0;
private int enemies_missed = 0;
private int buttons_pressed = 0;
private int joystick_moved = 0;
private boolean init = false;
private static boolean won = false;
private long oldProgress = 0;
public PlayState(GameStateManager gsm, SongHandler sh, SQLConnector sql) {
super(gsm, sh, sql);
infoPanel = new InfoPanel(sh);
area = new PlayArea(256, 1024, 1024, 125);
player = new Player(1280 - 1024 + 1024 / 2, 1024 / 2);
stroke = new BasicStroke(sizeOfEnemy, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
borderStroke = new BasicStroke(sizeOfEnemy+2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
}
@Override
public void init() {
init = true;
won = false;
lifePoints = 100;
currentScore = 0;
comboScore = 0;
oldProgress = 0;
enemies_hit = 0;
enemies_missed = 0;
buttons_pressed = 0;
joystick_moved = 0;
Highscore h = sql.getHighscore(sh.getCurrentSong(), sh.getCurrentSongInstance());
if(h != null)
infoPanel.init(h.getScore());
for(Path p : area.paths)
{
p.getEnemysInPath().clear();
}
ButtonHandler.getButton(1).setColor(sh.getCurrentSongInstance().getButtons().get(0).getColor());
sh.play();
init = false;
}
@Override
public void update(float factor) {
if(init)
return;
long progress = (long) ((sh.getProgress() / 1000) + (Enemy.secondsToEnd * 1000));
for (ButtonInstance bu : sh.getCurrentSongInstance().getButtonsBetween(oldProgress, progress)) {
Button b = ButtonHandler.getButton(bu.getButtonID());
b.setColor(bu.getColor());
}
for (ObjectInstance ob : sh.getCurrentSongInstance().getObjectsBetween(oldProgress, progress)) {
Path p = area.paths.get(ob.getDirection());
p.addEnemy(ob.getColor(), ob.getDirection(), (int) ob.getLength());
}
if(progress > sh.getCurrentSongInstance().getEndTime() + Enemy.secondsToEnd*2500){
won = true;
endGame();
}
oldProgress = progress;
Enemy closedEnemy = null;
player.update(factor);
for (Path path : area.paths) {
Iterator<Enemy> enemyIterator = path.getEnemysInPath().iterator();
while (enemyIterator.hasNext()) {
Enemy e = enemyIterator.next();
if (e.getDistanceFromStart() > Enemy.distanceToOctagon + (sizeOfEnemy * 1.5)) {
enemyIterator.remove();
lifePoints -= 6;
comboScore /= 2;
enemies_missed++;
}
if(closedEnemy == null){
closedEnemy = e;
}
if((Enemy.distanceToOctagon-closedEnemy.getDistanceFromStart()) > (Enemy.distanceToOctagon-e.getDistanceFromStart())){
closedEnemy = e;
}
e.update(factor);
}
}
lifePoints -= 0.003 * factor;
infoPanel.updateIPanel();
if(lifePoints <= 0)
{
endGame();
}
if(comboScore >= 100)
{
comboScore = 0;
currentScore += 500;
}
area.count();
if(closedEnemy == null){
area.pathPainted(-1, null);
}else{
area.pathPainted(closedEnemy.getIndex(), closedEnemy.getColor());
}
}
private void endGame() {
if(sh.getProgress()/1000 > 5000)
{
sql.addPlaydata(sh.getCurrentSong(), sh.getCurrentSongInstance(), sh.getProgress()/1000, enemies_missed, enemies_hit, buttons_pressed, joystick_moved);
sh.getCurrentSongInstance().played();
}
if(currentScore == 0)
gsm.setState(State.MENU_STATE);
else
gsm.setState(State.END_STATE);
}
@Override
public void draw(Graphics2D g2) {
try {
infoPanel.draw(g2);
g2.setClip(borderRect);
area.draw(g2);
for (Path p : area.paths) {
if (p.getEnemysInPath() != null) {
for (Enemy enemy : p.getEnemysInPath()) {
g2.setStroke(borderStroke);
enemy.draw(g2, true);
g2.setStroke(stroke);
enemy.draw(g2);
}
}
}
if (player != null)
player.draw(g2);
} catch (Exception e) {
}
}
@Override
public void buttonPressed(ButtonEvent e) {
boolean notHit = true;
Iterator<Enemy> enemysInPath = area.paths.get(player.getIndex()).getEnemysInPath().iterator();
while (enemysInPath.hasNext()) {
Enemy enemy = enemysInPath.next();
if (enemy.getDistanceFromStart() > Enemy.distanceToOctagon || enemy.getDistanceFromStart() > Enemy.distanceToOctagon + sizeOfEnemy) {
if (e.getButton().getColor().equals(enemy.getColor())) {
currentScore += enemy.getDistanceFromStart() - Enemy.distanceToOctagon;
comboScore += 5;
lifePoints = Math.min(lifePoints+8, 100);
area.setHitAreaColor(enemy.getColor());
area.hit();
enemies_hit++;
enemysInPath.remove();
notHit = false;
break;
}
}
}
player.setBeat();
if(notHit)
{
if(area.paths.get(player.getIndex()).getEnemysInPath().size() > 0)
{
lifePoints -= 1.5;
}
}
if(e.getButton().getButtonID() == 0)
{
endGame();
}
else
buttons_pressed++;
}
@Override
public void buttonReleased(ButtonEvent e) {
}
@Override
public void onJoystickMoved(JoystickEvent e) {
switch (e.getJoystick().getPos()) {
case CENTER:
break;
case DOWN:
player.setIndex(4);
break;
case DOWN_LEFT:
player.setIndex(5);
break;
case DOWN_RIGHT:
player.setIndex(3);
break;
case LEFT:
player.setIndex(6);
break;
case RIGHT:
player.setIndex(2);
break;
case UP:
player.setIndex(0);
break;
case UP_LEFT:
player.setIndex(7);
break;
case UP_RIGHT:
player.setIndex(1);
break;
default:
break;
}
joystick_moved++;
}
public void addEnemy(int pathID, Color color) {
Path path = area.paths.get(pathID);
Enemy e = new Enemy(pathID, 1, color, path);
path.getEnemysInPath().addLast(e);
}
public static boolean won(){
return won;
}
}
+90
View File
@@ -0,0 +1,90 @@
package model.gameState;
import image.Images;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import control.GameStateManager;
import control.SongHandler;
import control.button.ButtonEvent;
import control.joystick.JoystickEvent;
import data.io.SQLConnector;
public class PreGameState extends GameState {
double index2 = 3;
double index = 3;
int grootte = 150;
BasicStroke s = new BasicStroke(20);
BufferedImage screenshot;
public PreGameState(GameStateManager gsm, SongHandler sh, SQLConnector sql) {
super(gsm, sh, sql);
screenshot = Images.getImage(Images.ImageType.screenshot);
}
@Override
public void init() {
grootte = 150;
index = 3;
index2 = 3;
}
@Override
public void update(float factor) {
index2 -= factor/1000;
index = (double) Math.round(index2*1000)/1000;
if(index <= 0){
gsm.setState(control.GameStateManager.State.PLAY_STATE);
}
if(grootte > 270)
grootte = 150;
grootte+=2;
}
@Override
public void draw(Graphics2D g2) {
g2.drawImage(screenshot,0,0,1280,1024,null);
Font textFont = new Font("OCR A Extended", Font.BOLD,grootte);
g2.setFont(textFont);
g2.setStroke(s);
g2.setColor(Color.RED);
String text = "" + index;
int width = g2.getFontMetrics().stringWidth(text);
g2.drawString(text, 325, 400);
if(index < 1){
text = "GO!!!";
}
else if (index < 2){
text = "SET";
}
else{
text = "READY";
}
width = g2.getFontMetrics().stringWidth(text);
g2.drawString(text, (256+1024/2)-width/2, 600);
}
@Override
public void buttonPressed(ButtonEvent e) {
}
@Override
public void buttonReleased(ButtonEvent e) {
}
@Override
public void onJoystickMoved(JoystickEvent e) {
}
}
+136
View File
@@ -0,0 +1,136 @@
package model.gameState;
import image.Images;
import image.Images.ImageType;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import control.GameStateManager;
import control.SongHandler;
import control.GameStateManager.State;
import control.button.ButtonEvent;
import control.joystick.JoystickEvent;
import data.io.SQLConnector;
public class TitleState extends GameState {
BufferedImage pressStart = Images.getImage(ImageType.pressstart);
BufferedImage colorStrike = Images.getImage(ImageType.colorstrike);
BufferedImage kast = Images.getImage(ImageType.kast);
VolatileImage background;
Font textFont = new Font("OCR A Extended", Font.BOLD, 15);
Font textFont2 = new Font("OCR A Extended", Font.BOLD, 130);
GradientPaint gp = new GradientPaint(300, 0, new Color(0, 0, 1, 0.6f), 980, 1024, new Color(0, 0, 1, 0.2f));
int index = 0;
int varx = 0;
int frame = 0;
int image_x = 0;
int indexKast = 0;
int xKast=0;
public TitleState(GameStateManager gsm, SongHandler sh, SQLConnector sql){
super(gsm, sh, sql);
if(!sh.isPlaying())
sh.play();
createBackground();
}
@Override
public void init() {
if(!sh.isPlaying())
sh.play();
frame = 0;
image_x = 0;
indexKast = 0;
xKast = 0;
}
@Override
public void update(float factor) {
image_x = ((frame / 6) % 6) * 49;
frame++;
indexKast++;
xKast = indexKast/10;
xKast%=4;
}
@Override
public void draw(Graphics2D g2) {
g2.drawImage(background, 0, 0, 1280, 1024, null);
g2.drawImage(pressStart.getSubimage(image_x, 0, 49, 26), 640-122, 512, 245, 130, null);
g2.drawImage(kast.getSubimage(xKast*600,0,600,800), 490,624,300,400,null);
g2.setFont(textFont);
g2.setColor(Color.WHITE);
g2.drawString("©2015 Team Hamtaro", 550, 1012);
}
@Override
public void buttonPressed(ButtonEvent e) {
switch (e.getButton().getButtonID()) {
case 0:
gsm.setState(State.MENU_STATE);
break;
}
}
@Override
public void buttonReleased(ButtonEvent e) {
}
@Override
public void onJoystickMoved(JoystickEvent e) {
}
public void createBackground() {
background = Images.initVolatileImage(1280, 1024, Transparency.OPAQUE);
Graphics2D g2 = background.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(rh);
g2.setColor(new Color(1, 1, 1, 0.3f));
g2.fillRect(0, 0, 1280, 1024);
g2.setColor(new Color(0, 1, 0, 0.7f));
g2.fillRect(0, 0, 100, 1024);
g2.fillRect(1180, 0, 100, 1024);
g2.setColor(new Color(1, 1, 0, 0.7f));
g2.fillRect(100, 0, 100, 1024);
g2.fillRect(1080, 0, 100, 1024);
g2.setColor(new Color(1, 0, 0, 0.7f));
g2.fillRect(200, 0, 100, 1024);
g2.fillRect(980, 0, 100, 1024);
g2.setPaint(gp);
g2.fillRect(300, 0, 680, 1024);
g2.setColor(Color.RED);
g2.setFont(textFont2);
g2.drawString("Color", 385, 212);
g2.drawString("Strike", 390, 342);
g2.dispose();
background.createGraphics();
}
}
+51
View File
@@ -0,0 +1,51 @@
package model.objects;
import image.Images;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Transparency;
import java.awt.image.VolatileImage;
public class DifficultyButton {
private int x = 900;
private int y;
private String str;
private Color color;
private VolatileImage button;
public DifficultyButton(int y, String str, Color color) {
this.y = y;
this.str = str;
this.color = color;
generateButton();
}
public void generateButton(){
button = Images.initVolatileImage(305, 80, Transparency.OPAQUE);
Graphics2D g2 = button.createGraphics();
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, 305, 80);
g2.setColor(Color.ORANGE);
g2.drawRect(0, 0, 304, 79);
g2.drawRect(2, 2, 300, 75);
// g2.drawRect(0, 0, 300, 75);
// g2.drawRect(0-2, 0-2, 304, 79);
g2.drawRect(0, 0, 304, 79);
g2.drawRect(2, 2, 300, 75);
g2.setColor(color);
Font textFont2 = new Font("OCR A Extended", Font.BOLD, 50);
g2.setFont(textFont2);
g2.drawString(str, 0+5, 0+50);
g2.dispose();
button.createGraphics();
}
public void draw(Graphics2D g2) {
g2.drawImage(button, x, y, 305, 80, null);
}
}
+132
View File
@@ -0,0 +1,132 @@
package model.objects;
import image.Images;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.geom.Ellipse2D;
import java.awt.image.VolatileImage;
import model.gameState.PlayState;
import control.SongHandler;
import control.button.ButtonHandler;
public class InfoPanel {
private static String totalHighscore = "000000";
private VolatileImage infoPanel;
private SongHandler sh;
private String time;
private int highscore = 0;
public InfoPanel(SongHandler sh){
this.sh = sh;
updateIPanel();
generateInfoPanel();
}
public void init(int highscore)
{
this.highscore = highscore;
updateIPanel();
generateInfoPanel();
}
public void updateIPanel() {
totalHighscore = "" + PlayState.currentScore;
long progress = (sh.getProgress() / 1000);
String millis = (((progress) % 1000) + "").length() > 3 ? ("" +((progress) % 1000)).substring(0, 2) : "" + ((progress) % 1000);
String second = ((progress / 1000) % 60 + "").length() <= 1 ? "0" +((progress / 1000) % 60) : "" + ((progress / 1000) % 60);
String minute = ((progress / (1000 * 60)) % 60 + "").length() <= 1 ? "0" +((progress / (1000 * 60)) % 60) : "" + ((progress / (1000 * 60)) % 60);
time = minute + ":" + second + ":" + millis;
generateInfoPanel();
}
private void generateInfoPanel(){
infoPanel = Images.initVolatileImage(256, 1024, Transparency.OPAQUE);
Graphics2D g2 = infoPanel.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(rh);
GradientPaint gp = new GradientPaint(0, 0, new Color(245,245,245), 256, 1024, Color.WHITE);
g2.setPaint(gp);
g2.setColor(Color.GREEN);
g2.fillRect(25, 900, (int)(2 * PlayState.lifePoints), 30);
g2.setColor(Color.YELLOW);
g2.fillRect(25, 950, (int)(2 * PlayState.comboScore), 30);
g2.setColor(Color.BLACK);
g2.drawRect(25, 900, 200, 30);
g2.drawRect(25, 950, 200, 30);
Font scoreFont = new Font("OCR A Extended", Font.BOLD, 35);
g2.setFont(scoreFont);
g2.drawString("Score: ", 25, 75);
g2.drawString(sh.getCurrentSong().getTitle(), 25, 215);
g2.drawString(sh.getCurrentSongInstance().getDifficulty(), 25, 295);
g2.drawString(time, 25, 375);
g2.drawString("" + highscore, 25, 455);
Font scoreFont2 = new Font("OCR A Extended", Font.BOLD, 25);
g2.setFont(scoreFont2);
g2.drawString("Title: ", 25, 185);
g2.drawString("Difficulty: ", 25, 265);
g2.drawString("Time: ", 25, 345);
g2.drawString("Best: ", 25, 425);
Font scoreFont3 = new Font("OCR A Extended", Font.BOLD, 45);
g2.setFont(scoreFont3);
g2.drawString("" + totalHighscore, 25, 115);
Ellipse2D oval1 = new Ellipse2D.Double(25, 700, 50, 50);
g2.setColor(ButtonHandler.getButton(1).getColor());
g2.fill(oval1);
Ellipse2D oval2 = new Ellipse2D.Double(85, 700, 50, 50);
g2.setColor(ButtonHandler.getButton(2).getColor());
g2.fill(oval2);
Ellipse2D oval3 = new Ellipse2D.Double(145, 700, 50, 50);
g2.setColor(ButtonHandler.getButton(3).getColor());
g2.fill(oval3);
Ellipse2D oval4 = new Ellipse2D.Double(50, 760, 50, 50);
g2.setColor(ButtonHandler.getButton(4).getColor());
g2.fill(oval4);
Ellipse2D oval5 = new Ellipse2D.Double(110, 760, 50, 50);
g2.setColor(ButtonHandler.getButton(5).getColor());
g2.fill(oval5);
Ellipse2D oval6 = new Ellipse2D.Double(170, 760, 50, 50);
g2.setColor(ButtonHandler.getButton(6).getColor());
g2.fill(oval6);
g2.dispose();
infoPanel.createGraphics();
}
public void draw(Graphics2D g2){
g2.drawImage(infoPanel, 0, 0, 256,1024,null);
}
public static String getTotalHighscore()
{
return totalHighscore;
}
}
+99
View File
@@ -0,0 +1,99 @@
package model.objects;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.util.ArrayList;
import main.Window;
import audio.Song;
public class MenuButton {
private ArrayList<Color> colors;
private int x, y;
private int xx,yy;
private boolean selected;
private Song song;
Color color;
public MenuButton(int x, int y, Color color, Song song){
this.x = x;
this.y = y;
this.color = color;
setSong(song);
}
public MenuButton(int x, int y, int xx, int yy, Color color, Song song){
this.x = x;
this.y = y;
this.color = color;
this.yy = yy;
this.xx = xx;
setSong(song);
}
public void draw(Graphics2D g2d){
if(selected){
g2d.setColor(color.darker().darker().darker().darker());
g2d.fillRect(x-10, y-10,xx+20,yy+20);
g2d.setColor(color.darker().darker());
g2d.fillRect(x-5, y-5,xx+10,yy+10);
g2d.setColor(color);
g2d.fillRect(x,y,xx,yy);
g2d.setColor(Color.BLACK);
g2d.drawRect(x-10, y-10, xx+20, yy+20);
g2d.drawRect(x-5, y-5, xx+10, yy+10);
g2d.drawRect(x, y, xx, yy);
}
else{
g2d.setColor(color.darker().darker());
g2d.fillRect(x-5, y-5,990,80);
g2d.setColor(color);
g2d.fillRect(x,y,980,70);
}
//draw text
g2d.setColor(Color.BLACK);
Font textFont = new Font("OCR A Extended", Font.BOLD,60);
g2d.setFont(textFont);
if(selected)
{
g2d.drawString(song.getTitle(), x+50, y+63);
Font textFont2 = new Font("OCR A Extended", Font.PLAIN,30);
g2d.setFont(textFont2);
g2d.drawString("# Played: " + song.getTimesPlayed(), Window.WIDTH - 450 - Math.min(song.getAuthor().length()*16, 570), y+yy+45);
g2d.drawString("Author: " + song.getAuthor(), Window.WIDTH - 200 - Math.min(song.getAuthor().length()*16, 570) , y+yy+45);
}
else
g2d.drawString(song.getTitle(), x+50, y+57);
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public boolean isSelected(){
return selected;
}
public void setX(int x){
this.x = x;
}
public int getX() {
return x;
}
public Song getSong() {
return song;
}
public void setSong(Song song) {
this.song = song;
}
}
+34
View File
@@ -0,0 +1,34 @@
package model.objects;
import java.awt.Color;
import java.awt.geom.Line2D;
import java.util.ArrayDeque;
import model.drawObjects.Enemy;
public class Path extends Line2D.Double {
/**
*
*/
private static final long serialVersionUID = -4209367336660836698L;
private ArrayDeque<Enemy> enemysInPath;
public Path(double x1, double y1, double x2, double y2) {
super(x1,y1,x2,y2);
enemysInPath = new ArrayDeque<Enemy>();
}
public ArrayDeque<Enemy> getEnemysInPath() {
return enemysInPath;
}
public void setEnemysInPath(ArrayDeque<Enemy> enemysInPath) {
this.enemysInPath = enemysInPath;
}
public void addEnemy(Color c, int pathID, int length)
{
enemysInPath.addLast(new Enemy(pathID, length, c,this));
}
}
+160
View File
@@ -0,0 +1,160 @@
package model.objects;
import image.Images;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.Transparency;
import java.awt.geom.GeneralPath;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.VolatileImage;
import java.util.ArrayList;
import java.util.List;
import model.drawObjects.Enemy;
import model.gameState.PlayState;
public class PlayArea {
public List<Path> paths;
private Polygon innerHitAreaBorder,outsideHitAreaBorder;
private GeneralPath hitArea;
private Color hitAreaColor,pathColor = null;
private VolatileImage background;
private boolean hit = false;
private int count = 0,maxCount = 100,pathID = -1;
private Stroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
private Rectangle2D backgroundPlay = new Rectangle2D.Double(256, 0, 1024, 1024);
public PlayArea(double xToRight,double heightOfGameScreen,double widthOfGameScreen, int sizeOctagon) {
super();
paths = new ArrayList<Path>();
setHitAreaColor(Color.WHITE);
//make the polygons
int amountOfAngles = 8;
double middlePointX = widthOfGameScreen/2+xToRight;
double middlePointY = heightOfGameScreen/2;
//the inner octagon
innerHitAreaBorder = new Polygon();
for(int i = 0; i < amountOfAngles; i++){
innerHitAreaBorder.addPoint((int)(middlePointX+sizeOctagon*Math.cos(i*Math.PI/(amountOfAngles/2))),
(int)(middlePointY+sizeOctagon*Math.sin(i*Math.PI/(amountOfAngles/2))));
}
//the outside octagon
outsideHitAreaBorder = new Polygon();
sizeOctagon += PlayState.sizeOfEnemy;
for(int i = 0; i < amountOfAngles; i++){
outsideHitAreaBorder.addPoint((int)(middlePointX+sizeOctagon*Math.cos(i*Math.PI/(amountOfAngles/2))),
(int)(middlePointY+sizeOctagon*Math.sin(i*Math.PI/(amountOfAngles/2))));
}
//hitArea the area where you must click the enemy
hitArea = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
hitArea.moveTo(innerHitAreaBorder.xpoints[0], innerHitAreaBorder.ypoints[0]);
for(int i = 1; i < innerHitAreaBorder.npoints;i++){
hitArea.lineTo(innerHitAreaBorder.xpoints[i], innerHitAreaBorder.ypoints[i]);
}
hitArea.moveTo(outsideHitAreaBorder.xpoints[0], outsideHitAreaBorder.ypoints[0]);
for(int i = 1; i < innerHitAreaBorder.npoints;i++){
hitArea.lineTo(outsideHitAreaBorder.xpoints[i], outsideHitAreaBorder.ypoints[i]);
}
//make the paths
double angleX,angleY;
angleX = (Math.cos(Math.toRadians(45)))*Enemy.distanceToOctagon;
angleY = (Math.sin(Math.toRadians(45)))*Enemy.distanceToOctagon;
paths.add(new Path(outsideHitAreaBorder.xpoints[6],outsideHitAreaBorder.ypoints[6]-Enemy.distanceToOctagon ,outsideHitAreaBorder.xpoints[6],outsideHitAreaBorder.ypoints[6]));//top
paths.add(new Path(outsideHitAreaBorder.xpoints[7] + angleX,outsideHitAreaBorder.ypoints[7] - angleY ,outsideHitAreaBorder.xpoints[7],outsideHitAreaBorder.ypoints[7]));//right -top
paths.add(new Path(outsideHitAreaBorder.xpoints[0]+Enemy.distanceToOctagon,outsideHitAreaBorder.ypoints[0] ,outsideHitAreaBorder.xpoints[0],outsideHitAreaBorder.ypoints[0]));//right
paths.add(new Path(outsideHitAreaBorder.xpoints[1]+angleX,outsideHitAreaBorder.ypoints[1]+angleY ,outsideHitAreaBorder.xpoints[1],outsideHitAreaBorder.ypoints[1]));//right -down
paths.add(new Path(outsideHitAreaBorder.xpoints[2],outsideHitAreaBorder.ypoints[2]+Enemy.distanceToOctagon ,outsideHitAreaBorder.xpoints[2],outsideHitAreaBorder.ypoints[2]));//down
paths.add(new Path(outsideHitAreaBorder.xpoints[3] - angleX,outsideHitAreaBorder.ypoints[3] + angleY ,outsideHitAreaBorder.xpoints[3],outsideHitAreaBorder.ypoints[3]));//left -down
paths.add(new Path(outsideHitAreaBorder.xpoints[4] - Enemy.distanceToOctagon,outsideHitAreaBorder.ypoints[4] ,outsideHitAreaBorder.xpoints[4],outsideHitAreaBorder.ypoints[4]));//left
paths.add(new Path(outsideHitAreaBorder.xpoints[5] - angleX,outsideHitAreaBorder.ypoints[5] - angleY ,outsideHitAreaBorder.xpoints[5],outsideHitAreaBorder.ypoints[5]));//left -top
//drawing into buffer
background = Images.initVolatileImage(1280,1024, Transparency.BITMASK);
Graphics2D g2 = background.createGraphics();
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(rh);
// g2.setColor(Color.WHITE);
// g2.fillRect(256, 0, 1024, 1024);
Line2D current;
g2.setColor(Color.BLACK);
g2.setStroke(stroke);
for(int i = 0; i < paths.size(); i++){
current = paths.get(i);
g2.draw(current);
}
g2.draw(innerHitAreaBorder);
g2.draw(outsideHitAreaBorder);
g2.dispose();
background.createGraphics();
}
public void draw(Graphics2D g2){
g2.drawImage(background, 0, 0, 1280, 1024, null);
if(hit){
g2.setColor(hitAreaColor);
g2.fill(hitArea);
if(count == maxCount){
hit = false;
}
}
if(pathID >= 0 && pathColor != null){
g2.setColor(new Color(pathColor.getRed(), pathColor.getGreen(), pathColor.getBlue(),50));
g2.fill(backgroundPlay);
g2.setStroke(stroke);
g2.setColor(pathColor);
g2.draw(paths.get(pathID));
}
}
public Line2D getLine(int index){
if(index < 0){
index = 0;
}
if(index >= 8 ){
index = 7;
}
return paths.get(index);
}
public void setHitAreaColor(Color color) {
hitAreaColor = color;
count = 0;
}
public void hit(){
hit = true;
}
public void count(){
if(hit){
count += 3;
if(count > maxCount){
count = maxCount;
}
hitAreaColor = new Color(hitAreaColor.getRed(),hitAreaColor.getGreen(),hitAreaColor.getBlue(),255-(255*count)/maxCount);
}
}
public void pathPainted(int pathID,Color pathColor){
this.pathID = pathID;
this.pathColor = pathColor;
}
}
+34
View File
@@ -0,0 +1,34 @@
package model.objects.highscore;
import java.util.Date;
import audio.SongInstance;
public class Highscore {
private SongInstance si;
private String name;
private int score;
private long time;
public Highscore(SongInstance si, String name, int score, long time) {
this.si = si;
this.name = name;
this.score = score;
this.time = time;
}
public int getScore() {
return score;
}
public long getTime(){
return time;
}
public Date getDate(){
return new Date(getTime());
}
public String getName(){
return name;
}
}
@@ -0,0 +1,39 @@
package model.objects.highscore;
import java.awt.Graphics2D;
public class HighscoreLetter {
public static int charLength = 46;
private char[] letters;
private int x,y,index = 0;
public HighscoreLetter(char[] letters, int x, int y) {
super();
this.letters = letters;
this.x = x;
this.y = y;
}
public void draw(Graphics2D g2){
charLength = g2.getFontMetrics().stringWidth(letters[index]+"");
g2.drawString(letters[index]+"", x, y);
g2.drawLine(x, y, x+charLength, y);
}
public void up(){
index++;
index %= letters.length;
}
public void down(){
index--;
if(index < 0){
index = letters.length-1;
}
}
public String getCurrentString(){
return letters[index]+"";
}
}
@@ -0,0 +1,65 @@
package model.objects.highscore;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
public class HighscoreName {
private final char[] characters = " abcdefghijklmnopqrstuvwxyz0123456789+-?!".toUpperCase().toCharArray();
private int spacing = 10;
private HighscoreLetter[] letters;
private Font font;
private int index = 0;
public HighscoreName(int x, int y,int nameLength,Font font) {
this.font = font;
letters = new HighscoreLetter[nameLength];
int marge = (int) (Math.floor(nameLength/2)-1)*spacing;
x -= (double)HighscoreLetter.charLength*(nameLength/2.0) + marge;
for(int i = 0; i < letters.length; i++){
letters[i] = new HighscoreLetter(characters, x+(HighscoreLetter.charLength*i)+(spacing*i), y);
}
}
public void drawName(Graphics2D g2){
g2.setFont(font);
for(int i = 0; i < letters.length; i++){
if(i == index){
g2.setColor(Color.RED);
}else{
g2.setColor(Color.BLACK);
}
letters[i].draw(g2);
}
}
public void left(){
index--;
if(index < 0){
index = letters.length-1;
}
}
public void right(){
index++;
index %= letters.length;
}
public void up(){
letters[index].up();
}
public void down(){
letters[index].down();
}
public String getName(){
String name = "";
for(int i = 0; i < letters.length; i++){
name += letters[i].getCurrentString();
}
return name;
}
}
BIN
View File
Binary file not shown.
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+43
View File
@@ -0,0 +1,43 @@
package view;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import javax.swing.JPanel;
import control.GameStateManager;
public class GameView extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1939480784205689618L;
GameStateManager gsm;
// Font fpsfont = new Font("OCR A Extended", Font.BOLD, 60);
public GameView(GameStateManager gsm) {
this.gsm = gsm;
this.setPreferredSize(new Dimension(1280, 1024));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(rh);
gsm.currentState.draw(g2d);
//g2d.setColor(Color.RED);
//g2d.setFont(fpsfont);
//g2d.drawString(gsm.fps + "fps", 1000, 40);
Toolkit.getDefaultToolkit().sync();
}
}
Binary file not shown.
Binary file not shown.