Merge pull request #23 from httpspedroh/master

Update - Gabaritos & organização geral
This commit is contained in:
Felipe Domingos 2022-10-18 09:14:31 -03:00 committed by GitHub
commit 8c115d5f4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 8417 additions and 735 deletions

View File

@ -1,16 +1,18 @@
# AEDII
# 💻 AEDS II
Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II
## Ajuda
## ❓ Ajuda
[Guia com os principais comandos](fonte/ajuda/README.md)
[Readme.md com os principais comandos.](fonte/ajuda/README.md)
## fonte
## labs
Ativdades dos laboratórios.
## 📁 Fonte
[Pasta com as bibliotecas usadas na disciplina](fonte/ajuda/java)
## tps
## ⚙️ Labs
[Pasta com os exercícios de treinamento do laboratório](labs)
## 🔥 TPS
[Pasta com os trabalhos práticos do laboratório](tps)

View File

@ -2,8 +2,8 @@
* @file Game.java
* @author Pedro Lopes
* @version 0.2
* @date 2022-10-02
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/

View File

@ -0,0 +1,50 @@
840010 Garden Paws Dec/2018 50000 - 100000 0 19.99 2 [English] http://www.gardenpawsgame.com true true false 92% 5h 46m Bitten Toast Games Inc. [Adventure, Indie, RPG, Simulation]
866510 !AnyWay! Jun/2018 50000 - 100000 0 1.79 37 [English, Russian, French, Italian, German, Polish, Ukrainian, Swedish, Simplified Chinese] null true false false 69% 5h 53m EYEFRONT [Adventure, Casual, Indie]
1970560 Bobbi Adventure May/2022 50000 - 100000 0 24.99 0 [English] null true false false 67% null Felio Stung ROG [Indie]
411740 Yet Another World Nov/2015 50000 - 100000 0 5.99 0 [English] null true true true 78% 6h 24m Energy Milk [Action, Adventure, Indie]
1509590 Fujiwara Bittersweet Jan/2021 50000 - 100000 0 0.00 0 [English] null true true true 91% null MagicBenchVN [Free to Play, Indie]
458520 Wrath of Anna Apr/2018 50000 - 100000 0 19.99 1 [English, Spanish - Spain, Hungarian, German, Norwegian, Polish, Swedish, Russian] http://LorenzoEnt.com true false false 35% 2h 50m Lorenzo Ent.,Michael L. Fiorentino Gutierrez [Action, Adventure, Indie]
920210 LEGO® Star Wars™: The Skywalker Saga Apr/2022 500000 - 1000000 0 49.99 8 [English, French, Italian, German, Spanish - Spain, Arabic, Danish, Dutch, Korean, Polish, Portuguese - Brazil, Russian, Spanish - Latin America, Traditional Chinese, Japanese] null true false false 92% 22h 42m TT Games [Action, Adventure]
1444020 Reactor Tech² Aug/2021 50000 - 100000 0 14.99 0 [English, Russian] null true false false 68% null 4Co [Indie, Simulation, Strategy]
1232460 Onee Chanbara ORIGIN Oct/2020 50000 - 100000 18 59.99 96 [English, Simplified Chinese, Traditional Chinese, Japanese, Korean] null true false false 72% 2h 25m Tamsoft [Action]
2026070 Tank Commander: Battlefield Jul/2022 50000 - 100000 0 2.99 0 [English] null true false false 100% null SP GAMES [Action, Indie, Simulation]
258880 Professional Farmer 2014 Nov/2013 50000 - 100000 0 2.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Russian, Dutch, Swedish, Norwegian] http://www.professional-farmer.com/ true false false 46% 32h 9m PlayWay S.A. [Simulation]
295250 Stranded May/2014 50000 - 100000 0 0.49 0 [English] null true true true 35% 3h 56m Peter Moorhead [Adventure, Indie]
299500 International Snooker May/2014 50000 - 100000 0 5.99 0 [English] http://www.bigheadgames.co.uk/ true false false 62% 1h 11m Big Head Games Ltd [Casual, Sports]
574080 Fog of War Jun/2018 50000 - 100000 0 4.99 1 [English, Russian] null true false false 48% 6h 14m Monkeys Lab. [Action, Indie, Massively Multiplayer, RPG, Simulation, Strategy]
598780 Boreal Blade Nov/2020 50000 - 100000 0 3.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese] https://www.borealblade.com true false false 66% null Frozenbyte [Action, Early Access]
1217190 浮世万千之前世今生 Jan/2020 50000 - 100000 0 5.49 1 [Simplified Chinese] null true false false 78% null 飞天大胖喵 [Adventure, Casual, Indie, RPG, Strategy]
257730 Infinity Wars: Animated Trading Card Game Sep/2014 500000 - 1000000 0 0.00 0 [English, Simplified Chinese] http://www.infinitywarsgame.com true false false 77% 6h 24m Lightmare Studios [Indie, Massively Multiplayer, Strategy]
1807730 Lab Bio-Terror Dec/2021 50000 - 100000 0 12.99 0 [English] null true false false 82% null VOLTECH [Action, Indie]
773670 Delete Jan/2018 50000 - 100000 0 1.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean] null true true false 96% 1h 24m PONY [Casual, Indie]
1803150 Void Slayer Jan/2022 50000 - 100000 0 4.99 0 [English] null true false false 79% null Madmind Studio: After hours [Action, Indie]
1573070 Endless Furry Blackjack Mar/2021 50000 - 100000 0 0.99 0 [English] https://m.youtube.com/ericyoungvfx/ true false false 20% null Tegridy Made Games [Casual, Indie, Sports, Strategy]
513930 J.U.R : Japan Underground Racing Aug/2016 50000 - 100000 0 0.49 0 [English] null true false false 32% null JDM4iK [Casual, Indie, Racing, Simulation]
385250 Paint it Back Oct/2015 50000 - 100000 0 7.99 0 [English] http://casuallabs.com/wp/?page_id=24 true true true 98% null Casual Labs [Casual]
261880 Corporate Lifestyle Simulator Mar/2014 50000 - 100000 0 4.99 1 [English] http://www.dolphinbarn.com true false false 83% 4h 7m DolphinBarn [Action, Casual, Indie]
533300 Zup! Oct/2016 500000 - 1000000 0 0.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Portuguese - Brazil, Hungarian, Greek, Danish, Traditional Chinese, Simplified Chinese, Korean, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Thai, Turkish, Ukrainian, Finnish, Czech, Swedish, Japanese] http://quietriver.info/ true false false 94% 1h 42m Quiet River [Casual, Indie]
542340 Slingshot people Oct/2016 500000 - 1000000 0 0.99 0 [English] http://www.vsemagy.ru/index.php true false false 47% 3h 50m StalkerAlex [Action, Casual, Indie, Simulation]
1209040 Cyber Hunter Jun/2020 500000 - 1000000 0 0.00 0 [English, French, German, Spanish - Spain, Russian, Japanese, Simplified Chinese, Traditional Chinese, Portuguese - Brazil, Korean, Thai, Vietnamese] https://www.cyberhunter.game/ true false false 73% 5h 41m NetEase Games [Action, Free to Play, Massively Multiplayer]
8790 GTR 2 FIA GT Racing Game Dec/2012 50000 - 100000 0 7.99 0 [English] http://www.simbin.com/games/gtr2/ true false false 93% 11m SimBin Studios AB [Racing, Simulation, Sports]
8000 Tomb Raider: Anniversary Jun/2007 500000 - 1000000 13 8.99 0 [English, French, German, Italian, Spanish - Spain] http://www.tombraider.com/anniversary/ true false false 82% 6h Crystal Dynamics [Action, Adventure]
415150 Pang Adventures Apr/2016 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Portuguese - Brazil, Russian] https://www.facebook.com/Pang.Adventures/ true false false 80% 3h 29m Dotemu [Action, Casual, Strategy]
2012500 The Katydids Incident Jun/2022 50000 - 100000 0 4.99 0 [English] https://punxstudios.co true false false 100% null Punx Studios [Indie, Simulation]
691150 Saku Saku: Love Blooms with the Cherry Blossoms Oct/2017 50000 - 100000 0 19.99 0 [English] null true false false 92% 5h 16m PALETTE [Sexual Content, Nudity, Casual]
283370 Marine Sharpshooter II: Jungle Warfare Apr/2014 50000 - 100000 0 2.99 0 [English] http://www.funboxmedia.co.uk/ true false false 32% 2h 3m Jarhead Games [Action]
249650 Blackguards Jan/2014 500000 - 1000000 0 0.99 2 [English, German, French, Spanish - Spain, Portuguese - Brazil, Russian, Italian, Japanese, Korean, Czech, Turkish, Polish, Simplified Chinese] http://www.blackguards-game.com true false false 62% 8h 58m Daedalic Entertainment [Indie, RPG, Strategy]
268870 Satellite Reign Aug/2015 500000 - 1000000 0 29.99 3 [English, French, Italian, German, Spanish - Spain, Czech, Russian] http://www.satellitereign.com/ true true true 71% 5h 18m 5 Lives Studios [Action, Indie, Strategy]
1172510 Unlock The King Nov/2019 50000 - 100000 0 0.99 0 [English] null true true false 96% null Minimol Games [Casual, Strategy]
927890 Hentai Girl Linda Dec/2018 50000 - 100000 0 0.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean, Spanish - Latin America, Vietnamese] null true true false 94% 1h 13m GirlGames [Casual, Indie, RPG, Simulation]
25700 Madballs in Babo:Invasion Sep/2009 50000 - 100000 0 4.99 7 [English, German, Korean, Portuguese, Spanish - Spain, French, Italian, Russian] http://www.baboinvasion.com true true false 84% 4h 15m Playbrains [Action, Casual, Indie]
281610 Homeworld: Deserts of Kharak Jan/2016 500000 - 1000000 0 49.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Polish] http://www.desertsofkharak.com true true false 83% 8h 32m Blackbird Interactive [Strategy]
485610 Ball 3D: Soccer Online Mar/2017 500000 - 1000000 0 9.99 0 [English] http://www.ball3d.com true true false 83% 2h 49m Unusualsoft [Sports]
1276850 Kane's Shadow Apr/2020 50000 - 100000 0 0.00 0 [English] null true true false 67% null Plush Productions LLC [Casual, Indie]
722340 Captain vs Sky Pirates Oct/2017 50000 - 100000 0 2.99 5 [English] https://store.steampowered.com/publisher/boogygames/ true false false 25% null Boogygames Studios [Action, Adventure, Indie, Strategy]
1499640 Y.E.T.I Jan/2021 50000 - 100000 0 0.49 0 [English] https://anpa.us true false false 80% null Racing Bros [Action, Indie]
1848450 Nightmare of Decay May/2022 50000 - 100000 0 3.99 0 [English, French, Polish, Russian, Simplified Chinese, Traditional Chinese, Spanish - Latin America, Portuguese - Brazil, Italian, German, Czech, Hungarian, Turkish, Norwegian, Swedish] null true false false 98% 5h 56m Checkmaty [Action, Adventure, Indie]
615700 A Plunge into Darkness Mar/2020 50000 - 100000 0 5.99 1 [English] https://www.aldorlea.org/ true false false 73% null Aldorlea [Adventure, Indie, RPG, Simulation, Strategy]
744980 Super Club Soccer Oct/2019 50000 - 100000 0 0.00 0 [English] http://www.superclubsoccer.com/ true false true 69% null Trick27 Studios Limited [Free to Play, Massively Multiplayer, Sports, Early Access]
10180 Call of Duty®: Modern Warfare® 2 (2009) Nov/2009 5000000 - 10000000 0 19.99 2 [English, French, German, Italian, Spanish - Spain] https://www.callofduty.com/ true true false 93% 12h 56m Infinity Ward [Action]
234390 Teleglitch: Die More Edition Jul/2013 500000 - 1000000 0 3.24 1 [English] http://www.teleglitch.com true true true 85% 2h 20m Test3 Projects [Action, Indie]
1641670 EdgeOfTheAbyssAwaken Jun/2022 50000 - 100000 0 18.99 3 [English, Simplified Chinese] null true false false 74% null TrinityBJ [Action, Indie, RPG, Strategy]
427520 Factorio Aug/2020 5000000 - 10000000 0 30.00 1 [English, French, Italian, German, Spanish - Spain, Hungarian, Dutch, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Finnish, Swedish, Czech, Russian, Ukrainian, Japanese, Simplified Chinese, Traditional Chinese, Korean, Turkish] https://www.factorio.com true true true 97% 89h 43m Wube Software LTD. [Casual, Indie, Simulation, Strategy]

View File

@ -0,0 +1,51 @@
840010
866510
1970560
411740
1509590
458520
920210
1444020
1232460
2026070
258880
295250
299500
574080
598780
1217190
257730
1807730
773670
1803150
1573070
513930
385250
261880
533300
542340
1209040
8790
8000
415150
2012500
691150
283370
249650
268870
1172510
927890
25700
281610
485610
1276850
722340
1499640
1848450
615700
744980
10180
234390
1641670
427520
FIM

View File

@ -0,0 +1,50 @@
840010 Garden Paws Dec/2018 50000 - 100000 0 19.99 2 [English] http://www.gardenpawsgame.com true true false 92% 5h 46m Bitten Toast Games Inc. [Adventure, Indie, RPG, Simulation]
866510 !AnyWay! Jun/2018 50000 - 100000 0 1.79 37 [English, Russian, French, Italian, German, Polish, Ukrainian, Swedish, Simplified Chinese] null true false false 69% 5h 53m EYEFRONT [Adventure, Casual, Indie]
1970560 Bobbi Adventure May/2022 50000 - 100000 0 24.99 0 [English] null true false false 67% null Felio Stung ROG [Indie]
411740 Yet Another World Nov/2015 50000 - 100000 0 5.99 0 [English] null true true true 78% 6h 24m Energy Milk [Action, Adventure, Indie]
1509590 Fujiwara Bittersweet Jan/2021 50000 - 100000 0 0.00 0 [English] null true true true 91% null MagicBenchVN [Free to Play, Indie]
458520 Wrath of Anna Apr/2018 50000 - 100000 0 19.99 1 [English, Spanish - Spain, Hungarian, German, Norwegian, Polish, Swedish, Russian] http://LorenzoEnt.com true false false 35% 2h 50m Lorenzo Ent.,Michael L. Fiorentino Gutierrez [Action, Adventure, Indie]
920210 LEGO® Star Wars™: The Skywalker Saga Apr/2022 500000 - 1000000 0 49.99 8 [English, French, Italian, German, Spanish - Spain, Arabic, Danish, Dutch, Korean, Polish, Portuguese - Brazil, Russian, Spanish - Latin America, Traditional Chinese, Japanese] null true false false 92% 22h 42m TT Games [Action, Adventure]
1444020 Reactor Tech² Aug/2021 50000 - 100000 0 14.99 0 [English, Russian] null true false false 68% null 4Co [Indie, Simulation, Strategy]
1232460 Onee Chanbara ORIGIN Oct/2020 50000 - 100000 18 59.99 96 [English, Simplified Chinese, Traditional Chinese, Japanese, Korean] null true false false 72% 2h 25m Tamsoft [Action]
2026070 Tank Commander: Battlefield Jul/2022 50000 - 100000 0 2.99 0 [English] null true false false 100% null SP GAMES [Action, Indie, Simulation]
258880 Professional Farmer 2014 Nov/2013 50000 - 100000 0 2.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Russian, Dutch, Swedish, Norwegian] http://www.professional-farmer.com/ true false false 46% 32h 9m PlayWay S.A. [Simulation]
295250 Stranded May/2014 50000 - 100000 0 0.49 0 [English] null true true true 35% 3h 56m Peter Moorhead [Adventure, Indie]
299500 International Snooker May/2014 50000 - 100000 0 5.99 0 [English] http://www.bigheadgames.co.uk/ true false false 62% 1h 11m Big Head Games Ltd [Casual, Sports]
574080 Fog of War Jun/2018 50000 - 100000 0 4.99 1 [English, Russian] null true false false 48% 6h 14m Monkeys Lab. [Action, Indie, Massively Multiplayer, RPG, Simulation, Strategy]
598780 Boreal Blade Nov/2020 50000 - 100000 0 3.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese] https://www.borealblade.com true false false 66% null Frozenbyte [Action, Early Access]
1217190 浮世万千之前世今生 Jan/2020 50000 - 100000 0 5.49 1 [Simplified Chinese] null true false false 78% null 飞天大胖喵 [Adventure, Casual, Indie, RPG, Strategy]
257730 Infinity Wars: Animated Trading Card Game Sep/2014 500000 - 1000000 0 0.00 0 [English, Simplified Chinese] http://www.infinitywarsgame.com true false false 77% 6h 24m Lightmare Studios [Indie, Massively Multiplayer, Strategy]
1807730 Lab Bio-Terror Dec/2021 50000 - 100000 0 12.99 0 [English] null true false false 82% null VOLTECH [Action, Indie]
773670 Delete Jan/2018 50000 - 100000 0 1.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean] null true true false 96% 1h 24m PONY [Casual, Indie]
1803150 Void Slayer Jan/2022 50000 - 100000 0 4.99 0 [English] null true false false 79% null Madmind Studio: After hours [Action, Indie]
1573070 Endless Furry Blackjack Mar/2021 50000 - 100000 0 0.99 0 [English] https://m.youtube.com/ericyoungvfx/ true false false 20% null Tegridy Made Games [Casual, Indie, Sports, Strategy]
513930 J.U.R : Japan Underground Racing Aug/2016 50000 - 100000 0 0.49 0 [English] null true false false 32% null JDM4iK [Casual, Indie, Racing, Simulation]
385250 Paint it Back Oct/2015 50000 - 100000 0 7.99 0 [English] http://casuallabs.com/wp/?page_id=24 true true true 98% null Casual Labs [Casual]
261880 Corporate Lifestyle Simulator Mar/2014 50000 - 100000 0 4.99 1 [English] http://www.dolphinbarn.com true false false 83% 4h 7m DolphinBarn [Action, Casual, Indie]
533300 Zup! Oct/2016 500000 - 1000000 0 0.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Portuguese - Brazil, Hungarian, Greek, Danish, Traditional Chinese, Simplified Chinese, Korean, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Thai, Turkish, Ukrainian, Finnish, Czech, Swedish, Japanese] http://quietriver.info/ true false false 94% 1h 42m Quiet River [Casual, Indie]
542340 Slingshot people Oct/2016 500000 - 1000000 0 0.99 0 [English] http://www.vsemagy.ru/index.php true false false 47% 3h 50m StalkerAlex [Action, Casual, Indie, Simulation]
1209040 Cyber Hunter Jun/2020 500000 - 1000000 0 0.00 0 [English, French, German, Spanish - Spain, Russian, Japanese, Simplified Chinese, Traditional Chinese, Portuguese - Brazil, Korean, Thai, Vietnamese] https://www.cyberhunter.game/ true false false 73% 5h 41m NetEase Games [Action, Free to Play, Massively Multiplayer]
8790 GTR 2 FIA GT Racing Game Dec/2012 50000 - 100000 0 7.99 0 [English] http://www.simbin.com/games/gtr2/ true false false 93% 11m SimBin Studios AB [Racing, Simulation, Sports]
8000 Tomb Raider: Anniversary Jun/2007 500000 - 1000000 13 8.99 0 [English, French, German, Italian, Spanish - Spain] http://www.tombraider.com/anniversary/ true false false 82% 6h Crystal Dynamics [Action, Adventure]
415150 Pang Adventures Apr/2016 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Portuguese - Brazil, Russian] https://www.facebook.com/Pang.Adventures/ true false false 80% 3h 29m Dotemu [Action, Casual, Strategy]
2012500 The Katydids Incident Jun/2022 50000 - 100000 0 4.99 0 [English] https://punxstudios.co true false false 100% null Punx Studios [Indie, Simulation]
691150 Saku Saku: Love Blooms with the Cherry Blossoms Oct/2017 50000 - 100000 0 19.99 0 [English] null true false false 92% 5h 16m PALETTE [Sexual Content, Nudity, Casual]
283370 Marine Sharpshooter II: Jungle Warfare Apr/2014 50000 - 100000 0 2.99 0 [English] http://www.funboxmedia.co.uk/ true false false 32% 2h 3m Jarhead Games [Action]
249650 Blackguards Jan/2014 500000 - 1000000 0 0.99 2 [English, German, French, Spanish - Spain, Portuguese - Brazil, Russian, Italian, Japanese, Korean, Czech, Turkish, Polish, Simplified Chinese] http://www.blackguards-game.com true false false 62% 8h 58m Daedalic Entertainment [Indie, RPG, Strategy]
268870 Satellite Reign Aug/2015 500000 - 1000000 0 29.99 3 [English, French, Italian, German, Spanish - Spain, Czech, Russian] http://www.satellitereign.com/ true true true 71% 5h 18m 5 Lives Studios [Action, Indie, Strategy]
1172510 Unlock The King Nov/2019 50000 - 100000 0 0.99 0 [English] null true true false 96% null Minimol Games [Casual, Strategy]
927890 Hentai Girl Linda Dec/2018 50000 - 100000 0 0.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean, Spanish - Latin America, Vietnamese] null true true false 94% 1h 13m GirlGames [Casual, Indie, RPG, Simulation]
25700 Madballs in Babo:Invasion Sep/2009 50000 - 100000 0 4.99 7 [English, German, Korean, Portuguese, Spanish - Spain, French, Italian, Russian] http://www.baboinvasion.com true true false 84% 4h 15m Playbrains [Action, Casual, Indie]
281610 Homeworld: Deserts of Kharak Jan/2016 500000 - 1000000 0 49.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Polish] http://www.desertsofkharak.com true true false 83% 8h 32m Blackbird Interactive [Strategy]
485610 Ball 3D: Soccer Online Mar/2017 500000 - 1000000 0 9.99 0 [English] http://www.ball3d.com true true false 83% 2h 49m Unusualsoft [Sports]
1276850 Kane's Shadow Apr/2020 50000 - 100000 0 0.00 0 [English] null true true false 67% null Plush Productions LLC [Casual, Indie]
722340 Captain vs Sky Pirates Oct/2017 50000 - 100000 0 2.99 5 [English] https://store.steampowered.com/publisher/boogygames/ true false false 25% null Boogygames Studios [Action, Adventure, Indie, Strategy]
1499640 Y.E.T.I Jan/2021 50000 - 100000 0 0.49 0 [English] https://anpa.us true false false 80% null Racing Bros [Action, Indie]
1848450 Nightmare of Decay May/2022 50000 - 100000 0 3.99 0 [English, French, Polish, Russian, Simplified Chinese, Traditional Chinese, Spanish - Latin America, Portuguese - Brazil, Italian, German, Czech, Hungarian, Turkish, Norwegian, Swedish] null true false false 98% 5h 56m Checkmaty [Action, Adventure, Indie]
615700 A Plunge into Darkness Mar/2020 50000 - 100000 0 5.99 1 [English] https://www.aldorlea.org/ true false false 73% null Aldorlea [Adventure, Indie, RPG, Simulation, Strategy]
744980 Super Club Soccer Oct/2019 50000 - 100000 0 0.00 0 [English] http://www.superclubsoccer.com/ true false true 69% null Trick27 Studios Limited [Free to Play, Massively Multiplayer, Sports, Early Access]
10180 Call of Duty®: Modern Warfare® 2 (2009) Nov/2009 5000000 - 10000000 0 19.99 2 [English, French, German, Italian, Spanish - Spain] https://www.callofduty.com/ true true false 93% 12h 56m Infinity Ward [Action]
234390 Teleglitch: Die More Edition Jul/2013 500000 - 1000000 0 3.24 1 [English] http://www.teleglitch.com true true true 85% 2h 20m Test3 Projects [Action, Indie]
1641670 EdgeOfTheAbyssAwaken Jun/2022 50000 - 100000 0 18.99 3 [English, Simplified Chinese] null true false false 74% null TrinityBJ [Action, Indie, RPG, Strategy]
427520 Factorio Aug/2020 5000000 - 10000000 0 30.00 1 [English, French, Italian, German, Spanish - Spain, Hungarian, Dutch, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Finnish, Swedish, Czech, Russian, Ukrainian, Japanese, Simplified Chinese, Traditional Chinese, Korean, Turkish] https://www.factorio.com true true true 97% 89h 43m Wube Software LTD. [Casual, Indie, Simulation, Strategy]

Binary file not shown.

View File

@ -1,9 +1,9 @@
/**
* @file Game.c
* @file Linux_Game.c
* @author Pedro Lopes
* @version 0.2
* @date 2022-10-02
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/

Binary file not shown.

View File

@ -0,0 +1,728 @@
/**
* @file WSL_Game.c
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// -------------------------------------------------------------------------------- //
// Includes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
// -------------------------------------------------------------------------------- //
// Definitions
#define MAX_GAMES 9000
#define MAX_FIELD_SIZE 250
#define MAX_STRING_ARRAY_SIZE 100
// -------------------------------------------------------------------------------- //
// Structs
typedef struct {
int year,
month;
} Date;
typedef struct {
char name[MAX_FIELD_SIZE],
owners[MAX_FIELD_SIZE],
website[MAX_FIELD_SIZE],
developers[MAX_FIELD_SIZE],
languages[MAX_STRING_ARRAY_SIZE][30],
genres[MAX_STRING_ARRAY_SIZE][30];
Date release_date;
int app_id, age, dlcs, avg_playtime, count_languages, count_genres;
float price, upvotes;
bool windows_os, mac_os, linux_os;
} Game;
// -------------------------------------------------------------------------------- //
// Global variables
Game games[MAX_GAMES];
int n = 0;
// -------------------------------------------------------------------------------- //
// Functions
bool isFim(char* line) { return line[0] == 'F' && line[1] == 'I' && line[2] == 'M'; }
void substring(char *string, char *string_start, int length) {
strncpy(string, string_start, length);
string[length] = '\0';
}
char *getMonthName(int month) {
switch(month) {
case 1: return "Jan"; break;
case 2: return "Feb"; break;
case 3: return "Mar"; break;
case 4: return "Apr"; break;
case 5: return "May"; break;
case 6: return "Jun"; break;
case 7: return "Jul"; break;
case 8: return "Aug"; break;
case 9: return "Sep"; break;
case 10: return "Oct"; break;
case 11: return "Nov"; break;
case 12: return "Dec"; break;
default: return "N/A"; break;
}
}
int getMonthNumber(char* month) {
if(!strcmp(month, "Jan")) return 1;
else if(!strcmp(month, "Feb")) return 2;
else if(!strcmp(month, "Mar")) return 3;
else if(!strcmp(month, "Apr")) return 4;
else if(!strcmp(month, "May")) return 5;
else if(!strcmp(month, "Jun")) return 6;
else if(!strcmp(month, "Jul")) return 7;
else if(!strcmp(month, "Aug")) return 8;
else if(!strcmp(month, "Sep")) return 9;
else if(!strcmp(month, "Oct")) return 10;
else if(!strcmp(month, "Nov")) return 11;
else if(!strcmp(month, "Dec")) return 12;
}
// -------------------------------------------------------------------------------- //
// Class game functions
void game_start(Game *game) {
strcpy(game -> name, "");
strcpy(game -> owners, "");
strcpy(game -> website, "");
strcpy(game -> developers, "");
for(int i = 0; i < MAX_STRING_ARRAY_SIZE; i++) {
strcpy(game -> languages[i], "");
strcpy(game -> genres[i], "");
}
game -> release_date.month = -1;
game -> release_date.year = -1;
game -> app_id = -1;
game -> age = -1;
game -> dlcs = -1;
game -> avg_playtime = -1;
game -> price = -1;
game -> upvotes = -1;
game -> windows_os = false;
game -> mac_os = false;
game -> linux_os = false;
game -> count_languages = 0;
game -> count_genres = 0;
}
void game_print(Game *game) {
int hours = game -> avg_playtime / 60,
minutes = game -> avg_playtime % 60;
printf("%i %s %s/%04i %s %i %.2f %i [", game -> app_id, game -> name, getMonthName(game -> release_date.month), game -> release_date.year, game -> owners, game -> age, game -> price, game -> dlcs);
for(int i = 0; i < game -> count_languages; i++) {
printf("%s%s", game -> languages[i], i < game -> count_languages - 1 ? ", " : "");
}
printf("] %s %s %s %s ", game -> website, game -> windows_os ? "true" : "false", game -> mac_os ? "true" : "false", game -> linux_os ? "true" : "false");
if(isnan(game -> upvotes)) printf("0.0%% ");
else printf("%.0f%% ", game -> upvotes);
if(hours > 0)
{
printf("%ih ", hours);
if(minutes > 0) printf("%im ", minutes);
}
else {
if(minutes > 0) printf("%im ", minutes);
else printf("null ");
}
printf("%s [", game -> developers);
for(int i = 0; i < game -> count_genres; i++) {
printf("%s%s", game -> genres[i], i < game -> count_genres - 1 ? ", " : "");
}
printf("]\n");
}
Game game_clone(Game *game) {
Game cloned;
strcpy(cloned.name, game -> name);
strcpy(cloned.owners, game -> owners);
strcpy(cloned.website, game -> website);
strcpy(cloned.developers, game -> developers);
for(int i = 0; i < game -> count_languages; i++) strcpy(cloned.languages[i], game -> languages[i]);
for(int i = 0; i < game -> count_genres; i++) strcpy(cloned.genres[i], game -> genres[i]);
cloned.release_date.month = game -> release_date.month;
cloned.release_date.year = game -> release_date.year;
cloned.app_id = game -> app_id;
cloned.age = game -> age;
cloned.dlcs = game -> dlcs;
cloned.avg_playtime = game -> avg_playtime;
cloned.price = game -> price;
cloned.upvotes = game -> upvotes;
cloned.windows_os = game -> windows_os;
cloned.mac_os = game -> mac_os;
cloned.linux_os = game -> linux_os;
return cloned;
}
void game_read(Game *game, char *line) {
char c_search, sub[MAX_FIELD_SIZE];
int index = 0, atr_index = 0;
// ------------------------------------------------------------ //
// Find "AppID"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> app_id = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Name"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> name, sub);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else {
strcpy(game -> name, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find release date
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
char subDate[10];
substring(subDate, &sub[0], 3);
game -> release_date.month = getMonthNumber(subDate);
if(c_search == ',') {
substring(subDate, &sub[4], 4);
game -> release_date.year = atoi(subDate);
index++;
}
else if(c_search == '\"') {
int nmbSpace = 0;
for(int i = 0; ; i++) {
if(sub[i] == ' ') nmbSpace++;
if(nmbSpace == 2) {
i++;
substring(subDate, &sub[i], 4);
game -> release_date.year = atoi(subDate);
break;
}
}
index += 2;
}
atr_index = index;
break;
}
}
}
else {
game -> release_date.month = 0;
game -> release_date.year = 0;
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Owners"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> owners, sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Age"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> age = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Price"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> price = atof(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "DLCs"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> dlcs = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Languages"
while(true) {
index++;
if(line[index] == ']') {
index++;
if(line[index] == ',') index++;
else if(line[index] == '\"') index += 2;
atr_index = index;
break;
}
else if(line[index] == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line[index] == '\'') {
substring(sub, &line[wordStart], index - wordStart);
strcpy(game -> languages[game -> count_languages++], sub);
break;
}
}
}
}
// ------------------------------------------------------------ //
// Find "Website"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> website, sub);
atr_index = ++index;
break;
}
}
}
else {
strcpy(game -> website, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Windows"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> windows_os = true;
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> mac_os = true;
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> linux_os = true;
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
positives = atoi(sub);
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
negatives = atoi(sub);
atr_index = ++index;
break;
}
}
game -> upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ------------------------------------------------------------ //
// Find "AVG Playtime"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> avg_playtime = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Developers"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> developers, sub);
atr_index = ++index;
break;
}
}
}
else {
strcpy(game -> developers, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Genres"
if(index < strlen(line) - 1) {
if(line[index] == ',') atr_index = ++index;
if(line[atr_index] == '\"') {
atr_index++;
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> genres[game -> count_genres++], sub);
atr_index = ++index;
}
else if(line[index] == '\"') {
substring(sub, &line[atr_index], strlen(line) - 1 - atr_index);
if(sub[strlen(sub) - 1] == '\"') sub[strlen(sub) - 1] = '\0';
else if(sub[strlen(sub) - 2] == '\"') sub[strlen(sub) - 2] = '\0';
strcpy(game -> genres[game -> count_genres++], sub);
break;
}
}
}
else {
substring(sub, &line[atr_index], strlen(line) - 1 - atr_index);
strcpy(game -> genres[game -> count_genres++], sub);
}
}
}
// -------------------------------------------------------------------------------- //
// Functions - List
void list_insert(Game x) {
if(n >= MAX_GAMES) {
printf("Insert error: MAX_GAMES reached");
exit(1);
}
games[n++] = x;
}
// ---------------------------------------------------------------------------------------------------------- //
int main() {
// ------------------------------------------------------------ //
// First part - Read all games
// Open CSV file
FILE *fp;
char *line = NULL;
size_t len = 0;
size_t read;
fp = fopen("/tmp/games.csv", "r");
if(fp == NULL) exit(EXIT_FAILURE);
// ------------------------- //
// Fill games list
while((read = getline(&line, &len, fp)) != -1) {
Game game;
game_start(&game);
game_read(&game, line);
list_insert(game);
}
// ------------------------- //
fclose(fp);
if(line) free(line);
// ------------------------------------------------------------ //
// Second part - Print .in games
char in[15];
scanf(" %[^\n]s", in);
while(true) {
if(isFim(in)) break;
else {
int app_id = atoi(in);
for(int i = 0; i < n; i++) {
if(games[i].app_id == app_id) {
game_print(&games[i]);
break;
}
}
// ------------------------- //
scanf(" %[^\n]s", in);
}
}
return EXIT_SUCCESS;
}

View File

@ -0,0 +1,50 @@
840010 Garden Paws Dec/2018 50000 - 100000 0 19.99 2 [English] http://www.gardenpawsgame.com true true false 92% 5h 46m Bitten Toast Games Inc. [Adventure, Indie, RPG, Simulation]
866510 !AnyWay! Jun/2018 50000 - 100000 0 1.79 37 [English, Russian, French, Italian, German, Polish, Ukrainian, Swedish, Simplified Chinese] null true false false 69% 5h 53m EYEFRONT [Adventure, Casual, Indie]
1970560 Bobbi Adventure May/2022 50000 - 100000 0 24.99 0 [English] null true false false 67% null Felio Stung ROG [Indie]
411740 Yet Another World Nov/2015 50000 - 100000 0 5.99 0 [English] null true true true 78% 6h 24m Energy Milk [Action, Adventure, Indie]
1509590 Fujiwara Bittersweet Jan/2021 50000 - 100000 0 0.00 0 [English] null true true true 91% null MagicBenchVN [Free to Play, Indie]
458520 Wrath of Anna Apr/2018 50000 - 100000 0 19.99 1 [English, Spanish - Spain, Hungarian, German, Norwegian, Polish, Swedish, Russian] http://LorenzoEnt.com true false false 35% 2h 50m Lorenzo Ent.,Michael L. Fiorentino Gutierrez [Action, Adventure, Indie]
920210 LEGO® Star Wars™: The Skywalker Saga Apr/2022 500000 - 1000000 0 49.99 8 [English, French, Italian, German, Spanish - Spain, Arabic, Danish, Dutch, Korean, Polish, Portuguese - Brazil, Russian, Spanish - Latin America, Traditional Chinese, Japanese] null true false false 92% 22h 42m TT Games [Action, Adventure]
1444020 Reactor Tech² Aug/2021 50000 - 100000 0 14.99 0 [English, Russian] null true false false 68% null 4Co [Indie, Simulation, Strategy]
1232460 Onee Chanbara ORIGIN Oct/2020 50000 - 100000 18 59.99 96 [English, Simplified Chinese, Traditional Chinese, Japanese, Korean] null true false false 72% 2h 25m Tamsoft [Action]
2026070 Tank Commander: Battlefield Jul/2022 50000 - 100000 0 2.99 0 [English] null true false false 100% null SP GAMES [Action, Indie, Simulation]
258880 Professional Farmer 2014 Nov/2013 50000 - 100000 0 2.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Russian, Dutch, Swedish, Norwegian] http://www.professional-farmer.com/ true false false 46% 32h 9m PlayWay S.A. [Simulation]
295250 Stranded May/2014 50000 - 100000 0 0.49 0 [English] null true true true 35% 3h 56m Peter Moorhead [Adventure, Indie]
299500 International Snooker May/2014 50000 - 100000 0 5.99 0 [English] http://www.bigheadgames.co.uk/ true false false 62% 1h 11m Big Head Games Ltd [Casual, Sports]
574080 Fog of War Jun/2018 50000 - 100000 0 4.99 1 [English, Russian] null true false false 48% 6h 14m Monkeys Lab. [Action, Indie, Massively Multiplayer, RPG, Simulation, Strategy]
598780 Boreal Blade Nov/2020 50000 - 100000 0 3.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese] https://www.borealblade.com true false false 66% null Frozenbyte [Action, Early Access]
1217190 浮世万千之前世今生 Jan/2020 50000 - 100000 0 5.49 1 [Simplified Chinese] null true false false 78% null 飞天大胖喵 [Adventure, Casual, Indie, RPG, Strategy]
257730 Infinity Wars: Animated Trading Card Game Sep/2014 500000 - 1000000 0 0.00 0 [English, Simplified Chinese] http://www.infinitywarsgame.com true false false 77% 6h 24m Lightmare Studios [Indie, Massively Multiplayer, Strategy]
1807730 Lab Bio-Terror Dec/2021 50000 - 100000 0 12.99 0 [English] null true false false 82% null VOLTECH [Action, Indie]
773670 Delete Jan/2018 50000 - 100000 0 1.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean] null true true false 96% 1h 24m PONY [Casual, Indie]
1803150 Void Slayer Jan/2022 50000 - 100000 0 4.99 0 [English] null true false false 79% null Madmind Studio: After hours [Action, Indie]
1573070 Endless Furry Blackjack Mar/2021 50000 - 100000 0 0.99 0 [English] https://m.youtube.com/ericyoungvfx/ true false false 20% null Tegridy Made Games [Casual, Indie, Sports, Strategy]
513930 J.U.R : Japan Underground Racing Aug/2016 50000 - 100000 0 0.49 0 [English] null true false false 32% null JDM4iK [Casual, Indie, Racing, Simulation]
385250 Paint it Back Oct/2015 50000 - 100000 0 7.99 0 [English] http://casuallabs.com/wp/?page_id=24 true true true 98% null Casual Labs [Casual]
261880 Corporate Lifestyle Simulator Mar/2014 50000 - 100000 0 4.99 1 [English] http://www.dolphinbarn.com true false false 83% 4h 7m DolphinBarn [Action, Casual, Indie]
533300 Zup! Oct/2016 500000 - 1000000 0 0.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Portuguese - Brazil, Hungarian, Greek, Danish, Traditional Chinese, Simplified Chinese, Korean, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Thai, Turkish, Ukrainian, Finnish, Czech, Swedish, Japanese] http://quietriver.info/ true false false 94% 1h 42m Quiet River [Casual, Indie]
542340 Slingshot people Oct/2016 500000 - 1000000 0 0.99 0 [English] http://www.vsemagy.ru/index.php true false false 47% 3h 50m StalkerAlex [Action, Casual, Indie, Simulation]
1209040 Cyber Hunter Jun/2020 500000 - 1000000 0 0.00 0 [English, French, German, Spanish - Spain, Russian, Japanese, Simplified Chinese, Traditional Chinese, Portuguese - Brazil, Korean, Thai, Vietnamese] https://www.cyberhunter.game/ true false false 73% 5h 41m NetEase Games [Action, Free to Play, Massively Multiplayer]
8790 GTR 2 FIA GT Racing Game Dec/2012 50000 - 100000 0 7.99 0 [English] http://www.simbin.com/games/gtr2/ true false false 93% 11m SimBin Studios AB [Racing, Simulation, Sports]
8000 Tomb Raider: Anniversary Jun/2007 500000 - 1000000 13 8.99 0 [English, French, German, Italian, Spanish - Spain] http://www.tombraider.com/anniversary/ true false false 82% 6h Crystal Dynamics [Action, Adventure]
415150 Pang Adventures Apr/2016 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Portuguese - Brazil, Russian] https://www.facebook.com/Pang.Adventures/ true false false 80% 3h 29m Dotemu [Action, Casual, Strategy]
2012500 The Katydids Incident Jun/2022 50000 - 100000 0 4.99 0 [English] https://punxstudios.co true false false 100% null Punx Studios [Indie, Simulation]
691150 Saku Saku: Love Blooms with the Cherry Blossoms Oct/2017 50000 - 100000 0 19.99 0 [English] null true false false 92% 5h 16m PALETTE [Sexual Content, Nudity, Casual]
283370 Marine Sharpshooter II: Jungle Warfare Apr/2014 50000 - 100000 0 2.99 0 [English] http://www.funboxmedia.co.uk/ true false false 32% 2h 3m Jarhead Games [Action]
249650 Blackguards Jan/2014 500000 - 1000000 0 0.99 2 [English, German, French, Spanish - Spain, Portuguese - Brazil, Russian, Italian, Japanese, Korean, Czech, Turkish, Polish, Simplified Chinese] http://www.blackguards-game.com true false false 62% 8h 58m Daedalic Entertainment [Indie, RPG, Strategy]
268870 Satellite Reign Aug/2015 500000 - 1000000 0 29.99 3 [English, French, Italian, German, Spanish - Spain, Czech, Russian] http://www.satellitereign.com/ true true true 71% 5h 18m 5 Lives Studios [Action, Indie, Strategy]
1172510 Unlock The King Nov/2019 50000 - 100000 0 0.99 0 [English] null true true false 96% null Minimol Games [Casual, Strategy]
927890 Hentai Girl Linda Dec/2018 50000 - 100000 0 0.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean, Spanish - Latin America, Vietnamese] null true true false 94% 1h 13m GirlGames [Casual, Indie, RPG, Simulation]
25700 Madballs in Babo:Invasion Sep/2009 50000 - 100000 0 4.99 7 [English, German, Korean, Portuguese, Spanish - Spain, French, Italian, Russian] http://www.baboinvasion.com true true false 84% 4h 15m Playbrains [Action, Casual, Indie]
281610 Homeworld: Deserts of Kharak Jan/2016 500000 - 1000000 0 49.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Polish] http://www.desertsofkharak.com true true false 83% 8h 32m Blackbird Interactive [Strategy]
485610 Ball 3D: Soccer Online Mar/2017 500000 - 1000000 0 9.99 0 [English] http://www.ball3d.com true true false 83% 2h 49m Unusualsoft [Sports]
1276850 Kane's Shadow Apr/2020 50000 - 100000 0 0.00 0 [English] null true true false 67% null Plush Productions LLC [Casual, Indie]
722340 Captain vs Sky Pirates Oct/2017 50000 - 100000 0 2.99 5 [English] https://store.steampowered.com/publisher/boogygames/ true false false 25% null Boogygames Studios [Action, Adventure, Indie, Strategy]
1499640 Y.E.T.I Jan/2021 50000 - 100000 0 0.49 0 [English] https://anpa.us true false false 80% null Racing Bros [Action, Indie]
1848450 Nightmare of Decay May/2022 50000 - 100000 0 3.99 0 [English, French, Polish, Russian, Simplified Chinese, Traditional Chinese, Spanish - Latin America, Portuguese - Brazil, Italian, German, Czech, Hungarian, Turkish, Norwegian, Swedish] null true false false 98% 5h 56m Checkmaty [Action, Adventure, Indie]
615700 A Plunge into Darkness Mar/2020 50000 - 100000 0 5.99 1 [English] https://www.aldorlea.org/ true false false 73% null Aldorlea [Adventure, Indie, RPG, Simulation, Strategy]
744980 Super Club Soccer Oct/2019 50000 - 100000 0 0.00 0 [English] http://www.superclubsoccer.com/ true false true 69% null Trick27 Studios Limited [Free to Play, Massively Multiplayer, Sports, Early Access]
10180 Call of Duty®: Modern Warfare® 2 (2009) Nov/2009 5000000 - 10000000 0 19.99 2 [English, French, German, Italian, Spanish - Spain] https://www.callofduty.com/ true true false 93% 12h 56m Infinity Ward [Action]
234390 Teleglitch: Die More Edition Jul/2013 500000 - 1000000 0 3.24 1 [English] http://www.teleglitch.com true true true 85% 2h 20m Test3 Projects [Action, Indie]
1641670 EdgeOfTheAbyssAwaken Jun/2022 50000 - 100000 0 18.99 3 [English, Simplified Chinese] null true false false 74% null TrinityBJ [Action, Indie, RPG, Strategy]
427520 Factorio Aug/2020 5000000 - 10000000 0 30.00 1 [English, French, Italian, German, Spanish - Spain, Hungarian, Dutch, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Finnish, Swedish, Czech, Russian, Ukrainian, Japanese, Simplified Chinese, Traditional Chinese, Korean, Turkish] https://www.factorio.com true true true 97% 89h 43m Wube Software LTD. [Casual, Indie, Simulation, Strategy]

View File

@ -0,0 +1,51 @@
840010
866510
1970560
411740
1509590
458520
920210
1444020
1232460
2026070
258880
295250
299500
574080
598780
1217190
257730
1807730
773670
1803150
1573070
513930
385250
261880
533300
542340
1209040
8790
8000
415150
2012500
691150
283370
249650
268870
1172510
927890
25700
281610
485610
1276850
722340
1499640
1848450
615700
744980
10180
234390
1641670
427520
FIM

View File

@ -0,0 +1,50 @@
840010 Garden Paws Dec/2018 50000 - 100000 0 19.99 2 [English] http://www.gardenpawsgame.com true true false 92% 5h 46m Bitten Toast Games Inc. [Adventure, Indie, RPG, Simulation]
866510 !AnyWay! Jun/2018 50000 - 100000 0 1.79 37 [English, Russian, French, Italian, German, Polish, Ukrainian, Swedish, Simplified Chinese] null true false false 69% 5h 53m EYEFRONT [Adventure, Casual, Indie]
1970560 Bobbi Adventure May/2022 50000 - 100000 0 24.99 0 [English] null true false false 67% null Felio Stung ROG [Indie]
411740 Yet Another World Nov/2015 50000 - 100000 0 5.99 0 [English] null true true true 78% 6h 24m Energy Milk [Action, Adventure, Indie]
1509590 Fujiwara Bittersweet Jan/2021 50000 - 100000 0 0.00 0 [English] null true true true 91% null MagicBenchVN [Free to Play, Indie]
458520 Wrath of Anna Apr/2018 50000 - 100000 0 19.99 1 [English, Spanish - Spain, Hungarian, German, Norwegian, Polish, Swedish, Russian] http://LorenzoEnt.com true false false 35% 2h 50m Lorenzo Ent.,Michael L. Fiorentino Gutierrez [Action, Adventure, Indie]
920210 LEGO® Star Wars™: The Skywalker Saga Apr/2022 500000 - 1000000 0 49.99 8 [English, French, Italian, German, Spanish - Spain, Arabic, Danish, Dutch, Korean, Polish, Portuguese - Brazil, Russian, Spanish - Latin America, Traditional Chinese, Japanese] null true false false 92% 22h 42m TT Games [Action, Adventure]
1444020 Reactor Tech² Aug/2021 50000 - 100000 0 14.99 0 [English, Russian] null true false false 68% null 4Co [Indie, Simulation, Strategy]
1232460 Onee Chanbara ORIGIN Oct/2020 50000 - 100000 18 59.99 96 [English, Simplified Chinese, Traditional Chinese, Japanese, Korean] null true false false 72% 2h 25m Tamsoft [Action]
2026070 Tank Commander: Battlefield Jul/2022 50000 - 100000 0 2.99 0 [English] null true false false 100% null SP GAMES [Action, Indie, Simulation]
258880 Professional Farmer 2014 Nov/2013 50000 - 100000 0 2.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Russian, Dutch, Swedish, Norwegian] http://www.professional-farmer.com/ true false false 46% 32h 9m PlayWay S.A. [Simulation]
295250 Stranded May/2014 50000 - 100000 0 0.49 0 [English] null true true true 35% 3h 56m Peter Moorhead [Adventure, Indie]
299500 International Snooker May/2014 50000 - 100000 0 5.99 0 [English] http://www.bigheadgames.co.uk/ true false false 62% 1h 11m Big Head Games Ltd [Casual, Sports]
574080 Fog of War Jun/2018 50000 - 100000 0 4.99 1 [English, Russian] null true false false 48% 6h 14m Monkeys Lab. [Action, Indie, Massively Multiplayer, RPG, Simulation, Strategy]
598780 Boreal Blade Nov/2020 50000 - 100000 0 3.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese] https://www.borealblade.com true false false 66% null Frozenbyte [Action, Early Access]
1217190 浮世万千之前世今生 Jan/2020 50000 - 100000 0 5.49 1 [Simplified Chinese] null true false false 78% null 飞天大胖喵 [Adventure, Casual, Indie, RPG, Strategy]
257730 Infinity Wars: Animated Trading Card Game Sep/2014 500000 - 1000000 0 0.00 0 [English, Simplified Chinese] http://www.infinitywarsgame.com true false false 77% 6h 24m Lightmare Studios [Indie, Massively Multiplayer, Strategy]
1807730 Lab Bio-Terror Dec/2021 50000 - 100000 0 12.99 0 [English] null true false false 82% null VOLTECH [Action, Indie]
773670 Delete Jan/2018 50000 - 100000 0 1.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean] null true true false 96% 1h 24m PONY [Casual, Indie]
1803150 Void Slayer Jan/2022 50000 - 100000 0 4.99 0 [English] null true false false 79% null Madmind Studio: After hours [Action, Indie]
1573070 Endless Furry Blackjack Mar/2021 50000 - 100000 0 0.99 0 [English] https://m.youtube.com/ericyoungvfx/ true false false 20% null Tegridy Made Games [Casual, Indie, Sports, Strategy]
513930 J.U.R : Japan Underground Racing Aug/2016 50000 - 100000 0 0.49 0 [English] null true false false 32% null JDM4iK [Casual, Indie, Racing, Simulation]
385250 Paint it Back Oct/2015 50000 - 100000 0 7.99 0 [English] http://casuallabs.com/wp/?page_id=24 true true true 98% null Casual Labs [Casual]
261880 Corporate Lifestyle Simulator Mar/2014 50000 - 100000 0 4.99 1 [English] http://www.dolphinbarn.com true false false 83% 4h 7m DolphinBarn [Action, Casual, Indie]
533300 Zup! Oct/2016 500000 - 1000000 0 0.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Portuguese - Brazil, Hungarian, Greek, Danish, Traditional Chinese, Simplified Chinese, Korean, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Thai, Turkish, Ukrainian, Finnish, Czech, Swedish, Japanese] http://quietriver.info/ true false false 94% 1h 42m Quiet River [Casual, Indie]
542340 Slingshot people Oct/2016 500000 - 1000000 0 0.99 0 [English] http://www.vsemagy.ru/index.php true false false 47% 3h 50m StalkerAlex [Action, Casual, Indie, Simulation]
1209040 Cyber Hunter Jun/2020 500000 - 1000000 0 0.00 0 [English, French, German, Spanish - Spain, Russian, Japanese, Simplified Chinese, Traditional Chinese, Portuguese - Brazil, Korean, Thai, Vietnamese] https://www.cyberhunter.game/ true false false 73% 5h 41m NetEase Games [Action, Free to Play, Massively Multiplayer]
8790 GTR 2 FIA GT Racing Game Dec/2012 50000 - 100000 0 7.99 0 [English] http://www.simbin.com/games/gtr2/ true false false 93% 11m SimBin Studios AB [Racing, Simulation, Sports]
8000 Tomb Raider: Anniversary Jun/2007 500000 - 1000000 13 8.99 0 [English, French, German, Italian, Spanish - Spain] http://www.tombraider.com/anniversary/ true false false 82% 6h Crystal Dynamics [Action, Adventure]
415150 Pang Adventures Apr/2016 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Portuguese - Brazil, Russian] https://www.facebook.com/Pang.Adventures/ true false false 80% 3h 29m Dotemu [Action, Casual, Strategy]
2012500 The Katydids Incident Jun/2022 50000 - 100000 0 4.99 0 [English] https://punxstudios.co true false false 100% null Punx Studios [Indie, Simulation]
691150 Saku Saku: Love Blooms with the Cherry Blossoms Oct/2017 50000 - 100000 0 19.99 0 [English] null true false false 92% 5h 16m PALETTE [Sexual Content, Nudity, Casual]
283370 Marine Sharpshooter II: Jungle Warfare Apr/2014 50000 - 100000 0 2.99 0 [English] http://www.funboxmedia.co.uk/ true false false 32% 2h 3m Jarhead Games [Action]
249650 Blackguards Jan/2014 500000 - 1000000 0 0.99 2 [English, German, French, Spanish - Spain, Portuguese - Brazil, Russian, Italian, Japanese, Korean, Czech, Turkish, Polish, Simplified Chinese] http://www.blackguards-game.com true false false 62% 8h 58m Daedalic Entertainment [Indie, RPG, Strategy]
268870 Satellite Reign Aug/2015 500000 - 1000000 0 29.99 3 [English, French, Italian, German, Spanish - Spain, Czech, Russian] http://www.satellitereign.com/ true true true 71% 5h 18m 5 Lives Studios [Action, Indie, Strategy]
1172510 Unlock The King Nov/2019 50000 - 100000 0 0.99 0 [English] null true true false 96% null Minimol Games [Casual, Strategy]
927890 Hentai Girl Linda Dec/2018 50000 - 100000 0 0.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Ukrainian, Russian, Bulgarian, Hungarian, Turkish, Greek, Norwegian, Czech, Japanese, Polish, Thai, Swedish, Simplified Chinese, Traditional Chinese, Romanian, Finnish, Dutch, Portuguese, Portuguese - Brazil, Arabic, Korean, Spanish - Latin America, Vietnamese] null true true false 94% 1h 13m GirlGames [Casual, Indie, RPG, Simulation]
25700 Madballs in Babo:Invasion Sep/2009 50000 - 100000 0 4.99 7 [English, German, Korean, Portuguese, Spanish - Spain, French, Italian, Russian] http://www.baboinvasion.com true true false 84% 4h 15m Playbrains [Action, Casual, Indie]
281610 Homeworld: Deserts of Kharak Jan/2016 500000 - 1000000 0 49.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Polish] http://www.desertsofkharak.com true true false 83% 8h 32m Blackbird Interactive [Strategy]
485610 Ball 3D: Soccer Online Mar/2017 500000 - 1000000 0 9.99 0 [English] http://www.ball3d.com true true false 83% 2h 49m Unusualsoft [Sports]
1276850 Kane's Shadow Apr/2020 50000 - 100000 0 0.00 0 [English] null true true false 67% null Plush Productions LLC [Casual, Indie]
722340 Captain vs Sky Pirates Oct/2017 50000 - 100000 0 2.99 5 [English] https://store.steampowered.com/publisher/boogygames/ true false false 25% null Boogygames Studios [Action, Adventure, Indie, Strategy]
1499640 Y.E.T.I Jan/2021 50000 - 100000 0 0.49 0 [English] https://anpa.us true false false 80% null Racing Bros [Action, Indie]
1848450 Nightmare of Decay May/2022 50000 - 100000 0 3.99 0 [English, French, Polish, Russian, Simplified Chinese, Traditional Chinese, Spanish - Latin America, Portuguese - Brazil, Italian, German, Czech, Hungarian, Turkish, Norwegian, Swedish] null true false false 98% 5h 56m Checkmaty [Action, Adventure, Indie]
615700 A Plunge into Darkness Mar/2020 50000 - 100000 0 5.99 1 [English] https://www.aldorlea.org/ true false false 73% null Aldorlea [Adventure, Indie, RPG, Simulation, Strategy]
744980 Super Club Soccer Oct/2019 50000 - 100000 0 0.00 0 [English] http://www.superclubsoccer.com/ true false true 69% null Trick27 Studios Limited [Free to Play, Massively Multiplayer, Sports, Early Access]
10180 Call of Duty®: Modern Warfare® 2 (2009) Nov/2009 5000000 - 10000000 0 19.99 2 [English, French, German, Italian, Spanish - Spain] https://www.callofduty.com/ true true false 93% 12h 56m Infinity Ward [Action]
234390 Teleglitch: Die More Edition Jul/2013 500000 - 1000000 0 3.24 1 [English] http://www.teleglitch.com true true true 85% 2h 20m Test3 Projects [Action, Indie]
1641670 EdgeOfTheAbyssAwaken Jun/2022 50000 - 100000 0 18.99 3 [English, Simplified Chinese] null true false false 74% null TrinityBJ [Action, Indie, RPG, Strategy]
427520 Factorio Aug/2020 5000000 - 10000000 0 30.00 1 [English, French, Italian, German, Spanish - Spain, Hungarian, Dutch, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Finnish, Swedish, Czech, Russian, Ukrainian, Japanese, Simplified Chinese, Traditional Chinese, Korean, Turkish] https://www.factorio.com true true true 97% 89h 43m Wube Software LTD. [Casual, Indie, Simulation, Strategy]

View File

@ -0,0 +1,204 @@
import java.util.Formatter;
import java.util.Scanner;
import java.io.File;
public class Arq
{
private static String nomeArquivo = "";
private static String charsetArquivo = "ISO-8859-1";
private static boolean write = false, read = false;
private static Formatter saida = null;
private static Scanner entrada = null;
public static boolean openWrite(String nomeArq, String charset) {
boolean resp = false;
close();
try{
saida = new Formatter(nomeArq, charset);
nomeArquivo = nomeArq;
resp = write = true;
} catch (Exception e) {}
return resp;
}
public static boolean openWrite(String nomeArq) {
return openWrite(nomeArq, charsetArquivo);
}
public static boolean openWriteClose(String nomeArq, String charset, String conteudo) {
boolean resp = openWrite(nomeArq, charset);
if(resp == true){
println(conteudo);
close();
}
return resp;
}
public static boolean openWriteClose(String nomeArq, String conteudo) {
return openWriteClose(nomeArq, charsetArquivo, conteudo);
}
public static boolean openRead(String nomeArq) {
return openRead(nomeArq, charsetArquivo);
}
public static boolean openRead(String nomeArq, String charset) {
boolean resp = false;
close();
try{
entrada = new Scanner(new File(nomeArq), charset);
nomeArquivo = nomeArq;
resp = read = true;
} catch (Exception e) {}
return resp;
}
public static String openReadClose(String nomeArq){
openRead(nomeArq);
String resp = readAll();
close();
return resp;
}
public static void close() {
if(write == true){
saida.close();
}
if(read == true){
entrada.close();
}
write = read = false;
nomeArquivo = "";
charsetArquivo = "ISO-8859-1";
}
public static long length(){
long resp = -1;
if(read != write){
File file = new File(nomeArquivo);
resp = file.length();
}
return resp;
}
public static void print(int x){
if(write == true){
saida.format( "%d", x);
}
}
public static void print(double x){
if(write == true){
saida.format( "%f", x);
}
}
public static void print(String x){
if(write == true){
saida.format( "%s", x);
}
}
public static void print(boolean x){
if(write == true){
saida.format( "%s", ((x) ? "true" : "false"));
}
}
public static void print(char x){
if(write == true){
saida.format( "%c", x);
}
}
public static void println(int x){
if(write == true){
saida.format( "%d\n", x);
}
}
public static void println(double x){
if(write == true){
saida.format( "%f\n", x);
}
}
public static void println(String x){
if(write == true){
saida.format( "%s\n", x);
}
}
public static void println(boolean x){
if(write == true){
saida.format( "%s\n", ((x) ? "true" : "false"));
}
}
public static void println(char x){
if(write == true){
saida.format( "%c\n", x);
}
}
public static int readInt(){
int resp = -1;
try{
resp = entrada.nextInt();
} catch (Exception e) {}
return resp;
}
public static char readChar(){
char resp = ' ';
try{
resp = (char)entrada.nextByte();
} catch (Exception e) {}
return resp;
}
public static double readDouble(){
double resp = -1;
try{
resp = Double.parseDouble(readString().replace(",","."));
} catch (Exception e) {}
return resp;
}
public static String readString(){
String resp = "";
try{
resp = entrada.next();
} catch (Exception e) { System.out.println(e.getMessage()); }
return resp;
}
public static boolean readBoolean(){
boolean resp = false;
try{
resp = (entrada.next().equals("true")) ? true : false;
} catch (Exception e) {}
return resp;
}
public static String readLine(){
String resp = "";
try{
resp = entrada.nextLine();
} catch (Exception e) { System.out.println(e.getMessage()); }
return resp;
}
public static boolean hasNext(){
return entrada.hasNext();
}
public static String readAll(){
String resp = "";
while(hasNext()){
resp += (readLine() + "\n");
}
return resp;
}
}

View File

@ -0,0 +1,607 @@
/**
* @file Game.java
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// ----------------------------------------------------------------------------------------------------------------- //
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;
// ----------------------------------------------------------------------------------------------------------------- //
class Game {
static SimpleDateFormat default_dateFormat = new SimpleDateFormat("MMM/yyyy", Locale.ENGLISH);
private String name, owners, website, developers;
private ArrayList<String> languages, genres;
private Date release_date;
private int app_id, age, dlcs, avg_playtime;
private float price, upvotes;
private boolean windows, mac, linux;
public Game() {
this.name = this.owners = this.website = this.developers = null;
this.languages = new ArrayList<String>();
this.genres = new ArrayList<String>();
this.release_date = null;
this.app_id = this.age = this.dlcs = this.avg_playtime = -1;
this.price = this.upvotes = -1;
this.windows = this.mac = this.linux = false;
}
public Game(String name, String owners, String website, String developers, ArrayList<String> languages, ArrayList<String> genres, Date release_date, int app_id, int age, int dlcs, int upvotes, int avg_playtime, float price, boolean windows, boolean mac, boolean linux) {
this.name = name;
this.owners = owners;
this.website = website;
this.developers = developers;
this.languages = languages;
this.genres = genres;
this.release_date = release_date;
this.app_id = app_id;
this.age = age;
this.dlcs = dlcs;
this.upvotes = upvotes;
this.avg_playtime = avg_playtime;
this.price = price;
this.windows = windows;
this.mac = mac;
this.linux = linux;
}
public void setName(String name) { this.name = name; }
public void setOwners(String owners) { this.owners = owners; }
public void setWebsite(String website) { this.website = website; }
public void setDevelopers(String developers) { this.developers = developers; }
public void setLanguages(ArrayList<String> languages) { this.languages = languages; }
public void setGenres(ArrayList<String> genres) { this.genres = genres; }
public void setReleaseDate(Date release_date) { this.release_date = release_date; }
public void setAppId(int app_id) { this.app_id = app_id; }
public void setAge(int age) { this.age = age; }
public void setDlcs(int dlcs) { this.dlcs = dlcs; }
public void setAvgPlaytime(int avg_playtime) { this.avg_playtime = avg_playtime; }
public void setPrice(float price) { this.price = price; }
public void setUpvotes(float upvotes) { this.upvotes = upvotes; }
public void setWindows(boolean windows) { this.windows = windows; }
public void setMac(boolean mac) { this.mac = mac; }
public void setLinux(boolean linux) { this.linux = linux; }
public String getName() { return this.name; }
public String getOwners() { return this.owners; }
public String getWebsite() { return this.website; }
public String getDevelopers() { return this.developers; }
public ArrayList<String> getLanguages() { return this.languages; }
public ArrayList<String> getGenres() { return this.genres; }
public Date getReleaseDate() { return this.release_date; }
public int getAppId() { return this.app_id; }
public int getAge() { return this.age; }
public int getDlcs() { return this.dlcs; }
public int getAvgPlaytime() { return this.avg_playtime; }
public float getPrice() { return this.price; }
public float getUpvotes() { return this.upvotes; }
public boolean getWindows() { return this.windows; }
public boolean getMac() { return this.mac; }
public boolean getLinux() { return this.linux; }
public Game clone() {
Game cloned = new Game();
cloned.name = this.name;
cloned.owners = this.owners;
cloned.website = this.website;
cloned.developers = this.developers;
cloned.languages = this.languages;
cloned.genres = this.genres;
cloned.release_date = this.release_date;
cloned.app_id = this.app_id;
cloned.age = this.age;
cloned.dlcs = this.dlcs;
cloned.avg_playtime = this.avg_playtime;
cloned.price = this.price;
cloned.upvotes = this.upvotes;
cloned.windows = this.windows;
cloned.mac = this.mac;
cloned.linux = this.linux;
return cloned;
}
public void read(String line) {
char c_search;
int index = 0, atr_index = 0;
// ---------------------------------- //
// Find "AppID"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.app_id = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Name"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.name = line.substring(atr_index, index);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find release date
if(line.charAt(atr_index) != ',') {
SimpleDateFormat df;
if(line.charAt(atr_index) == '\"') {
df = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
atr_index++;
c_search = '\"';
}
else {
df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
c_search = ',';
}
while(true) {
index++;
if(line.charAt(index) == c_search) {
try { this.release_date = df.parse(line.substring(atr_index, index)); }
catch (java.text.ParseException e) { e.printStackTrace(); }
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Owners"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.owners = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Age"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.age = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Price"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.price = Float.parseFloat(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "DLCs"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.dlcs = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Languages"
while(true) {
index++;
if(line.charAt(index) == ']') {
index++;
if(line.charAt(index) == ',') index++;
else if(line.charAt(index) == '\"') index += 2;
atr_index = index;
break;
}
else if(line.charAt(index) == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line.charAt(index) == '\'') {
this.languages.add(line.substring(wordStart, index));
break;
}
}
}
}
// ---------------------------------- //
// Find "Website"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.website = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Windows"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.windows = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.mac = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.linux = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line.charAt(index) == ',') {
positives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line.charAt(index) == ',') {
negatives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
this.upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ---------------------------------- //
// Find "AVG Playtime"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.avg_playtime = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Developers"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.developers = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Genres"
if(index < line.length() - 1) {
if(line.charAt(index) == ',') atr_index = ++index;
if(line.charAt(atr_index) == '\"') {
atr_index++;
while(true) {
index++;
if(line.charAt(index) == ',') {
this.genres.add(line.substring(atr_index, index));
atr_index = ++index;
}
else if(line.charAt(index) == '\"') {
this.genres.add(line.substring(atr_index, line.length() - 1));
break;
}
}
}
else this.genres.add(line.substring(atr_index, line.length()));
}
// -------------------------------------------------------------------------------- //
}
public void print() {
String avg_pt = null;
if(this.avg_playtime == 0) avg_pt = "null ";
else if(this.avg_playtime < 60) avg_pt = this.avg_playtime + "m ";
else {
if(this.avg_playtime % 60 == 0) avg_pt = this.avg_playtime / 60 + "h ";
else avg_pt = (this.avg_playtime / 60) + "h " + (this.avg_playtime % 60) + "m ";
}
DecimalFormat df = new DecimalFormat("##");
System.out.println(this.app_id + " " + this.name + " " + default_dateFormat.format(this.release_date) + " " + this.owners + " " + this.age + " " + String.format(Locale.ENGLISH, "%.2f", this.price) + " " + this.dlcs + " " + this.languages + " " + this.website + " " + this.windows + " " + this.mac + " " + this.linux + " " + (Float.isNaN(this.upvotes) ? "0% " : df.format(this.upvotes) + "% ") + avg_pt + this.developers + " " + this.genres);
}
// -------------------------------------------------------------------------------------- //
public static void main(String[] args) throws Exception {
Scanner scr = new Scanner(System.in);
ArrayList<Integer> gamesToAdd = new ArrayList<Integer>();
ArrayList<Game> games = new ArrayList<Game>();
String line = scr.nextLine();
// ------------------------------------------------------------------------------ //
// Fill list with requested ids
while(true) {
if(line.equals("FIM")) break;
gamesToAdd.add(Integer.parseInt(line));
line = scr.nextLine();
}
// ------------------------------------------------------------------------------ //
// Add requested ids to games list
try {
// Read CSV file
FileInputStream fstream = new FileInputStream("/tmp/games.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
while((line = br.readLine()) != null) {
if(gamesToAdd.contains(Integer.parseInt(line.substring(0, line.indexOf(','))))) {
Game game = new Game();
game.read(line);
games.add(game);
}
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
// ---------------------------------------------------------------------------------------------- //
// Initialize bench log
int c_compares = 0;
long t_begin = System.currentTimeMillis();
// Search in games list by name
line = scr.nextLine();
while(true) {
if(line.equals("FIM")) break;
// ------------------------------------ //
boolean found = false;
for(int i = 0; i < games.size(); i++) {
c_compares++;
if(games.get(i).name.compareTo(line) == 0) {
found = true;
break;
}
}
// ------------------------------------ //
System.out.println(found ? "SIM" : "NAO");
line = scr.nextLine();
}
Arq.openWrite("753045_sequencial.txt");
Arq.print("753045\t" + (System.currentTimeMillis() - t_begin) + "ms\t" + c_compares);
Arq.close();
scr.close();
// ---------------------------------------------------------------------------------------------- //
}
// ---------------------------------------------------------------------------------------------- //
}

View File

@ -0,0 +1,39 @@
SIM
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO

View File

@ -0,0 +1,91 @@
840010
866510
1970560
411740
1509590
458520
920210
1444020
1232460
2026070
258880
295250
299500
574080
598780
1217190
257730
1807730
773670
1803150
1573070
513930
385250
261880
533300
542340
1209040
8790
8000
415150
2012500
691150
283370
249650
268870
1172510
927890
25700
281610
485610
1276850
722340
1499640
1848450
615700
744980
10180
234390
1641670
427520
FIM
Bobbi Adventure
The Test: Hypothesis Rising
Epic Cards Battle 2 (TCG)
Omensight: Definitive Edition
Gray Matter
The Legend of Bean
Armored Warfare
Void Slayer
RacetronicVR
The Amazing American Circus
Your Quest
HistoryMaker VR
WE ARE FOOTBALL
Rise of Insanity
Aragami
BONEWORKS
CAGE
Saku Saku: Love Blooms with the Cherry Blossoms
Kill The Bad Guy
Deisim
Redactem
Xuan-Yuan Sword: The Gate of Firmament
Subspace Continuum
DRAGON BALL XENOVERSE
RiotZ
Stephen's Sausage Roll
Tavern Tycoon - Dragon's Hangover
Child of Light
Heart and Seoul
Tank Destroyer
Claire
MONOLISK
Cinderella Escape 2 Revenge
Flat Heroes
The Political Machine 2016
AFFECTED: The Manor - The Complete Edition
QUAKE III: Team Arena
Woodcutter Simulator 2013
Dawn of Man
FIM

View File

@ -0,0 +1,39 @@
SIM
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO

View File

@ -0,0 +1,204 @@
import java.util.Formatter;
import java.util.Scanner;
import java.io.File;
public class Arq
{
private static String nomeArquivo = "";
private static String charsetArquivo = "ISO-8859-1";
private static boolean write = false, read = false;
private static Formatter saida = null;
private static Scanner entrada = null;
public static boolean openWrite(String nomeArq, String charset) {
boolean resp = false;
close();
try{
saida = new Formatter(nomeArq, charset);
nomeArquivo = nomeArq;
resp = write = true;
} catch (Exception e) {}
return resp;
}
public static boolean openWrite(String nomeArq) {
return openWrite(nomeArq, charsetArquivo);
}
public static boolean openWriteClose(String nomeArq, String charset, String conteudo) {
boolean resp = openWrite(nomeArq, charset);
if(resp == true){
println(conteudo);
close();
}
return resp;
}
public static boolean openWriteClose(String nomeArq, String conteudo) {
return openWriteClose(nomeArq, charsetArquivo, conteudo);
}
public static boolean openRead(String nomeArq) {
return openRead(nomeArq, charsetArquivo);
}
public static boolean openRead(String nomeArq, String charset) {
boolean resp = false;
close();
try{
entrada = new Scanner(new File(nomeArq), charset);
nomeArquivo = nomeArq;
resp = read = true;
} catch (Exception e) {}
return resp;
}
public static String openReadClose(String nomeArq){
openRead(nomeArq);
String resp = readAll();
close();
return resp;
}
public static void close() {
if(write == true){
saida.close();
}
if(read == true){
entrada.close();
}
write = read = false;
nomeArquivo = "";
charsetArquivo = "ISO-8859-1";
}
public static long length(){
long resp = -1;
if(read != write){
File file = new File(nomeArquivo);
resp = file.length();
}
return resp;
}
public static void print(int x){
if(write == true){
saida.format( "%d", x);
}
}
public static void print(double x){
if(write == true){
saida.format( "%f", x);
}
}
public static void print(String x){
if(write == true){
saida.format( "%s", x);
}
}
public static void print(boolean x){
if(write == true){
saida.format( "%s", ((x) ? "true" : "false"));
}
}
public static void print(char x){
if(write == true){
saida.format( "%c", x);
}
}
public static void println(int x){
if(write == true){
saida.format( "%d\n", x);
}
}
public static void println(double x){
if(write == true){
saida.format( "%f\n", x);
}
}
public static void println(String x){
if(write == true){
saida.format( "%s\n", x);
}
}
public static void println(boolean x){
if(write == true){
saida.format( "%s\n", ((x) ? "true" : "false"));
}
}
public static void println(char x){
if(write == true){
saida.format( "%c\n", x);
}
}
public static int readInt(){
int resp = -1;
try{
resp = entrada.nextInt();
} catch (Exception e) {}
return resp;
}
public static char readChar(){
char resp = ' ';
try{
resp = (char)entrada.nextByte();
} catch (Exception e) {}
return resp;
}
public static double readDouble(){
double resp = -1;
try{
resp = Double.parseDouble(readString().replace(",","."));
} catch (Exception e) {}
return resp;
}
public static String readString(){
String resp = "";
try{
resp = entrada.next();
} catch (Exception e) { System.out.println(e.getMessage()); }
return resp;
}
public static boolean readBoolean(){
boolean resp = false;
try{
resp = (entrada.next().equals("true")) ? true : false;
} catch (Exception e) {}
return resp;
}
public static String readLine(){
String resp = "";
try{
resp = entrada.nextLine();
} catch (Exception e) { System.out.println(e.getMessage()); }
return resp;
}
public static boolean hasNext(){
return entrada.hasNext();
}
public static String readAll(){
String resp = "";
while(hasNext()){
resp += (readLine() + "\n");
}
return resp;
}
}

View File

@ -0,0 +1,627 @@
/**
* @file Game.java
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// ----------------------------------------------------------------------------------------------------------------- //
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;
// ----------------------------------------------------------------------------------------------------------------- //
class Game implements Comparable<Game> {
static SimpleDateFormat default_dateFormat = new SimpleDateFormat("MMM/yyyy", Locale.ENGLISH);
private String name, owners, website, developers;
private ArrayList<String> languages, genres;
private Date release_date;
private int app_id, age, dlcs, avg_playtime;
private float price, upvotes;
private boolean windows, mac, linux;
public Game() {
this.name = this.owners = this.website = this.developers = null;
this.languages = new ArrayList<String>();
this.genres = new ArrayList<String>();
this.release_date = null;
this.app_id = this.age = this.dlcs = this.avg_playtime = -1;
this.price = this.upvotes = -1;
this.windows = this.mac = this.linux = false;
}
public Game(String name, String owners, String website, String developers, ArrayList<String> languages, ArrayList<String> genres, Date release_date, int app_id, int age, int dlcs, int upvotes, int avg_playtime, float price, boolean windows, boolean mac, boolean linux) {
this.name = name;
this.owners = owners;
this.website = website;
this.developers = developers;
this.languages = languages;
this.genres = genres;
this.release_date = release_date;
this.app_id = app_id;
this.age = age;
this.dlcs = dlcs;
this.upvotes = upvotes;
this.avg_playtime = avg_playtime;
this.price = price;
this.windows = windows;
this.mac = mac;
this.linux = linux;
}
public int compareTo(Game other) { return this.name.compareTo(other.name); }
public void setName(String name) { this.name = name; }
public void setOwners(String owners) { this.owners = owners; }
public void setWebsite(String website) { this.website = website; }
public void setDevelopers(String developers) { this.developers = developers; }
public void setLanguages(ArrayList<String> languages) { this.languages = languages; }
public void setGenres(ArrayList<String> genres) { this.genres = genres; }
public void setReleaseDate(Date release_date) { this.release_date = release_date; }
public void setAppId(int app_id) { this.app_id = app_id; }
public void setAge(int age) { this.age = age; }
public void setDlcs(int dlcs) { this.dlcs = dlcs; }
public void setAvgPlaytime(int avg_playtime) { this.avg_playtime = avg_playtime; }
public void setPrice(float price) { this.price = price; }
public void setUpvotes(float upvotes) { this.upvotes = upvotes; }
public void setWindows(boolean windows) { this.windows = windows; }
public void setMac(boolean mac) { this.mac = mac; }
public void setLinux(boolean linux) { this.linux = linux; }
public String getName() { return this.name; }
public String getOwners() { return this.owners; }
public String getWebsite() { return this.website; }
public String getDevelopers() { return this.developers; }
public ArrayList<String> getLanguages() { return this.languages; }
public ArrayList<String> getGenres() { return this.genres; }
public Date getReleaseDate() { return this.release_date; }
public int getAppId() { return this.app_id; }
public int getAge() { return this.age; }
public int getDlcs() { return this.dlcs; }
public int getAvgPlaytime() { return this.avg_playtime; }
public float getPrice() { return this.price; }
public float getUpvotes() { return this.upvotes; }
public boolean getWindows() { return this.windows; }
public boolean getMac() { return this.mac; }
public boolean getLinux() { return this.linux; }
public Game clone() {
Game cloned = new Game();
cloned.name = this.name;
cloned.owners = this.owners;
cloned.website = this.website;
cloned.developers = this.developers;
cloned.languages = this.languages;
cloned.genres = this.genres;
cloned.release_date = this.release_date;
cloned.app_id = this.app_id;
cloned.age = this.age;
cloned.dlcs = this.dlcs;
cloned.avg_playtime = this.avg_playtime;
cloned.price = this.price;
cloned.upvotes = this.upvotes;
cloned.windows = this.windows;
cloned.mac = this.mac;
cloned.linux = this.linux;
return cloned;
}
public void read(String line) {
char c_search;
int index = 0, atr_index = 0;
// ---------------------------------- //
// Find "AppID"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.app_id = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Name"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.name = line.substring(atr_index, index);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find release date
if(line.charAt(atr_index) != ',') {
SimpleDateFormat df;
if(line.charAt(atr_index) == '\"') {
df = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
atr_index++;
c_search = '\"';
}
else {
df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
c_search = ',';
}
while(true) {
index++;
if(line.charAt(index) == c_search) {
try { this.release_date = df.parse(line.substring(atr_index, index)); }
catch (java.text.ParseException e) { e.printStackTrace(); }
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Owners"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.owners = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Age"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.age = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Price"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.price = Float.parseFloat(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "DLCs"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.dlcs = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Languages"
while(true) {
index++;
if(line.charAt(index) == ']') {
index++;
if(line.charAt(index) == ',') index++;
else if(line.charAt(index) == '\"') index += 2;
atr_index = index;
break;
}
else if(line.charAt(index) == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line.charAt(index) == '\'') {
this.languages.add(line.substring(wordStart, index));
break;
}
}
}
}
// ---------------------------------- //
// Find "Website"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.website = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Windows"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.windows = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.mac = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.linux = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line.charAt(index) == ',') {
positives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line.charAt(index) == ',') {
negatives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
this.upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ---------------------------------- //
// Find "AVG Playtime"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.avg_playtime = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Developers"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.developers = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Genres"
if(index < line.length() - 1) {
if(line.charAt(index) == ',') atr_index = ++index;
if(line.charAt(atr_index) == '\"') {
atr_index++;
while(true) {
index++;
if(line.charAt(index) == ',') {
this.genres.add(line.substring(atr_index, index));
atr_index = ++index;
}
else if(line.charAt(index) == '\"') {
this.genres.add(line.substring(atr_index, line.length() - 1));
break;
}
}
}
else this.genres.add(line.substring(atr_index, line.length()));
}
// -------------------------------------------------------------------------------- //
}
public void print() {
String avg_pt = null;
if(this.avg_playtime == 0) avg_pt = "null ";
else if(this.avg_playtime < 60) avg_pt = this.avg_playtime + "m ";
else {
if(this.avg_playtime % 60 == 0) avg_pt = this.avg_playtime / 60 + "h ";
else avg_pt = (this.avg_playtime / 60) + "h " + (this.avg_playtime % 60) + "m ";
}
DecimalFormat df = new DecimalFormat("##");
System.out.println(this.app_id + " " + this.name + " " + default_dateFormat.format(this.release_date) + " " + this.owners + " " + this.age + " " + String.format(Locale.ENGLISH, "%.2f", this.price) + " " + this.dlcs + " " + this.languages + " " + this.website + " " + this.windows + " " + this.mac + " " + this.linux + " " + (Float.isNaN(this.upvotes) ? "0% " : df.format(this.upvotes) + "% ") + avg_pt + this.developers + " " + this.genres);
}
// -------------------------------------------------------------------------------------- //
public static void main(String[] args) throws Exception {
Scanner scr = new Scanner(System.in);
ArrayList<Integer> gamesToAdd = new ArrayList<Integer>();
ArrayList<Game> games = new ArrayList<Game>();
String line = scr.nextLine();
// ------------------------------------------------------------------------------ //
// Fill list with requested ids
while(true) {
if(line.equals("FIM")) break;
gamesToAdd.add(Integer.parseInt(line));
line = scr.nextLine();
}
// ------------------------------------------------------------------------------ //
// Add requested ids to games list
try {
// Read CSV file
FileInputStream fstream = new FileInputStream("/tmp/games.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
while((line = br.readLine()) != null) {
if(gamesToAdd.contains(Integer.parseInt(line.substring(0, line.indexOf(','))))) {
Game game = new Game();
game.read(line);
games.add(game);
}
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
// ---------------------------------------------------------------------------------------------- //
// Initialize bench log
int c_compares = 0;
long t_begin = System.currentTimeMillis();
Collections.sort(games);
// Search in games list by name
line = scr.nextLine();
while(true) {
if(line.equals("FIM")) break;
// ------------------------------------ //
boolean found = false;
int low = 0;
int high = games.size() - 1;
while(low <= high) {
int mid = low + (high - low) / 2;
c_compares++;
if(games.get(mid).name.compareTo(line) == 0) {
found = true;
break;
}
else if(games.get(mid).name.compareTo(line) < 0) {
c_compares++;
low = mid + 1;
}
else {
c_compares++;
high = mid - 1;
}
}
// ------------------------------------ //
System.out.println(found ? "SIM" : "NAO");
line = scr.nextLine();
}
Arq.openWrite("753045_sequencial.txt");
Arq.print("753045\t" + (System.currentTimeMillis() - t_begin) + "ms\t" + c_compares);
Arq.close();
scr.close();
// ---------------------------------------------------------------------------------------------- //
}
// ---------------------------------------------------------------------------------------------- //
}

View File

@ -0,0 +1,39 @@
SIM
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO

View File

@ -0,0 +1,91 @@
840010
866510
1970560
411740
1509590
458520
920210
1444020
1232460
2026070
258880
295250
299500
574080
598780
1217190
257730
1807730
773670
1803150
1573070
513930
385250
261880
533300
542340
1209040
8790
8000
415150
2012500
691150
283370
249650
268870
1172510
927890
25700
281610
485610
1276850
722340
1499640
1848450
615700
744980
10180
234390
1641670
427520
FIM
Bobbi Adventure
The Test: Hypothesis Rising
Epic Cards Battle 2 (TCG)
Omensight: Definitive Edition
Gray Matter
The Legend of Bean
Armored Warfare
Void Slayer
RacetronicVR
The Amazing American Circus
Your Quest
HistoryMaker VR
WE ARE FOOTBALL
Rise of Insanity
Aragami
BONEWORKS
CAGE
Saku Saku: Love Blooms with the Cherry Blossoms
Kill The Bad Guy
Deisim
Redactem
Xuan-Yuan Sword: The Gate of Firmament
Subspace Continuum
DRAGON BALL XENOVERSE
RiotZ
Stephen's Sausage Roll
Tavern Tycoon - Dragon's Hangover
Child of Light
Heart and Seoul
Tank Destroyer
Claire
MONOLISK
Cinderella Escape 2 Revenge
Flat Heroes
The Political Machine 2016
AFFECTED: The Manor - The Complete Edition
QUAKE III: Team Arena
Woodcutter Simulator 2013
Dawn of Man
FIM

View File

@ -0,0 +1,39 @@
SIM
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
SIM
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO
NAO

View File

@ -0,0 +1,739 @@
/**
* @file Game.java
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// ----------------------------------------------------------------------------------------------------------------- //
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;
// ----------------------------------------------------------------------------------------------------------------- //
class GameList {
private Game[] array;
private int n;
public GameList() {}
public GameList(int size) {
array = new Game[size];
n = 0;
}
public void print() {
for(int i = 0; i < n; i++) {
System.out.print("[" + i + "] ");
array[i].print();
}
}
public void insertBegin(Game game) throws Exception {
if(n >= array.length) throw new Exception("x Insert error: Full list!");
for(int i = n; i > 0; i--) array[i] = array[i - 1];
array[0] = game;
n++;
}
public void insertEnd(Game game) throws Exception {
if(n >= array.length) throw new Exception("x Insert error: Full list");
array[n] = game;
n++;
}
public void insert(Game game, int pos) throws Exception {
if(n >= array.length || pos < 0 || pos > n) throw new Exception("x Insert error: Full list / Invalid pos");
for(int i = n; i > pos; i--) array[i] = array[i - 1];
array[pos] = game;
n++;
}
public Game removeBegin() throws Exception {
if(n == 0) throw new Exception("x Remove error: Empty list");
Game resp = array[0];
n--;
for(int i = 0; i < n; i++) array[i] = array[i + 1];
return resp;
}
public Game removeEnd() throws Exception {
if(n == 0) throw new Exception("x Remove error: Empty list");
return array[--n];
}
public Game remove(int pos) throws Exception {
if(n == 0 || pos < 0 || pos >= n) throw new Exception("x Remove error: Empty list / Invalid pos");
Game resp = array[pos];
n--;
for(int i = pos; i < n; i++) array[i] = array[i + 1];
return resp;
}
}
// ----------------------------------------------------------------------------------------------------------------- //
class Game {
static SimpleDateFormat default_dateFormat = new SimpleDateFormat("MMM/yyyy", Locale.ENGLISH);
private String name, owners, website, developers;
private ArrayList<String> languages, genres;
private Date release_date;
private int app_id, age, dlcs, avg_playtime;
private float price, upvotes;
private boolean windows, mac, linux;
public Game() {
this.name = this.owners = this.website = this.developers = null;
this.languages = new ArrayList<String>();
this.genres = new ArrayList<String>();
this.release_date = null;
this.app_id = this.age = this.dlcs = this.avg_playtime = -1;
this.price = this.upvotes = -1;
this.windows = this.mac = this.linux = false;
}
public Game(String name, String owners, String website, String developers, ArrayList<String> languages, ArrayList<String> genres, Date release_date, int app_id, int age, int dlcs, int upvotes, int avg_playtime, float price, boolean windows, boolean mac, boolean linux) {
this.name = name;
this.owners = owners;
this.website = website;
this.developers = developers;
this.languages = languages;
this.genres = genres;
this.release_date = release_date;
this.app_id = app_id;
this.age = age;
this.dlcs = dlcs;
this.upvotes = upvotes;
this.avg_playtime = avg_playtime;
this.price = price;
this.windows = windows;
this.mac = mac;
this.linux = linux;
}
public void setName(String name) { this.name = name; }
public void setOwners(String owners) { this.owners = owners; }
public void setWebsite(String website) { this.website = website; }
public void setDevelopers(String developers) { this.developers = developers; }
public void setLanguages(ArrayList<String> languages) { this.languages = languages; }
public void setGenres(ArrayList<String> genres) { this.genres = genres; }
public void setReleaseDate(Date release_date) { this.release_date = release_date; }
public void setAppId(int app_id) { this.app_id = app_id; }
public void setAge(int age) { this.age = age; }
public void setDlcs(int dlcs) { this.dlcs = dlcs; }
public void setAvgPlaytime(int avg_playtime) { this.avg_playtime = avg_playtime; }
public void setPrice(float price) { this.price = price; }
public void setUpvotes(float upvotes) { this.upvotes = upvotes; }
public void setWindows(boolean windows) { this.windows = windows; }
public void setMac(boolean mac) { this.mac = mac; }
public void setLinux(boolean linux) { this.linux = linux; }
public String getName() { return this.name; }
public String getOwners() { return this.owners; }
public String getWebsite() { return this.website; }
public String getDevelopers() { return this.developers; }
public ArrayList<String> getLanguages() { return this.languages; }
public ArrayList<String> getGenres() { return this.genres; }
public Date getReleaseDate() { return this.release_date; }
public int getAppId() { return this.app_id; }
public int getAge() { return this.age; }
public int getDlcs() { return this.dlcs; }
public int getAvgPlaytime() { return this.avg_playtime; }
public float getPrice() { return this.price; }
public float getUpvotes() { return this.upvotes; }
public boolean getWindows() { return this.windows; }
public boolean getMac() { return this.mac; }
public boolean getLinux() { return this.linux; }
public Game clone() {
Game cloned = new Game();
cloned.name = this.name;
cloned.owners = this.owners;
cloned.website = this.website;
cloned.developers = this.developers;
cloned.languages = this.languages;
cloned.genres = this.genres;
cloned.release_date = this.release_date;
cloned.app_id = this.app_id;
cloned.age = this.age;
cloned.dlcs = this.dlcs;
cloned.avg_playtime = this.avg_playtime;
cloned.price = this.price;
cloned.upvotes = this.upvotes;
cloned.windows = this.windows;
cloned.mac = this.mac;
cloned.linux = this.linux;
return cloned;
}
public static Game gameSearch(ArrayList<Game> games, int app_id) {
for(Game game : games) if(game.getAppId() == app_id) return game;
return null;
}
public void read(String line) {
char c_search;
int index = 0, atr_index = 0;
// ---------------------------------- //
// Find "AppID"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.app_id = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Name"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.name = line.substring(atr_index, index);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find release date
if(line.charAt(atr_index) != ',') {
SimpleDateFormat df;
if(line.charAt(atr_index) == '\"') {
df = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
atr_index++;
c_search = '\"';
}
else {
df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
c_search = ',';
}
while(true) {
index++;
if(line.charAt(index) == c_search) {
try { this.release_date = df.parse(line.substring(atr_index, index)); }
catch (java.text.ParseException e) { e.printStackTrace(); }
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Owners"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.owners = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Age"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.age = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Price"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.price = Float.parseFloat(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "DLCs"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.dlcs = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Languages"
while(true) {
index++;
if(line.charAt(index) == ']') {
index++;
if(line.charAt(index) == ',') index++;
else if(line.charAt(index) == '\"') index += 2;
atr_index = index;
break;
}
else if(line.charAt(index) == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line.charAt(index) == '\'') {
this.languages.add(line.substring(wordStart, index));
break;
}
}
}
}
// ---------------------------------- //
// Find "Website"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.website = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Windows"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.windows = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.mac = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.linux = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line.charAt(index) == ',') {
positives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line.charAt(index) == ',') {
negatives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
this.upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ---------------------------------- //
// Find "AVG Playtime"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.avg_playtime = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Developers"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.developers = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Genres"
if(index < line.length() - 1) {
if(line.charAt(index) == ',') atr_index = ++index;
if(line.charAt(atr_index) == '\"') {
atr_index++;
while(true) {
index++;
if(line.charAt(index) == ',') {
this.genres.add(line.substring(atr_index, index));
atr_index = ++index;
}
else if(line.charAt(index) == '\"') {
this.genres.add(line.substring(atr_index, line.length() - 1));
break;
}
}
}
else this.genres.add(line.substring(atr_index, line.length()));
}
// -------------------------------------------------------------------------------- //
}
public void print() {
String avg_pt = null;
if(this.avg_playtime == 0) avg_pt = "null ";
else if(this.avg_playtime < 60) avg_pt = this.avg_playtime + "m ";
else {
if(this.avg_playtime % 60 == 0) avg_pt = this.avg_playtime / 60 + "h ";
else avg_pt = (this.avg_playtime / 60) + "h " + (this.avg_playtime % 60) + "m ";
}
DecimalFormat df = new DecimalFormat("##");
System.out.println(this.app_id + " " + this.name + " " + default_dateFormat.format(this.release_date) + " " + this.owners + " " + this.age + " " + String.format(Locale.ENGLISH, "%.2f", this.price) + " " + this.dlcs + " " + this.languages + " " + this.website + " " + this.windows + " " + this.mac + " " + this.linux + " " + (Float.isNaN(this.upvotes) ? "0% " : df.format(this.upvotes) + "% ") + avg_pt + this.developers + " " + this.genres);
}
public static String getGameData(String csvFile, int app_id) throws Exception {
try {
// Read CSV file
FileInputStream fstream = new FileInputStream(csvFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
String line;
while((line = br.readLine()) != null) {
String id_s = Integer.toString(app_id);
if(line.substring(0, line.indexOf(',')).equals(id_s)) {
fstream.close();
br.close();
return line;
}
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
return null;
}
// -------------------------------------------------------------------------------------- //
public static void main(String[] args) throws Exception {
Scanner scr = new Scanner(System.in);
ArrayList<Game> gamesFull = new ArrayList<Game>();
String line;
// ------------------------------------------------------------------------------ //
// Fill full games list
try {
// Read CSV file
FileInputStream fstream = new FileInputStream("/tmp/games.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
while((line = br.readLine()) != null) {
Game game = new Game();
game.read(line);
gamesFull.add(game);
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
// ---------------------------------------------------------------------------------------------- //
// Fill production games list
GameList games = new GameList(500);
line = scr.nextLine();
while(true) {
if(line.compareTo("FIM") == 0) break;
// ------------------------------------ //
Game found = gameSearch(gamesFull, Integer.parseInt(line));
if(found != null) games.insertEnd(found);
// ------------------------------------ //
line = scr.nextLine();
}
// ---------------------------------------------------------------------------------------------- //
// Execute operations
int n_ops = Integer.parseInt(scr.nextLine());
for(int x = 0; x < n_ops; x++) {
line = scr.nextLine();
String op = line.substring(0, 2);
int app_id;
// -------------------------------- //
// Identify operation
if(op.equals("II")) {
app_id = Integer.parseInt(line.substring(3, line.length()));
games.insertBegin(gameSearch(gamesFull, app_id));
}
else if(op.equals("IF")) {
app_id = Integer.parseInt(line.substring(3, line.length()));
games.insertEnd(gameSearch(gamesFull, app_id));
}
else if(op.equals("I*")) {
int pos = Integer.parseInt(line.substring(3, line.indexOf(" ", 3)));
app_id = Integer.parseInt(line.substring(line.indexOf(" ", 3) + 1, line.length()));
games.insert(gameSearch(gamesFull, app_id), pos);
}
else if(op.equals("RI")) System.out.println("(R) " + games.removeBegin().getName());
else if(op.equals("RF")) System.out.println("(R) " + games.removeEnd().getName());
else if(op.equals("R*")) {
int pos = Integer.parseInt(line.substring(3, line.length()));
System.out.println("(R) " + games.remove(pos).getName());
}
}
games.print();
// ---------------------------------------------------------------------------------------------- //
scr.close();
}
// ------------------------------------------------------------------------------ //
}

View File

@ -0,0 +1,72 @@
1189490
300550
49800
1851280
1112930
275570
1276550
1096530
690510
1504570
1369470
270130
336150
573210
886470
1368820
951530
247370
1879330
1634290
259570
941650
768450
1347140
722670
711540
450170
730
598550
614090
809440
1923860
559010
1547380
554310
1124090
292120
691930
325420
663670
503820
49600
49300
1631930
1038740
336760
64000
487580
410890
363110
FIM
20
II 1487390
II 258520
II 1165270
II 298140
II 213610
IF 50510
IF 998660
IF 1740720
I* 10 24720
I* 15 439550
I* 20 1507410
RF
RF
RF
RI
RI
R* 10
RF
RF
RI

View File

@ -0,0 +1,61 @@
(R) Have a Nice Death
(R) Sopwith VR
(R) Burn Zombie Burn!
(R) Sonic Adventure 2
(R) Rhiannon: Curse of the Four Branches
(R) Faefever
(R) NOBUNAGA'S AMBITION: Tendou with Power Up Kit
(R) Higurashi When They Cry Hou - Ch.2 Watanagashi
(R) Synthesis Universe -Episode 00-
[0] 258520 The Vanishing of Ethan Carter Sep/2014 500000 - 1000000 0 19.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Czech] http://EthanCarterGame.com true false false 89% 3h 13m The Astronauts [Adventure, Indie]
[1] 1487390 ANVIL Dec/2021 50000 - 100000 0 24.99 0 [English, Korean, German, Russian, Japanese, Simplified Chinese, Traditional Chinese, French, Polish, Portuguese - Brazil, Spanish - Latin America, Italian, Thai, Vietnamese] https://www.anvil.world/ true false false 63% 9h 51m Action Square [Action, Early Access]
[2] 1189490 觅长生 Nov/2019 500000 - 1000000 0 11.99 0 [Simplified Chinese] null true false false 91% 33h 39m Chalcedony Network [Indie, RPG, Strategy, Early Access]
[3] 300550 Shadowrun: Dragonfall - Director's Cut Sep/2014 500000 - 1000000 0 14.99 0 [English] http://harebrained-schemes.com/shadowrun/dragonfall/ true true true 89% 15h 1m Harebrained Schemes [Adventure, Indie, RPG, Strategy]
[4] 49800 Flight of the Icarus May/2010 50000 - 100000 0 4.99 0 [English] http://musegames.com/games/flight-of-the-icarus/ true true false 39% 15m Muse Games [Action, Indie]
[5] 1851280 Samurai Bringer Apr/2022 50000 - 100000 0 9.99 0 [English, Japanese, Simplified Chinese, Traditional Chinese] https://playism.com/game/samurai-bringer/ true false false 88% 5h 2m ALPHAWING Inc. [Action, Indie]
[6] 1112930 Dredgers Oct/2019 50000 - 100000 0 11.99 0 [English, Simplified Chinese] null true false false 92% null Pirate-Rob [Indie, RPG]
[7] 24720 SPORE™ Galactic Adventures Jun/2009 500000 - 1000000 0 19.99 0 [English, French, German, Italian, Spanish - Spain, Dutch, Russian, Polish, Czech, Hungarian, Finnish, Norwegian, Swedish, Danish] http://www.spore.com/what/ga true false false 88% 15h 32m EA - Maxis [Action, Simulation]
[8] 275570 Summoner Mar/2014 50000 - 100000 0 4.99 0 [English, German] null true false false 83% 3h 24m Volition [Action, RPG]
[9] 1096530 Solasta: Crown of the Magister May/2021 500000 - 1000000 0 15.99 4 [English, French, German, Simplified Chinese, Portuguese - Brazil, Russian] https://www.solasta-game.com/ true true false 89% 37h 56m Tactical Adventures [Adventure, RPG, Strategy]
[10] 690510 Immortal Soul: Black Survival Mar/2019 500000 - 1000000 0 0.00 0 [English, Japanese, Korean, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Traditional Chinese, Thai, Portuguese, Portuguese - Brazil] null true false false 79% 28h 5m Nimble Neuron [Free to Play, Indie, Strategy]
[11] 439550 'n Verlore Verstand Apr/2016 50000 - 100000 0 14.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Czech, Danish, Dutch, Finnish, Greek, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Swedish, Thai, Traditional Chinese, Turkish, Ukrainian] http://www.skobbejakgames.com true true true 39% 2h 20m Skobbejak Games,Skermunkel [Adventure, Casual, Indie]
[12] 1504570 Cultivation Tales Apr/2022 500000 - 1000000 0 19.99 0 [English, Simplified Chinese] null true false false 38% 27h 42m Ac Games [Action, Adventure, Indie, RPG, Strategy, Early Access]
[13] 1369470 Pincremental Aug/2020 50000 - 100000 0 0.00 0 [English] null true true false 80% null Makopaz [Casual, Free to Play, Indie, Simulation, Strategy]
[14] 270130 The Gallery - Episode 1: Call of the Starseed Apr/2016 50000 - 100000 0 14.99 1 [English] http://www.cloudheadgames.com true false false 84% 36m Cloudhead Games ltd. [Adventure, Casual, Indie]
[15] 336150 Virtual Pool 4 May/2015 50000 - 100000 0 24.99 0 [English] http://vponline.celeris.com true false false 83% null Celeris [Sports]
[16] 1507410 Coloring Book for Kids Mar/2021 50000 - 100000 0 0.00 1 [English, French, Italian, German, Arabic, Czech, Danish, Dutch, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Latin America, Swedish, Thai, Turkish, Vietnamese] null true true false 89% null Peaksel [Casual, Free to Play, Indie]
[17] 573210 Mistwood Heroes Dec/2016 50000 - 100000 0 3.99 0 [English] null true false false 56% 4h Meepower [Action, Adventure, Casual, Indie, RPG]
[18] 886470 Another Otter Jul/2018 50000 - 100000 0 0.99 0 [English] null true false false 63% null PepoLab [Casual, Indie]
[19] 1368820 RollerCoaster Tycoon® 3: Complete Edition Sep/2020 50000 - 100000 0 7.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Dutch, Finnish, Norwegian, Swedish] null true true false 83% 1h 15m Frontier Developments,Aspyr (Mac) [Simulation, Strategy]
[20] 951530 Alien Shooter - Last Hope Nov/2020 50000 - 100000 0 4.99 0 [English, Russian] http://www.sigma-team.net true false false 81% null Sigma Team Inc. [Action, Indie, RPG]
[21] 247370 Mutant Mudds Deluxe Nov/2013 50000 - 100000 0 9.99 0 [English] http://www.mutantmuddsdeluxe.com true false false 74% 3h 21m Renegade Kid [Action, Indie]
[22] 1879330 WARRIORS OROCHI 3 Ultimate Definitive Edition Jul/2022 50000 - 100000 0 39.99 0 [English, Simplified Chinese, Traditional Chinese, Japanese] https://www.gamecity.ne.jp/orochi2/ultimate/index.html true false false 88% null KOEI TECMO GAMES CO., LTD. [Action, Strategy]
[23] 1634290 Chuhou Joutai 2: Paraided! Jul/2021 50000 - 100000 0 4.99 0 [English, Japanese] https://drillimation.com/chuhou-joutai-2-paraided/ true false false 100% null Drillimation Systems [Action, Indie]
[24] 259570 EDEN STAR Jan/2015 50000 - 100000 0 19.99 0 [English] http://www.edenstargame.com true false false 61% 4h 31m Flix Interactive [Action, Adventure, Indie, Strategy, Early Access]
[25] 941650 The Island: Into The Mist Jan/2019 50000 - 100000 0 9.99 0 [Korean, English] https://imbada.itch.io/the-island true false false 69% 3h 14m SUPER WAVE Studio [Adventure, Indie]
[26] 768450 NUTS Feb/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Dutch, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese, Traditional Chinese] http://nuts.game true true false 88% null Joon, Pol, Muutsch, Char & Torfi [Adventure, Simulation]
[27] 1347140 NEAR DEADline Aug/2020 50000 - 100000 0 0.00 1 [English] https://www.newgrounds.com/portal/view/736443 true true true 90% null Dumb ****ing Horse [Action, Casual, Free to Play, Indie]
[28] 722670 Chinese Chess/ Elephant Game: 象棋/ 中国象棋/ 中國象棋 Oct/2017 50000 - 100000 0 9.99 0 [Simplified Chinese, Traditional Chinese, English, Russian] null true false false 78% 1h 45m Wang Wenxi [Indie, Simulation, Strategy, Early Access]
[29] 711540 Lonely Mountains: Downhill Oct/2019 50000 - 100000 0 9.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Japanese, Korean, Portuguese - Brazil, Polish, Turkish] http://lonelymountains.com true true false 92% 1h 15m Megagon Industries [Action, Indie, Racing, Simulation, Sports]
[30] 450170 BOOR Feb/2017 50000 - 100000 0 0.99 0 [English, Spanish - Spain, French, German] http://www.dazlog.com/boor true true true 83% 4h 30m DazlogStudio [Adventure, Casual, Indie]
[31] 730 Counter-Strike: Global Offensive Aug/2012 50000000 - 100000000 0 0.00 1 [Czech, Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Spain, Swedish, Thai, Traditional Chinese, Turkish, Bulgarian, Ukrainian, Greek, Spanish - Latin America, Vietnamese] http://blog.counter-strike.net/ true true true 88% 508h 4m Valve,Hidden Path Entertainment [Action, Free to Play]
[32] 598550 HUNTDOWN May/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Japanese, Simplified Chinese] http://huntdown.com/ true true true 95% 11h 26m Easy Trigger Games [Action, Indie]
[33] 614090 Deadbeat Heroes Oct/2017 50000 - 100000 0 14.99 0 [English] https://www.upstreamarcade.com/deadbeat-heroes/ true false false 66% 4h 36m Deadbeat Productions [Action]
[34] 809440 Protolife Jun/2018 50000 - 100000 0 11.99 0 [English, Russian] null true true false 87% 15m Volcanic Giraffe [Indie, Strategy]
[35] 1923860 Neon Outlast Mar/2022 50000 - 100000 0 4.99 0 [English] null true false false 0% null Keep Spinning [Action, Indie]
[36] 559010 Cosmic Sugar VR Nov/2016 50000 - 100000 0 0.00 1 [English] http://cosmicsugarvr.com true false false 95% 5m David Lobser [Free to Play, Simulation]
[37] 1547380 KINGDOM of the DEAD Feb/2022 50000 - 100000 0 14.99 0 [English, French, Italian, German, Spanish - Spain, Simplified Chinese, Traditional Chinese, Korean, Japanese, Polish, Portuguese - Brazil, Russian] null true false false 83% null DIRIGO GAMES [Action, Adventure, Indie]
[38] 554310 Rage Wars Nov/2016 50000 - 100000 0 0.99 0 [English] http://www.lemondo.com/ true true true 89% 4h 24m Lemondo Games [Violent, Gore, Adventure, Casual, Indie]
[39] 1124090 告死天使之言-Death angel Aug/2019 50000 - 100000 0 0.99 1 [Simplified Chinese] https://space.bilibili.com/11591868/article true false false 81% null 我妻寒十 [Adventure, Indie]
[40] 292120 FINAL FANTASY® XIII Oct/2014 500000 - 1000000 13 15.99 0 [English, French, Italian, German, Spanish - Spain] http://www.square-enix.com/ true false false 74% 28h 58m Square Enix [RPG]
[41] 691930 MSI Electric City: Core Assault Sep/2017 50000 - 100000 0 0.00 0 [English] http://msi.com/to/e-city true false false 90% 32m HyperBot Studio [Action, Adventure, Casual, Free to Play, Indie]
[42] 325420 Homebrew - Patent Unknown Nov/2014 50000 - 100000 0 14.99 0 [English] http://www.homebrewgame.com true false false 76% 5h 48m Copybugpaste [Action, Indie, Racing, Simulation, Early Access]
[43] 663670 Killer Queen Black Oct/2019 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean] http://www.killerqueenblack.com true true false 93% 2h 11m Liquid Bit, LLC,BumbleBear Games, LLC [Action, Casual, Sports, Strategy]
[44] 503820 A Detective's Novel Jul/2016 500000 - 1000000 0 0.99 0 [English] http://amaterasusoftware.blogspot.hr/ true false false 68% 4h 24m Amaterasu Software [Adventure, Indie]
[45] 49600 Beat Hazard Apr/2010 500000 - 1000000 0 9.99 2 [English, French, German, Italian, Spanish - Spain, Dutch] http://www.coldbeamgames.com true true true 95% 7h 36m Cold Beam Games [Action, Casual, Indie]
[46] 49300 Commander: Conquest of the Americas Jul/2010 50000 - 100000 0 9.99 2 [English, French, German, Spanish - Spain] http://www.cota-game.com/ true false false 48% 11h 48m Nitro Games [Strategy]
[47] 1631930 The Insignia Project Jul/2021 50000 - 100000 0 1.99 0 [English] https://darkendstu.com/ true false false 75% null Dark End Studios [Indie, Early Access]
[48] 1038740 Fluffy Store Aug/2019 50000 - 100000 0 1.99 1 [English, Simplified Chinese, Traditional Chinese, Japanese] null true true false 97% 3h 9m AsicxArt [Adventure, Casual, Indie, RPG]
[49] 336760 Pilot Brothers Dec/2014 50000 - 100000 0 4.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Traditional Chinese, Portuguese] null true false false 87% null 1C Wireless [Adventure, Casual]
[50] 64000 Men of War: Assault Squad Feb/2011 500000 - 1000000 0 9.99 5 [English, Russian, Italian, Spanish - Spain, French, German, Polish] http://www.menofwargame.com/assault/ true false false 88% 10h 5m Digitalmindsoft [Strategy]
[51] 487580 Ludo Supremo Jun/2016 50000 - 100000 0 1.99 0 [English] http://www.ensenasoft.com true false false 57% 3h 19m EnsenaSoft [Casual]

View File

@ -0,0 +1,61 @@
(R) Have a Nice Death
(R) Sopwith VR
(R) Burn Zombie Burn!
(R) Sonic Adventure 2
(R) Rhiannon: Curse of the Four Branches
(R) Faefever
(R) NOBUNAGA'S AMBITION: Tendou with Power Up Kit
(R) Higurashi When They Cry Hou - Ch.2 Watanagashi
(R) Synthesis Universe -Episode 00-
[0] 258520 The Vanishing of Ethan Carter Sep/2014 500000 - 1000000 0 19.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Czech] http://EthanCarterGame.com true false false 89% 3h 13m The Astronauts [Adventure, Indie]
[1] 1487390 ANVIL Dec/2021 50000 - 100000 0 24.99 0 [English, Korean, German, Russian, Japanese, Simplified Chinese, Traditional Chinese, French, Polish, Portuguese - Brazil, Spanish - Latin America, Italian, Thai, Vietnamese] https://www.anvil.world/ true false false 63% 9h 51m Action Square [Action, Early Access]
[2] 1189490 觅长生 Nov/2019 500000 - 1000000 0 11.99 0 [Simplified Chinese] null true false false 91% 33h 39m Chalcedony Network [Indie, RPG, Strategy, Early Access]
[3] 300550 Shadowrun: Dragonfall - Director's Cut Sep/2014 500000 - 1000000 0 14.99 0 [English] http://harebrained-schemes.com/shadowrun/dragonfall/ true true true 89% 15h 1m Harebrained Schemes [Adventure, Indie, RPG, Strategy]
[4] 49800 Flight of the Icarus May/2010 50000 - 100000 0 4.99 0 [English] http://musegames.com/games/flight-of-the-icarus/ true true false 39% 15m Muse Games [Action, Indie]
[5] 1851280 Samurai Bringer Apr/2022 50000 - 100000 0 9.99 0 [English, Japanese, Simplified Chinese, Traditional Chinese] https://playism.com/game/samurai-bringer/ true false false 88% 5h 2m ALPHAWING Inc. [Action, Indie]
[6] 1112930 Dredgers Oct/2019 50000 - 100000 0 11.99 0 [English, Simplified Chinese] null true false false 92% null Pirate-Rob [Indie, RPG]
[7] 24720 SPORE™ Galactic Adventures Jun/2009 500000 - 1000000 0 19.99 0 [English, French, German, Italian, Spanish - Spain, Dutch, Russian, Polish, Czech, Hungarian, Finnish, Norwegian, Swedish, Danish] http://www.spore.com/what/ga true false false 88% 15h 32m EA - Maxis [Action, Simulation]
[8] 275570 Summoner Mar/2014 50000 - 100000 0 4.99 0 [English, German] null true false false 83% 3h 24m Volition [Action, RPG]
[9] 1096530 Solasta: Crown of the Magister May/2021 500000 - 1000000 0 15.99 4 [English, French, German, Simplified Chinese, Portuguese - Brazil, Russian] https://www.solasta-game.com/ true true false 89% 37h 56m Tactical Adventures [Adventure, RPG, Strategy]
[10] 690510 Immortal Soul: Black Survival Mar/2019 500000 - 1000000 0 0.00 0 [English, Japanese, Korean, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Traditional Chinese, Thai, Portuguese, Portuguese - Brazil] null true false false 79% 28h 5m Nimble Neuron [Free to Play, Indie, Strategy]
[11] 439550 'n Verlore Verstand Apr/2016 50000 - 100000 0 14.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Czech, Danish, Dutch, Finnish, Greek, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Swedish, Thai, Traditional Chinese, Turkish, Ukrainian] http://www.skobbejakgames.com true true true 39% 2h 20m Skobbejak Games,Skermunkel [Adventure, Casual, Indie]
[12] 1504570 Cultivation Tales Apr/2022 500000 - 1000000 0 19.99 0 [English, Simplified Chinese] null true false false 38% 27h 42m Ac Games [Action, Adventure, Indie, RPG, Strategy, Early Access]
[13] 1369470 Pincremental Aug/2020 50000 - 100000 0 0.00 0 [English] null true true false 80% null Makopaz [Casual, Free to Play, Indie, Simulation, Strategy]
[14] 270130 The Gallery - Episode 1: Call of the Starseed Apr/2016 50000 - 100000 0 14.99 1 [English] http://www.cloudheadgames.com true false false 84% 36m Cloudhead Games ltd. [Adventure, Casual, Indie]
[15] 336150 Virtual Pool 4 May/2015 50000 - 100000 0 24.99 0 [English] http://vponline.celeris.com true false false 83% null Celeris [Sports]
[16] 1507410 Coloring Book for Kids Mar/2021 50000 - 100000 0 0.00 1 [English, French, Italian, German, Arabic, Czech, Danish, Dutch, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Latin America, Swedish, Thai, Turkish, Vietnamese] null true true false 89% null Peaksel [Casual, Free to Play, Indie]
[17] 573210 Mistwood Heroes Dec/2016 50000 - 100000 0 3.99 0 [English] null true false false 56% 4h Meepower [Action, Adventure, Casual, Indie, RPG]
[18] 886470 Another Otter Jul/2018 50000 - 100000 0 0.99 0 [English] null true false false 63% null PepoLab [Casual, Indie]
[19] 1368820 RollerCoaster Tycoon® 3: Complete Edition Sep/2020 50000 - 100000 0 7.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Dutch, Finnish, Norwegian, Swedish] null true true false 83% 1h 15m Frontier Developments,Aspyr (Mac) [Simulation, Strategy]
[20] 951530 Alien Shooter - Last Hope Nov/2020 50000 - 100000 0 4.99 0 [English, Russian] http://www.sigma-team.net true false false 81% null Sigma Team Inc. [Action, Indie, RPG]
[21] 247370 Mutant Mudds Deluxe Nov/2013 50000 - 100000 0 9.99 0 [English] http://www.mutantmuddsdeluxe.com true false false 74% 3h 21m Renegade Kid [Action, Indie]
[22] 1879330 WARRIORS OROCHI 3 Ultimate Definitive Edition Jul/2022 50000 - 100000 0 39.99 0 [English, Simplified Chinese, Traditional Chinese, Japanese] https://www.gamecity.ne.jp/orochi2/ultimate/index.html true false false 88% null KOEI TECMO GAMES CO., LTD. [Action, Strategy]
[23] 1634290 Chuhou Joutai 2: Paraided! Jul/2021 50000 - 100000 0 4.99 0 [English, Japanese] https://drillimation.com/chuhou-joutai-2-paraided/ true false false 100% null Drillimation Systems [Action, Indie]
[24] 259570 EDEN STAR Jan/2015 50000 - 100000 0 19.99 0 [English] http://www.edenstargame.com true false false 61% 4h 31m Flix Interactive [Action, Adventure, Indie, Strategy, Early Access]
[25] 941650 The Island: Into The Mist Jan/2019 50000 - 100000 0 9.99 0 [Korean, English] https://imbada.itch.io/the-island true false false 69% 3h 14m SUPER WAVE Studio [Adventure, Indie]
[26] 768450 NUTS Feb/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Dutch, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese, Traditional Chinese] http://nuts.game true true false 88% null Joon, Pol, Muutsch, Char & Torfi [Adventure, Simulation]
[27] 1347140 NEAR DEADline Aug/2020 50000 - 100000 0 0.00 1 [English] https://www.newgrounds.com/portal/view/736443 true true true 90% null Dumb ****ing Horse [Action, Casual, Free to Play, Indie]
[28] 722670 Chinese Chess/ Elephant Game: 象棋/ 中国象棋/ 中國象棋 Oct/2017 50000 - 100000 0 9.99 0 [Simplified Chinese, Traditional Chinese, English, Russian] null true false false 78% 1h 45m Wang Wenxi [Indie, Simulation, Strategy, Early Access]
[29] 711540 Lonely Mountains: Downhill Oct/2019 50000 - 100000 0 9.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Japanese, Korean, Portuguese - Brazil, Polish, Turkish] http://lonelymountains.com true true false 92% 1h 15m Megagon Industries [Action, Indie, Racing, Simulation, Sports]
[30] 450170 BOOR Feb/2017 50000 - 100000 0 0.99 0 [English, Spanish - Spain, French, German] http://www.dazlog.com/boor true true true 83% 4h 30m DazlogStudio [Adventure, Casual, Indie]
[31] 730 Counter-Strike: Global Offensive Aug/2012 50000000 - 100000000 0 0.00 1 [Czech, Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Spain, Swedish, Thai, Traditional Chinese, Turkish, Bulgarian, Ukrainian, Greek, Spanish - Latin America, Vietnamese] http://blog.counter-strike.net/ true true true 88% 508h 4m Valve,Hidden Path Entertainment [Action, Free to Play]
[32] 598550 HUNTDOWN May/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Japanese, Simplified Chinese] http://huntdown.com/ true true true 95% 11h 26m Easy Trigger Games [Action, Indie]
[33] 614090 Deadbeat Heroes Oct/2017 50000 - 100000 0 14.99 0 [English] https://www.upstreamarcade.com/deadbeat-heroes/ true false false 66% 4h 36m Deadbeat Productions [Action]
[34] 809440 Protolife Jun/2018 50000 - 100000 0 11.99 0 [English, Russian] null true true false 87% 15m Volcanic Giraffe [Indie, Strategy]
[35] 1923860 Neon Outlast Mar/2022 50000 - 100000 0 4.99 0 [English] null true false false 0% null Keep Spinning [Action, Indie]
[36] 559010 Cosmic Sugar VR Nov/2016 50000 - 100000 0 0.00 1 [English] http://cosmicsugarvr.com true false false 95% 5m David Lobser [Free to Play, Simulation]
[37] 1547380 KINGDOM of the DEAD Feb/2022 50000 - 100000 0 14.99 0 [English, French, Italian, German, Spanish - Spain, Simplified Chinese, Traditional Chinese, Korean, Japanese, Polish, Portuguese - Brazil, Russian] null true false false 83% null DIRIGO GAMES [Action, Adventure, Indie]
[38] 554310 Rage Wars Nov/2016 50000 - 100000 0 0.99 0 [English] http://www.lemondo.com/ true true true 89% 4h 24m Lemondo Games [Violent, Gore, Adventure, Casual, Indie]
[39] 1124090 告死天使之言-Death angel Aug/2019 50000 - 100000 0 0.99 1 [Simplified Chinese] https://space.bilibili.com/11591868/article true false false 81% null 我妻寒十 [Adventure, Indie]
[40] 292120 FINAL FANTASY® XIII Oct/2014 500000 - 1000000 13 15.99 0 [English, French, Italian, German, Spanish - Spain] http://www.square-enix.com/ true false false 74% 28h 58m Square Enix [RPG]
[41] 691930 MSI Electric City: Core Assault Sep/2017 50000 - 100000 0 0.00 0 [English] http://msi.com/to/e-city true false false 90% 32m HyperBot Studio [Action, Adventure, Casual, Free to Play, Indie]
[42] 325420 Homebrew - Patent Unknown Nov/2014 50000 - 100000 0 14.99 0 [English] http://www.homebrewgame.com true false false 76% 5h 48m Copybugpaste [Action, Indie, Racing, Simulation, Early Access]
[43] 663670 Killer Queen Black Oct/2019 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean] http://www.killerqueenblack.com true true false 93% 2h 11m Liquid Bit, LLC,BumbleBear Games, LLC [Action, Casual, Sports, Strategy]
[44] 503820 A Detective's Novel Jul/2016 500000 - 1000000 0 0.99 0 [English] http://amaterasusoftware.blogspot.hr/ true false false 68% 4h 24m Amaterasu Software [Adventure, Indie]
[45] 49600 Beat Hazard Apr/2010 500000 - 1000000 0 9.99 2 [English, French, German, Italian, Spanish - Spain, Dutch] http://www.coldbeamgames.com true true true 95% 7h 36m Cold Beam Games [Action, Casual, Indie]
[46] 49300 Commander: Conquest of the Americas Jul/2010 50000 - 100000 0 9.99 2 [English, French, German, Spanish - Spain] http://www.cota-game.com/ true false false 48% 11h 48m Nitro Games [Strategy]
[47] 1631930 The Insignia Project Jul/2021 50000 - 100000 0 1.99 0 [English] https://darkendstu.com/ true false false 75% null Dark End Studios [Indie, Early Access]
[48] 1038740 Fluffy Store Aug/2019 50000 - 100000 0 1.99 1 [English, Simplified Chinese, Traditional Chinese, Japanese] null true true false 97% 3h 9m AsicxArt [Adventure, Casual, Indie, RPG]
[49] 336760 Pilot Brothers Dec/2014 50000 - 100000 0 4.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Traditional Chinese, Portuguese] null true false false 87% null 1C Wireless [Adventure, Casual]
[50] 64000 Men of War: Assault Squad Feb/2011 500000 - 1000000 0 9.99 5 [English, Russian, Italian, Spanish - Spain, French, German, Polish] http://www.menofwargame.com/assault/ true false false 88% 10h 5m Digitalmindsoft [Strategy]
[51] 487580 Ludo Supremo Jun/2016 50000 - 100000 0 1.99 0 [English] http://www.ensenasoft.com true false false 57% 3h 19m EnsenaSoft [Casual]

View File

@ -0,0 +1,669 @@
/**
* @file Game.java
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// ----------------------------------------------------------------------------------------------------------------- //
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;
// ----------------------------------------------------------------------------------------------------------------- //
class GameStack {
private Game[] array;
private int last;
public GameStack() {}
public GameStack(int size) {
array = new Game[size];
last = 0;
}
public void insert(Game x) throws Exception {
if(last + 1 == array.length) throw new Exception("x Insert error: Full stack");
array[last++] = x;
}
public Game remove() throws Exception {
if(last == 0) throw new Exception("x Remove error: Empty stack");
return array[--last];
}
public void print() {
for(int i = 0; i < last; i++) {
System.out.print("[" + i + "] ");
array[i].print();
}
}
}
// ----------------------------------------------------------------------------------------------------------------- //
class Game {
static SimpleDateFormat default_dateFormat = new SimpleDateFormat("MMM/yyyy", Locale.ENGLISH);
private String name, owners, website, developers;
private ArrayList<String> languages, genres;
private Date release_date;
private int app_id, age, dlcs, avg_playtime;
private float price, upvotes;
private boolean windows, mac, linux;
public Game() {
this.name = this.owners = this.website = this.developers = null;
this.languages = new ArrayList<String>();
this.genres = new ArrayList<String>();
this.release_date = null;
this.app_id = this.age = this.dlcs = this.avg_playtime = -1;
this.price = this.upvotes = -1;
this.windows = this.mac = this.linux = false;
}
public Game(String name, String owners, String website, String developers, ArrayList<String> languages, ArrayList<String> genres, Date release_date, int app_id, int age, int dlcs, int upvotes, int avg_playtime, float price, boolean windows, boolean mac, boolean linux) {
this.name = name;
this.owners = owners;
this.website = website;
this.developers = developers;
this.languages = languages;
this.genres = genres;
this.release_date = release_date;
this.app_id = app_id;
this.age = age;
this.dlcs = dlcs;
this.upvotes = upvotes;
this.avg_playtime = avg_playtime;
this.price = price;
this.windows = windows;
this.mac = mac;
this.linux = linux;
}
public void setName(String name) { this.name = name; }
public void setOwners(String owners) { this.owners = owners; }
public void setWebsite(String website) { this.website = website; }
public void setDevelopers(String developers) { this.developers = developers; }
public void setLanguages(ArrayList<String> languages) { this.languages = languages; }
public void setGenres(ArrayList<String> genres) { this.genres = genres; }
public void setReleaseDate(Date release_date) { this.release_date = release_date; }
public void setAppId(int app_id) { this.app_id = app_id; }
public void setAge(int age) { this.age = age; }
public void setDlcs(int dlcs) { this.dlcs = dlcs; }
public void setAvgPlaytime(int avg_playtime) { this.avg_playtime = avg_playtime; }
public void setPrice(float price) { this.price = price; }
public void setUpvotes(float upvotes) { this.upvotes = upvotes; }
public void setWindows(boolean windows) { this.windows = windows; }
public void setMac(boolean mac) { this.mac = mac; }
public void setLinux(boolean linux) { this.linux = linux; }
public String getName() { return this.name; }
public String getOwners() { return this.owners; }
public String getWebsite() { return this.website; }
public String getDevelopers() { return this.developers; }
public ArrayList<String> getLanguages() { return this.languages; }
public ArrayList<String> getGenres() { return this.genres; }
public Date getReleaseDate() { return this.release_date; }
public int getAppId() { return this.app_id; }
public int getAge() { return this.age; }
public int getDlcs() { return this.dlcs; }
public int getAvgPlaytime() { return this.avg_playtime; }
public float getPrice() { return this.price; }
public float getUpvotes() { return this.upvotes; }
public boolean getWindows() { return this.windows; }
public boolean getMac() { return this.mac; }
public boolean getLinux() { return this.linux; }
public Game clone() {
Game cloned = new Game();
cloned.name = this.name;
cloned.owners = this.owners;
cloned.website = this.website;
cloned.developers = this.developers;
cloned.languages = this.languages;
cloned.genres = this.genres;
cloned.release_date = this.release_date;
cloned.app_id = this.app_id;
cloned.age = this.age;
cloned.dlcs = this.dlcs;
cloned.avg_playtime = this.avg_playtime;
cloned.price = this.price;
cloned.upvotes = this.upvotes;
cloned.windows = this.windows;
cloned.mac = this.mac;
cloned.linux = this.linux;
return cloned;
}
public static Game gameSearch(ArrayList<Game> games, int app_id) {
for(Game game : games) if(game.getAppId() == app_id) return game;
return null;
}
public void read(String line) {
char c_search;
int index = 0, atr_index = 0;
// ---------------------------------- //
// Find "AppID"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.app_id = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Name"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.name = line.substring(atr_index, index);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find release date
if(line.charAt(atr_index) != ',') {
SimpleDateFormat df;
if(line.charAt(atr_index) == '\"') {
df = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
atr_index++;
c_search = '\"';
}
else {
df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
c_search = ',';
}
while(true) {
index++;
if(line.charAt(index) == c_search) {
try { this.release_date = df.parse(line.substring(atr_index, index)); }
catch (java.text.ParseException e) { e.printStackTrace(); }
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Owners"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.owners = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Age"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.age = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Price"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.price = Float.parseFloat(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "DLCs"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.dlcs = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Languages"
while(true) {
index++;
if(line.charAt(index) == ']') {
index++;
if(line.charAt(index) == ',') index++;
else if(line.charAt(index) == '\"') index += 2;
atr_index = index;
break;
}
else if(line.charAt(index) == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line.charAt(index) == '\'') {
this.languages.add(line.substring(wordStart, index));
break;
}
}
}
}
// ---------------------------------- //
// Find "Website"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.website = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Windows"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.windows = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.mac = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.linux = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line.charAt(index) == ',') {
positives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line.charAt(index) == ',') {
negatives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
this.upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ---------------------------------- //
// Find "AVG Playtime"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.avg_playtime = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Developers"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.developers = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Genres"
if(index < line.length() - 1) {
if(line.charAt(index) == ',') atr_index = ++index;
if(line.charAt(atr_index) == '\"') {
atr_index++;
while(true) {
index++;
if(line.charAt(index) == ',') {
this.genres.add(line.substring(atr_index, index));
atr_index = ++index;
}
else if(line.charAt(index) == '\"') {
this.genres.add(line.substring(atr_index, line.length() - 1));
break;
}
}
}
else this.genres.add(line.substring(atr_index, line.length()));
}
// -------------------------------------------------------------------------------- //
}
public void print() {
String avg_pt = null;
if(this.avg_playtime == 0) avg_pt = "null ";
else if(this.avg_playtime < 60) avg_pt = this.avg_playtime + "m ";
else {
if(this.avg_playtime % 60 == 0) avg_pt = this.avg_playtime / 60 + "h ";
else avg_pt = (this.avg_playtime / 60) + "h " + (this.avg_playtime % 60) + "m ";
}
DecimalFormat df = new DecimalFormat("##");
System.out.println(this.app_id + " " + this.name + " " + default_dateFormat.format(this.release_date) + " " + this.owners + " " + this.age + " " + String.format(Locale.ENGLISH, "%.2f", this.price) + " " + this.dlcs + " " + this.languages + " " + this.website + " " + this.windows + " " + this.mac + " " + this.linux + " " + (Float.isNaN(this.upvotes) ? "0% " : df.format(this.upvotes) + "% ") + avg_pt + this.developers + " " + this.genres);
}
// -------------------------------------------------------------------------------- //
public static String getGameData(String csvFile, int app_id) throws Exception {
try {
// Read CSV file
FileInputStream fstream = new FileInputStream(csvFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
String line;
while((line = br.readLine()) != null) {
String id_s = Integer.toString(app_id);
if(line.substring(0, line.indexOf(',')).equals(id_s)) {
fstream.close();
br.close();
return line;
}
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
return null;
}
// -------------------------------------------------------------------------------------- //
public static void main(String[] args) throws Exception {
Scanner scr = new Scanner(System.in);
ArrayList<Game> gamesFull = new ArrayList<Game>();
String line;
// ------------------------------------------------------------------------------ //
// Fill full games list
try {
// Read CSV file
FileInputStream fstream = new FileInputStream("/tmp/games.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
while((line = br.readLine()) != null) {
Game game = new Game();
game.read(line);
gamesFull.add(game);
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
// ---------------------------------------------------------------------------------------------- //
// Fill production games list
GameStack games = new GameStack(500);
line = scr.nextLine();
while(true) {
if(line.compareTo("FIM") == 0) break;
// ------------------------------------ //
Game found = gameSearch(gamesFull, Integer.parseInt(line));
if(found != null) games.insert(found);
// ------------------------------------ //
line = scr.nextLine();
}
// ---------------------------------------------------------------------------------------------- //
// Execute operations
int n_ops = Integer.parseInt(scr.nextLine());
for(int x = 0; x < n_ops; x++) {
line = scr.nextLine();
// -------------------------------- //
// Identify operation
if(line.charAt(0) == 'I') games.insert(gameSearch(gamesFull, Integer.parseInt(line.substring(2, line.length()))));
else if(line.charAt(0) == 'R') System.out.println("(R) " + games.remove().getName());
}
games.print();
// ---------------------------------------------------------------------------------------------- //
scr.close();
}
// ------------------------------------------------------------------------------ //
}

View File

@ -0,0 +1,72 @@
1189490
300550
49800
1851280
1112930
275570
1276550
1096530
690510
1504570
1369470
270130
336150
573210
886470
1368820
951530
247370
1879330
1634290
259570
941650
768450
1347140
722670
711540
450170
730
598550
614090
809440
1923860
559010
1547380
554310
1124090
292120
691930
325420
663670
503820
49600
49300
1631930
1038740
336760
64000
487580
410890
363110
FIM
20
I 1487390
I 258520
I 1165270
I 298140
I 213610
I 50510
I 998660
I 1740720
I 24720
I 439550
I 1507410
R
R
R
R
R
R
R
R
R

View File

@ -0,0 +1,61 @@
(R) Coloring Book for Kids
(R) 'n Verlore Verstand
(R) SPORE™ Galactic Adventures
(R) Have a Nice Death
(R) Sopwith VR
(R) Burn Zombie Burn!
(R) Sonic Adventure 2
(R) Rhiannon: Curse of the Four Branches
(R) Synthesis Universe -Episode 00-
[0] 1189490 觅长生 Nov/2019 500000 - 1000000 0 11.99 0 [Simplified Chinese] null true false false 91% 33h 39m Chalcedony Network [Indie, RPG, Strategy, Early Access]
[1] 300550 Shadowrun: Dragonfall - Director's Cut Sep/2014 500000 - 1000000 0 14.99 0 [English] http://harebrained-schemes.com/shadowrun/dragonfall/ true true true 89% 15h 1m Harebrained Schemes [Adventure, Indie, RPG, Strategy]
[2] 49800 Flight of the Icarus May/2010 50000 - 100000 0 4.99 0 [English] http://musegames.com/games/flight-of-the-icarus/ true true false 39% 15m Muse Games [Action, Indie]
[3] 1851280 Samurai Bringer Apr/2022 50000 - 100000 0 9.99 0 [English, Japanese, Simplified Chinese, Traditional Chinese] https://playism.com/game/samurai-bringer/ true false false 88% 5h 2m ALPHAWING Inc. [Action, Indie]
[4] 1112930 Dredgers Oct/2019 50000 - 100000 0 11.99 0 [English, Simplified Chinese] null true false false 92% null Pirate-Rob [Indie, RPG]
[5] 275570 Summoner Mar/2014 50000 - 100000 0 4.99 0 [English, German] null true false false 83% 3h 24m Volition [Action, RPG]
[6] 1276550 Faefever Jul/2020 50000 - 100000 0 0.00 0 [English] null true false false 88% null Monkey Wizard Entertainment [Adventure, Casual, Free to Play, Indie]
[7] 1096530 Solasta: Crown of the Magister May/2021 500000 - 1000000 0 15.99 4 [English, French, German, Simplified Chinese, Portuguese - Brazil, Russian] https://www.solasta-game.com/ true true false 89% 37h 56m Tactical Adventures [Adventure, RPG, Strategy]
[8] 690510 Immortal Soul: Black Survival Mar/2019 500000 - 1000000 0 0.00 0 [English, Japanese, Korean, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Traditional Chinese, Thai, Portuguese, Portuguese - Brazil] null true false false 79% 28h 5m Nimble Neuron [Free to Play, Indie, Strategy]
[9] 1504570 Cultivation Tales Apr/2022 500000 - 1000000 0 19.99 0 [English, Simplified Chinese] null true false false 38% 27h 42m Ac Games [Action, Adventure, Indie, RPG, Strategy, Early Access]
[10] 1369470 Pincremental Aug/2020 50000 - 100000 0 0.00 0 [English] null true true false 80% null Makopaz [Casual, Free to Play, Indie, Simulation, Strategy]
[11] 270130 The Gallery - Episode 1: Call of the Starseed Apr/2016 50000 - 100000 0 14.99 1 [English] http://www.cloudheadgames.com true false false 84% 36m Cloudhead Games ltd. [Adventure, Casual, Indie]
[12] 336150 Virtual Pool 4 May/2015 50000 - 100000 0 24.99 0 [English] http://vponline.celeris.com true false false 83% null Celeris [Sports]
[13] 573210 Mistwood Heroes Dec/2016 50000 - 100000 0 3.99 0 [English] null true false false 56% 4h Meepower [Action, Adventure, Casual, Indie, RPG]
[14] 886470 Another Otter Jul/2018 50000 - 100000 0 0.99 0 [English] null true false false 63% null PepoLab [Casual, Indie]
[15] 1368820 RollerCoaster Tycoon® 3: Complete Edition Sep/2020 50000 - 100000 0 7.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Dutch, Finnish, Norwegian, Swedish] null true true false 83% 1h 15m Frontier Developments,Aspyr (Mac) [Simulation, Strategy]
[16] 951530 Alien Shooter - Last Hope Nov/2020 50000 - 100000 0 4.99 0 [English, Russian] http://www.sigma-team.net true false false 81% null Sigma Team Inc. [Action, Indie, RPG]
[17] 247370 Mutant Mudds Deluxe Nov/2013 50000 - 100000 0 9.99 0 [English] http://www.mutantmuddsdeluxe.com true false false 74% 3h 21m Renegade Kid [Action, Indie]
[18] 1879330 WARRIORS OROCHI 3 Ultimate Definitive Edition Jul/2022 50000 - 100000 0 39.99 0 [English, Simplified Chinese, Traditional Chinese, Japanese] https://www.gamecity.ne.jp/orochi2/ultimate/index.html true false false 88% null KOEI TECMO GAMES CO., LTD. [Action, Strategy]
[19] 1634290 Chuhou Joutai 2: Paraided! Jul/2021 50000 - 100000 0 4.99 0 [English, Japanese] https://drillimation.com/chuhou-joutai-2-paraided/ true false false 100% null Drillimation Systems [Action, Indie]
[20] 259570 EDEN STAR Jan/2015 50000 - 100000 0 19.99 0 [English] http://www.edenstargame.com true false false 61% 4h 31m Flix Interactive [Action, Adventure, Indie, Strategy, Early Access]
[21] 941650 The Island: Into The Mist Jan/2019 50000 - 100000 0 9.99 0 [Korean, English] https://imbada.itch.io/the-island true false false 69% 3h 14m SUPER WAVE Studio [Adventure, Indie]
[22] 768450 NUTS Feb/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Dutch, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese, Traditional Chinese] http://nuts.game true true false 88% null Joon, Pol, Muutsch, Char & Torfi [Adventure, Simulation]
[23] 1347140 NEAR DEADline Aug/2020 50000 - 100000 0 0.00 1 [English] https://www.newgrounds.com/portal/view/736443 true true true 90% null Dumb ****ing Horse [Action, Casual, Free to Play, Indie]
[24] 722670 Chinese Chess/ Elephant Game: 象棋/ 中国象棋/ 中國象棋 Oct/2017 50000 - 100000 0 9.99 0 [Simplified Chinese, Traditional Chinese, English, Russian] null true false false 78% 1h 45m Wang Wenxi [Indie, Simulation, Strategy, Early Access]
[25] 711540 Lonely Mountains: Downhill Oct/2019 50000 - 100000 0 9.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Japanese, Korean, Portuguese - Brazil, Polish, Turkish] http://lonelymountains.com true true false 92% 1h 15m Megagon Industries [Action, Indie, Racing, Simulation, Sports]
[26] 450170 BOOR Feb/2017 50000 - 100000 0 0.99 0 [English, Spanish - Spain, French, German] http://www.dazlog.com/boor true true true 83% 4h 30m DazlogStudio [Adventure, Casual, Indie]
[27] 730 Counter-Strike: Global Offensive Aug/2012 50000000 - 100000000 0 0.00 1 [Czech, Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Spain, Swedish, Thai, Traditional Chinese, Turkish, Bulgarian, Ukrainian, Greek, Spanish - Latin America, Vietnamese] http://blog.counter-strike.net/ true true true 88% 508h 4m Valve,Hidden Path Entertainment [Action, Free to Play]
[28] 598550 HUNTDOWN May/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Japanese, Simplified Chinese] http://huntdown.com/ true true true 95% 11h 26m Easy Trigger Games [Action, Indie]
[29] 614090 Deadbeat Heroes Oct/2017 50000 - 100000 0 14.99 0 [English] https://www.upstreamarcade.com/deadbeat-heroes/ true false false 66% 4h 36m Deadbeat Productions [Action]
[30] 809440 Protolife Jun/2018 50000 - 100000 0 11.99 0 [English, Russian] null true true false 87% 15m Volcanic Giraffe [Indie, Strategy]
[31] 1923860 Neon Outlast Mar/2022 50000 - 100000 0 4.99 0 [English] null true false false 0% null Keep Spinning [Action, Indie]
[32] 559010 Cosmic Sugar VR Nov/2016 50000 - 100000 0 0.00 1 [English] http://cosmicsugarvr.com true false false 95% 5m David Lobser [Free to Play, Simulation]
[33] 1547380 KINGDOM of the DEAD Feb/2022 50000 - 100000 0 14.99 0 [English, French, Italian, German, Spanish - Spain, Simplified Chinese, Traditional Chinese, Korean, Japanese, Polish, Portuguese - Brazil, Russian] null true false false 83% null DIRIGO GAMES [Action, Adventure, Indie]
[34] 554310 Rage Wars Nov/2016 50000 - 100000 0 0.99 0 [English] http://www.lemondo.com/ true true true 89% 4h 24m Lemondo Games [Violent, Gore, Adventure, Casual, Indie]
[35] 1124090 告死天使之言-Death angel Aug/2019 50000 - 100000 0 0.99 1 [Simplified Chinese] https://space.bilibili.com/11591868/article true false false 81% null 我妻寒十 [Adventure, Indie]
[36] 292120 FINAL FANTASY® XIII Oct/2014 500000 - 1000000 13 15.99 0 [English, French, Italian, German, Spanish - Spain] http://www.square-enix.com/ true false false 74% 28h 58m Square Enix [RPG]
[37] 691930 MSI Electric City: Core Assault Sep/2017 50000 - 100000 0 0.00 0 [English] http://msi.com/to/e-city true false false 90% 32m HyperBot Studio [Action, Adventure, Casual, Free to Play, Indie]
[38] 325420 Homebrew - Patent Unknown Nov/2014 50000 - 100000 0 14.99 0 [English] http://www.homebrewgame.com true false false 76% 5h 48m Copybugpaste [Action, Indie, Racing, Simulation, Early Access]
[39] 663670 Killer Queen Black Oct/2019 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean] http://www.killerqueenblack.com true true false 93% 2h 11m Liquid Bit, LLC,BumbleBear Games, LLC [Action, Casual, Sports, Strategy]
[40] 503820 A Detective's Novel Jul/2016 500000 - 1000000 0 0.99 0 [English] http://amaterasusoftware.blogspot.hr/ true false false 68% 4h 24m Amaterasu Software [Adventure, Indie]
[41] 49600 Beat Hazard Apr/2010 500000 - 1000000 0 9.99 2 [English, French, German, Italian, Spanish - Spain, Dutch] http://www.coldbeamgames.com true true true 95% 7h 36m Cold Beam Games [Action, Casual, Indie]
[42] 49300 Commander: Conquest of the Americas Jul/2010 50000 - 100000 0 9.99 2 [English, French, German, Spanish - Spain] http://www.cota-game.com/ true false false 48% 11h 48m Nitro Games [Strategy]
[43] 1631930 The Insignia Project Jul/2021 50000 - 100000 0 1.99 0 [English] https://darkendstu.com/ true false false 75% null Dark End Studios [Indie, Early Access]
[44] 1038740 Fluffy Store Aug/2019 50000 - 100000 0 1.99 1 [English, Simplified Chinese, Traditional Chinese, Japanese] null true true false 97% 3h 9m AsicxArt [Adventure, Casual, Indie, RPG]
[45] 336760 Pilot Brothers Dec/2014 50000 - 100000 0 4.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Traditional Chinese, Portuguese] null true false false 87% null 1C Wireless [Adventure, Casual]
[46] 64000 Men of War: Assault Squad Feb/2011 500000 - 1000000 0 9.99 5 [English, Russian, Italian, Spanish - Spain, French, German, Polish] http://www.menofwargame.com/assault/ true false false 88% 10h 5m Digitalmindsoft [Strategy]
[47] 487580 Ludo Supremo Jun/2016 50000 - 100000 0 1.99 0 [English] http://www.ensenasoft.com true false false 57% 3h 19m EnsenaSoft [Casual]
[48] 410890 Higurashi When They Cry Hou - Ch.2 Watanagashi Nov/2015 50000 - 100000 0 3.99 0 [English, Japanese] http://www.mangagamer.org/07thExpansion/ true true true 97% 5h 11m 07th Expansion [Adventure]
[49] 363110 NOBUNAGA'S AMBITION: Tendou with Power Up Kit Jun/2015 50000 - 100000 0 54.99 0 [Japanese] http://www.gamecity.ne.jp/steam/tendo.html true false false 77% null KOEI TECMO GAMES CO., LTD. [Strategy]
[50] 1487390 ANVIL Dec/2021 50000 - 100000 0 24.99 0 [English, Korean, German, Russian, Japanese, Simplified ChiWnese, Traditional Chinese, French, Polish, Portuguese - Brazil, Spanish - Latin America, Italian, Thai, Vietnamese] https://www.anvil.world/ true false false 63% 9h 51m Action Square [Action, Early Access]
[51] 258520 The Vanishing of Ethan Carter Sep/2014 500000 - 1000000 0 19.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Czech] http://EthanCarterGame.com true false false 89% 3h 13m The Astronauts [Adventure, Indie]

View File

@ -0,0 +1,61 @@
(R) Coloring Book for Kids
(R) 'n Verlore Verstand
(R) SPORE™ Galactic Adventures
(R) Have a Nice Death
(R) Sopwith VR
(R) Burn Zombie Burn!
(R) Sonic Adventure 2
(R) Rhiannon: Curse of the Four Branches
(R) Synthesis Universe -Episode 00-
[0] 1189490 觅长生 Nov/2019 500000 - 1000000 0 11.99 0 [Simplified Chinese] null true false false 91% 33h 39m Chalcedony Network [Indie, RPG, Strategy, Early Access]
[1] 300550 Shadowrun: Dragonfall - Director's Cut Sep/2014 500000 - 1000000 0 14.99 0 [English] http://harebrained-schemes.com/shadowrun/dragonfall/ true true true 89% 15h 1m Harebrained Schemes [Adventure, Indie, RPG, Strategy]
[2] 49800 Flight of the Icarus May/2010 50000 - 100000 0 4.99 0 [English] http://musegames.com/games/flight-of-the-icarus/ true true false 39% 15m Muse Games [Action, Indie]
[3] 1851280 Samurai Bringer Apr/2022 50000 - 100000 0 9.99 0 [English, Japanese, Simplified Chinese, Traditional Chinese] https://playism.com/game/samurai-bringer/ true false false 88% 5h 2m ALPHAWING Inc. [Action, Indie]
[4] 1112930 Dredgers Oct/2019 50000 - 100000 0 11.99 0 [English, Simplified Chinese] null true false false 92% null Pirate-Rob [Indie, RPG]
[5] 275570 Summoner Mar/2014 50000 - 100000 0 4.99 0 [English, German] null true false false 83% 3h 24m Volition [Action, RPG]
[6] 1276550 Faefever Jul/2020 50000 - 100000 0 0.00 0 [English] null true false false 88% null Monkey Wizard Entertainment [Adventure, Casual, Free to Play, Indie]
[7] 1096530 Solasta: Crown of the Magister May/2021 500000 - 1000000 0 15.99 4 [English, French, German, Simplified Chinese, Portuguese - Brazil, Russian] https://www.solasta-game.com/ true true false 89% 37h 56m Tactical Adventures [Adventure, RPG, Strategy]
[8] 690510 Immortal Soul: Black Survival Mar/2019 500000 - 1000000 0 0.00 0 [English, Japanese, Korean, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Traditional Chinese, Thai, Portuguese, Portuguese - Brazil] null true false false 79% 28h 5m Nimble Neuron [Free to Play, Indie, Strategy]
[9] 1504570 Cultivation Tales Apr/2022 500000 - 1000000 0 19.99 0 [English, Simplified Chinese] null true false false 38% 27h 42m Ac Games [Action, Adventure, Indie, RPG, Strategy, Early Access]
[10] 1369470 Pincremental Aug/2020 50000 - 100000 0 0.00 0 [English] null true true false 80% null Makopaz [Casual, Free to Play, Indie, Simulation, Strategy]
[11] 270130 The Gallery - Episode 1: Call of the Starseed Apr/2016 50000 - 100000 0 14.99 1 [English] http://www.cloudheadgames.com true false false 84% 36m Cloudhead Games ltd. [Adventure, Casual, Indie]
[12] 336150 Virtual Pool 4 May/2015 50000 - 100000 0 24.99 0 [English] http://vponline.celeris.com true false false 83% null Celeris [Sports]
[13] 573210 Mistwood Heroes Dec/2016 50000 - 100000 0 3.99 0 [English] null true false false 56% 4h Meepower [Action, Adventure, Casual, Indie, RPG]
[14] 886470 Another Otter Jul/2018 50000 - 100000 0 0.99 0 [English] null true false false 63% null PepoLab [Casual, Indie]
[15] 1368820 RollerCoaster Tycoon® 3: Complete Edition Sep/2020 50000 - 100000 0 7.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Dutch, Finnish, Norwegian, Swedish] null true true false 83% 1h 15m Frontier Developments,Aspyr (Mac) [Simulation, Strategy]
[16] 951530 Alien Shooter - Last Hope Nov/2020 50000 - 100000 0 4.99 0 [English, Russian] http://www.sigma-team.net true false false 81% null Sigma Team Inc. [Action, Indie, RPG]
[17] 247370 Mutant Mudds Deluxe Nov/2013 50000 - 100000 0 9.99 0 [English] http://www.mutantmuddsdeluxe.com true false false 74% 3h 21m Renegade Kid [Action, Indie]
[18] 1879330 WARRIORS OROCHI 3 Ultimate Definitive Edition Jul/2022 50000 - 100000 0 39.99 0 [English, Simplified Chinese, Traditional Chinese, Japanese] https://www.gamecity.ne.jp/orochi2/ultimate/index.html true false false 88% null KOEI TECMO GAMES CO., LTD. [Action, Strategy]
[19] 1634290 Chuhou Joutai 2: Paraided! Jul/2021 50000 - 100000 0 4.99 0 [English, Japanese] https://drillimation.com/chuhou-joutai-2-paraided/ true false false 100% null Drillimation Systems [Action, Indie]
[20] 259570 EDEN STAR Jan/2015 50000 - 100000 0 19.99 0 [English] http://www.edenstargame.com true false false 61% 4h 31m Flix Interactive [Action, Adventure, Indie, Strategy, Early Access]
[21] 941650 The Island: Into The Mist Jan/2019 50000 - 100000 0 9.99 0 [Korean, English] https://imbada.itch.io/the-island true false false 69% 3h 14m SUPER WAVE Studio [Adventure, Indie]
[22] 768450 NUTS Feb/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Dutch, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese, Traditional Chinese] http://nuts.game true true false 88% null Joon, Pol, Muutsch, Char & Torfi [Adventure, Simulation]
[23] 1347140 NEAR DEADline Aug/2020 50000 - 100000 0 0.00 1 [English] https://www.newgrounds.com/portal/view/736443 true true true 90% null Dumb ****ing Horse [Action, Casual, Free to Play, Indie]
[24] 722670 Chinese Chess/ Elephant Game: 象棋/ 中国象棋/ 中國象棋 Oct/2017 50000 - 100000 0 9.99 0 [Simplified Chinese, Traditional Chinese, English, Russian] null true false false 78% 1h 45m Wang Wenxi [Indie, Simulation, Strategy, Early Access]
[25] 711540 Lonely Mountains: Downhill Oct/2019 50000 - 100000 0 9.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Japanese, Korean, Portuguese - Brazil, Polish, Turkish] http://lonelymountains.com true true false 92% 1h 15m Megagon Industries [Action, Indie, Racing, Simulation, Sports]
[26] 450170 BOOR Feb/2017 50000 - 100000 0 0.99 0 [English, Spanish - Spain, French, German] http://www.dazlog.com/boor true true true 83% 4h 30m DazlogStudio [Adventure, Casual, Indie]
[27] 730 Counter-Strike: Global Offensive Aug/2012 50000000 - 100000000 0 0.00 1 [Czech, Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Spain, Swedish, Thai, Traditional Chinese, Turkish, Bulgarian, Ukrainian, Greek, Spanish - Latin America, Vietnamese] http://blog.counter-strike.net/ true true true 88% 508h 4m Valve,Hidden Path Entertainment [Action, Free to Play]
[28] 598550 HUNTDOWN May/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Japanese, Simplified Chinese] http://huntdown.com/ true true true 95% 11h 26m Easy Trigger Games [Action, Indie]
[29] 614090 Deadbeat Heroes Oct/2017 50000 - 100000 0 14.99 0 [English] https://www.upstreamarcade.com/deadbeat-heroes/ true false false 66% 4h 36m Deadbeat Productions [Action]
[30] 809440 Protolife Jun/2018 50000 - 100000 0 11.99 0 [English, Russian] null true true false 87% 15m Volcanic Giraffe [Indie, Strategy]
[31] 1923860 Neon Outlast Mar/2022 50000 - 100000 0 4.99 0 [English] null true false false 0% null Keep Spinning [Action, Indie]
[32] 559010 Cosmic Sugar VR Nov/2016 50000 - 100000 0 0.00 1 [English] http://cosmicsugarvr.com true false false 95% 5m David Lobser [Free to Play, Simulation]
[33] 1547380 KINGDOM of the DEAD Feb/2022 50000 - 100000 0 14.99 0 [English, French, Italian, German, Spanish - Spain, Simplified Chinese, Traditional Chinese, Korean, Japanese, Polish, Portuguese - Brazil, Russian] null true false false 83% null DIRIGO GAMES [Action, Adventure, Indie]
[34] 554310 Rage Wars Nov/2016 50000 - 100000 0 0.99 0 [English] http://www.lemondo.com/ true true true 89% 4h 24m Lemondo Games [Violent, Gore, Adventure, Casual, Indie]
[35] 1124090 告死天使之言-Death angel Aug/2019 50000 - 100000 0 0.99 1 [Simplified Chinese] https://space.bilibili.com/11591868/article true false false 81% null 我妻寒十 [Adventure, Indie]
[36] 292120 FINAL FANTASY® XIII Oct/2014 500000 - 1000000 13 15.99 0 [English, French, Italian, German, Spanish - Spain] http://www.square-enix.com/ true false false 74% 28h 58m Square Enix [RPG]
[37] 691930 MSI Electric City: Core Assault Sep/2017 50000 - 100000 0 0.00 0 [English] http://msi.com/to/e-city true false false 90% 32m HyperBot Studio [Action, Adventure, Casual, Free to Play, Indie]
[38] 325420 Homebrew - Patent Unknown Nov/2014 50000 - 100000 0 14.99 0 [English] http://www.homebrewgame.com true false false 76% 5h 48m Copybugpaste [Action, Indie, Racing, Simulation, Early Access]
[39] 663670 Killer Queen Black Oct/2019 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean] http://www.killerqueenblack.com true true false 93% 2h 11m Liquid Bit, LLC,BumbleBear Games, LLC [Action, Casual, Sports, Strategy]
[40] 503820 A Detective's Novel Jul/2016 500000 - 1000000 0 0.99 0 [English] http://amaterasusoftware.blogspot.hr/ true false false 68% 4h 24m Amaterasu Software [Adventure, Indie]
[41] 49600 Beat Hazard Apr/2010 500000 - 1000000 0 9.99 2 [English, French, German, Italian, Spanish - Spain, Dutch] http://www.coldbeamgames.com true true true 95% 7h 36m Cold Beam Games [Action, Casual, Indie]
[42] 49300 Commander: Conquest of the Americas Jul/2010 50000 - 100000 0 9.99 2 [English, French, German, Spanish - Spain] http://www.cota-game.com/ true false false 48% 11h 48m Nitro Games [Strategy]
[43] 1631930 The Insignia Project Jul/2021 50000 - 100000 0 1.99 0 [English] https://darkendstu.com/ true false false 75% null Dark End Studios [Indie, Early Access]
[44] 1038740 Fluffy Store Aug/2019 50000 - 100000 0 1.99 1 [English, Simplified Chinese, Traditional Chinese, Japanese] null true true false 97% 3h 9m AsicxArt [Adventure, Casual, Indie, RPG]
[45] 336760 Pilot Brothers Dec/2014 50000 - 100000 0 4.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Traditional Chinese, Portuguese] null true false false 87% null 1C Wireless [Adventure, Casual]
[46] 64000 Men of War: Assault Squad Feb/2011 500000 - 1000000 0 9.99 5 [English, Russian, Italian, Spanish - Spain, French, German, Polish] http://www.menofwargame.com/assault/ true false false 88% 10h 5m Digitalmindsoft [Strategy]
[47] 487580 Ludo Supremo Jun/2016 50000 - 100000 0 1.99 0 [English] http://www.ensenasoft.com true false false 57% 3h 19m EnsenaSoft [Casual]
[48] 410890 Higurashi When They Cry Hou - Ch.2 Watanagashi Nov/2015 50000 - 100000 0 3.99 0 [English, Japanese] http://www.mangagamer.org/07thExpansion/ true true true 97% 5h 11m 07th Expansion [Adventure]
[49] 363110 NOBUNAGA'S AMBITION: Tendou with Power Up Kit Jun/2015 50000 - 100000 0 54.99 0 [Japanese] http://www.gamecity.ne.jp/steam/tendo.html true false false 77% null KOEI TECMO GAMES CO., LTD. [Strategy]
[50] 1487390 ANVIL Dec/2021 50000 - 100000 0 24.99 0 [English, Korean, German, Russian, Japanese, Simplified Chinese, Traditional Chinese, French, Polish, Portuguese - Brazil, Spanish - Latin America, Italian, Thai, Vietnamese] https://www.anvil.world/ true false false 63% 9h 51m Action Square [Action, Early Access]
[51] 258520 The Vanishing of Ethan Carter Sep/2014 500000 - 1000000 0 19.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Czech] http://EthanCarterGame.com true false false 89% 3h 13m The Astronauts [Adventure, Indie]

View File

@ -0,0 +1,714 @@
/**
* @file Game.java
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// ----------------------------------------------------------------------------------------------------------------- //
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;
// ----------------------------------------------------------------------------------------------------------------- //
class GameQueue {
private Game[] array;
private int first;
private int last;
public GameQueue() {}
public GameQueue(int size) {
array = new Game[size + 1];
first = last = 0;
}
public void insert(Game movie) throws Exception {
if(((last + 1) % array.length) == first) throw new Exception("x Insert error: Full queue");
array[last] = movie;
last = (last + 1) % array.length;
}
public Game remove() throws Exception {
if(first == last) throw new Exception("x Remove error: Empty queue");
Game resp = array[first];
first = (first + 1) % array.length;
return resp;
}
public void print() {
int c = 0;
for(int i = first; i != last; i = ((i + 1) % array.length), c++) {
System.out.print("[" + ((last - first) == 1 ? "0" : c) + "] ");
array[i].print();
}
}
public int length() { return last - first; }
}
// ----------------------------------------------------------------------------------------------------------------- //
class Game {
static SimpleDateFormat default_dateFormat = new SimpleDateFormat("MMM/yyyy", Locale.ENGLISH);
private String name, owners, website, developers;
private ArrayList<String> languages, genres;
private Date release_date;
private int app_id, age, dlcs, avg_playtime;
private float price, upvotes;
private boolean windows, mac, linux;
public Game() {
this.name = this.owners = this.website = this.developers = null;
this.languages = new ArrayList<String>();
this.genres = new ArrayList<String>();
this.release_date = null;
this.app_id = this.age = this.dlcs = this.avg_playtime = -1;
this.price = this.upvotes = -1;
this.windows = this.mac = this.linux = false;
}
public Game(String name, String owners, String website, String developers, ArrayList<String> languages, ArrayList<String> genres, Date release_date, int app_id, int age, int dlcs, int upvotes, int avg_playtime, float price, boolean windows, boolean mac, boolean linux) {
this.name = name;
this.owners = owners;
this.website = website;
this.developers = developers;
this.languages = languages;
this.genres = genres;
this.release_date = release_date;
this.app_id = app_id;
this.age = age;
this.dlcs = dlcs;
this.upvotes = upvotes;
this.avg_playtime = avg_playtime;
this.price = price;
this.windows = windows;
this.mac = mac;
this.linux = linux;
}
public void setName(String name) { this.name = name; }
public void setOwners(String owners) { this.owners = owners; }
public void setWebsite(String website) { this.website = website; }
public void setDevelopers(String developers) { this.developers = developers; }
public void setLanguages(ArrayList<String> languages) { this.languages = languages; }
public void setGenres(ArrayList<String> genres) { this.genres = genres; }
public void setReleaseDate(Date release_date) { this.release_date = release_date; }
public void setAppId(int app_id) { this.app_id = app_id; }
public void setAge(int age) { this.age = age; }
public void setDlcs(int dlcs) { this.dlcs = dlcs; }
public void setAvgPlaytime(int avg_playtime) { this.avg_playtime = avg_playtime; }
public void setPrice(float price) { this.price = price; }
public void setUpvotes(float upvotes) { this.upvotes = upvotes; }
public void setWindows(boolean windows) { this.windows = windows; }
public void setMac(boolean mac) { this.mac = mac; }
public void setLinux(boolean linux) { this.linux = linux; }
public String getName() { return this.name; }
public String getOwners() { return this.owners; }
public String getWebsite() { return this.website; }
public String getDevelopers() { return this.developers; }
public ArrayList<String> getLanguages() { return this.languages; }
public ArrayList<String> getGenres() { return this.genres; }
public Date getReleaseDate() { return this.release_date; }
public int getAppId() { return this.app_id; }
public int getAge() { return this.age; }
public int getDlcs() { return this.dlcs; }
public int getAvgPlaytime() { return this.avg_playtime; }
public float getPrice() { return this.price; }
public float getUpvotes() { return this.upvotes; }
public boolean getWindows() { return this.windows; }
public boolean getMac() { return this.mac; }
public boolean getLinux() { return this.linux; }
public Game clone() {
Game cloned = new Game();
cloned.name = this.name;
cloned.owners = this.owners;
cloned.website = this.website;
cloned.developers = this.developers;
cloned.languages = this.languages;
cloned.genres = this.genres;
cloned.release_date = this.release_date;
cloned.app_id = this.app_id;
cloned.age = this.age;
cloned.dlcs = this.dlcs;
cloned.avg_playtime = this.avg_playtime;
cloned.price = this.price;
cloned.upvotes = this.upvotes;
cloned.windows = this.windows;
cloned.mac = this.mac;
cloned.linux = this.linux;
return cloned;
}
public static Game gameSearch(ArrayList<Game> games, int app_id) {
for(Game game : games) if(game.getAppId() == app_id) return game;
return null;
}
public void read(String line) {
char c_search;
int index = 0, atr_index = 0;
// ---------------------------------- //
// Find "AppID"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.app_id = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Name"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.name = line.substring(atr_index, index);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find release date
if(line.charAt(atr_index) != ',') {
SimpleDateFormat df;
if(line.charAt(atr_index) == '\"') {
df = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
atr_index++;
c_search = '\"';
}
else {
df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
c_search = ',';
}
while(true) {
index++;
if(line.charAt(index) == c_search) {
try { this.release_date = df.parse(line.substring(atr_index, index)); }
catch (java.text.ParseException e) { e.printStackTrace(); }
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Owners"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.owners = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Age"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.age = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Price"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.price = Float.parseFloat(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "DLCs"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.dlcs = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Languages"
while(true) {
index++;
if(line.charAt(index) == ']') {
index++;
if(line.charAt(index) == ',') index++;
else if(line.charAt(index) == '\"') index += 2;
atr_index = index;
break;
}
else if(line.charAt(index) == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line.charAt(index) == '\'') {
this.languages.add(line.substring(wordStart, index));
break;
}
}
}
}
// ---------------------------------- //
// Find "Website"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.website = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Windows"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.windows = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.mac = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.linux = Boolean.parseBoolean(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line.charAt(index) == ',') {
positives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line.charAt(index) == ',') {
negatives = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
this.upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ---------------------------------- //
// Find "AVG Playtime"
while(true) {
index++;
if(line.charAt(index) == ',') {
this.avg_playtime = Integer.parseInt(line.substring(atr_index, index));
atr_index = ++index;
break;
}
}
// ---------------------------------- //
// Find "Developers"
if(line.charAt(atr_index) != ',') {
if(line.charAt(atr_index) == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line.charAt(index) == c_search) {
this.developers = line.substring(atr_index, index);
atr_index = ++index;
break;
}
}
}
else atr_index = ++index;
// ---------------------------------- //
// Find "Genres"
if(index < line.length() - 1) {
if(line.charAt(index) == ',') atr_index = ++index;
if(line.charAt(atr_index) == '\"') {
atr_index++;
while(true) {
index++;
if(line.charAt(index) == ',') {
this.genres.add(line.substring(atr_index, index));
atr_index = ++index;
}
else if(line.charAt(index) == '\"') {
this.genres.add(line.substring(atr_index, line.length() - 1));
break;
}
}
}
else this.genres.add(line.substring(atr_index, line.length()));
}
// -------------------------------------------------------------------------------- //
}
public void print() {
String avg_pt = null;
if(this.avg_playtime == 0) avg_pt = "null ";
else if(this.avg_playtime < 60) avg_pt = this.avg_playtime + "m ";
else {
if(this.avg_playtime % 60 == 0) avg_pt = this.avg_playtime / 60 + "h ";
else avg_pt = (this.avg_playtime / 60) + "h " + (this.avg_playtime % 60) + "m ";
}
DecimalFormat df = new DecimalFormat("##");
System.out.println(this.app_id + " " + this.name + " " + default_dateFormat.format(this.release_date) + " " + this.owners + " " + this.age + " " + String.format(Locale.ENGLISH, "%.2f", this.price) + " " + this.dlcs + " " + this.languages + " " + this.website + " " + this.windows + " " + this.mac + " " + this.linux + " " + (Float.isNaN(this.upvotes) ? "0% " : df.format(this.upvotes) + "% ") + avg_pt + this.developers + " " + this.genres);
}
// -------------------------------------------------------------------------------- //
public static String getGameData(String csvFile, int app_id) throws Exception {
try {
// Read CSV file
FileInputStream fstream = new FileInputStream(csvFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
String line;
while((line = br.readLine()) != null) {
String id_s = Integer.toString(app_id);
if(line.substring(0, line.indexOf(',')).equals(id_s)) {
fstream.close();
br.close();
return line;
}
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
return null;
}
// -------------------------------------------------------------------------------------- //
public static void main(String[] args) throws Exception {
Scanner scr = new Scanner(System.in);
ArrayList<Game> gamesFull = new ArrayList<Game>();
String line;
// ------------------------------------------------------------------------------ //
// Fill full games list
try {
// Read CSV file
FileInputStream fstream = new FileInputStream("/tmp/games.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
// ------------------------------------ //
// Start to explode CSV file
while((line = br.readLine()) != null) {
Game game = new Game();
game.read(line);
gamesFull.add(game);
}
// Close CSV file
fstream.close();
}
catch(IOException e) { e.printStackTrace(); }
// ---------------------------------------------------------------------------------------------- //
// Fill production games list
GameQueue games = new GameQueue(5);
float total_avgPt = 0, c = 0;
line = scr.nextLine();
while(true) {
if(line.compareTo("FIM") == 0) break;
// ------------------------------------ //
Game found = gameSearch(gamesFull, Integer.parseInt(line));
if(found != null) {
try { games.insert(found); }
catch(java.lang.Exception e) {
total_avgPt -= games.remove().getAvgPlaytime();
c--;
games.insert(found);
}
// Print playtime avg
total_avgPt += found.getAvgPlaytime();
System.out.println(Math.round(total_avgPt / ++c));
}
// ------------------------------------ //
line = scr.nextLine();
}
// ---------------------------------------------------------------------------------------------- //
// Execute operations
int n_ops = Integer.parseInt(scr.nextLine());
for(int x = 0; x < n_ops; x++) {
line = scr.nextLine();
// -------------------------------- //
System.out.println(line);
// Identify operation
if(line.charAt(0) == 'I') {
Game found = gameSearch(gamesFull, Integer.parseInt(line.substring(2, line.length())));
try { games.insert(found); }
catch(java.lang.Exception e) {
total_avgPt -= games.remove().getAvgPlaytime();
c--;
games.insert(found);
}
// Print playtime avg
total_avgPt += found.getAvgPlaytime();
System.out.println(Math.round(total_avgPt / ++c));
}
else if(line.charAt(0) == 'R') System.out.println("(R) " + games.remove().getName());
}
games.print();
// ---------------------------------------------------------------------------------------------- //
scr.close();
}
// ------------------------------------------------------------------------------ //
}

View File

@ -0,0 +1,67 @@
1189490
300550
49800
1851280
1112930
275570
1276550
1096530
690510
1504570
1369470
270130
336150
573210
886470
1368820
951530
247370
1879330
1634290
259570
941650
768450
1347140
722670
711540
450170
730
598550
614090
809440
1923860
559010
1547380
554310
1124090
292120
691930
325420
663670
503820
49600
49300
1631930
1038740
336760
64000
487580
410890
363110
FIM
15
I 1487390
I 258520
I 1165270
I 298140
I 213610
I 50510
I 998660
I 1740720
I 24720
I 439550
I 1507410
R
R
R
R

View File

@ -0,0 +1,81 @@
2019
1460
978
809
647
284
104
556
833
1165
1125
1132
677
388
55
70
63
103
55
55
94
133
93
93
114
75
90
6187
6324
6358
6346
6292
196
59
57
54
401
407
476
450
503
246
381
312
323
271
300
199
261
223
I 1487390
341
I 258520
259
I 1165270
219
I 298140
160
I 213610
272
I 50510
158
I 998660
120
I 1740720
188
I 24720
371
I 439550
287
I 1507410
282
R
(R) Sopwith VR
R
(R) Have a Nice Death
R
(R) SPORE™ Galactic Adventures
R
(R) 'n Verlore Verstand
[0] 1507410 Coloring Book for Kids Mar/2021 50000 - 100000 0 0.00 1 [English, French, Italian, German, Arabic, Czech, Danish, Dutch, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Latin America, Swedish, Thai, Turkish, Vietnamese] null true true false 89% null Peaksel [Casual, Free to Play, Indie]

View File

@ -0,0 +1,81 @@
2019
1460
978
809
647
284
104
556
833
1165
1125
1132
677
388
55
70
63
103
55
55
94
133
93
93
114
75
90
6187
6324
6358
6346
6292
196
59
57
54
401
407
476
450
503
246
381
312
323
271
300
199
261
223
I 1487390
341
I 258520
259
I 1165270
219
I 298140
160
I 213610
272
I 50510
158
I 998660
120
I 1740720
188
I 24720
371
I 439550
287
I 1507410
282
R
(R) Sopwith VR
R
(R) Have a Nice Death
R
(R) SPORE™ Galactic Adventures
R
(R) 'n Verlore Verstand
[0] 1507410 Coloring Book for Kids Mar/2021 50000 - 100000 0 0.00 1 [English, French, Italian, German, Arabic, Czech, Danish, Dutch, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Latin America, Swedish, Thai, Turkish, Vietnamese] null true true false 89% null Peaksel [Casual, Free to Play, Indie]

View File

@ -0,0 +1,869 @@
/**
* @file Linux_Game.c
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// -------------------------------------------------------------------------------- //
// Includes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
// -------------------------------------------------------------------------------- //
// Definitions
#define MAX_GAMES 500
#define MAX_FIELD_SIZE 250
#define MAX_STRING_ARRAY_SIZE 100
// -------------------------------------------------------------------------------- //
// Structs
typedef struct {
int year,
month;
} Date;
typedef struct {
char name[MAX_FIELD_SIZE],
owners[MAX_FIELD_SIZE],
website[MAX_FIELD_SIZE],
developers[MAX_FIELD_SIZE],
languages[MAX_STRING_ARRAY_SIZE][30],
genres[MAX_STRING_ARRAY_SIZE][30];
Date release_date;
int app_id, age, dlcs, avg_playtime, count_languages, count_genres;
float price, upvotes;
bool windows_os, mac_os, linux_os;
} Game;
// -------------------------------------------------------------------------------- //
// Global variables
Game games[MAX_GAMES];
int n = 0;
Game gamesFull[5000];
int x = 0;
// -------------------------------------------------------------------------------- //
// Functions
bool isFim(char* s) { return s[0] == 'F' && s[1] == 'I' && s[2] == 'M'; }
void substring(char *string, char *string_start, int length) {
strncpy(string, string_start, length);
string[length] = '\0';
}
char *getMonthName(int month) {
switch(month) {
case 1: return "Jan"; break;
case 2: return "Feb"; break;
case 3: return "Mar"; break;
case 4: return "Apr"; break;
case 5: return "May"; break;
case 6: return "Jun"; break;
case 7: return "Jul"; break;
case 8: return "Aug"; break;
case 9: return "Sep"; break;
case 10: return "Oct"; break;
case 11: return "Nov"; break;
case 12: return "Dec"; break;
default: return "N/A"; break;
}
}
int getMonthNumber(char* month) {
if(!strcmp(month, "Jan")) return 1;
else if(!strcmp(month, "Feb")) return 2;
else if(!strcmp(month, "Mar")) return 3;
else if(!strcmp(month, "Apr")) return 4;
else if(!strcmp(month, "May")) return 5;
else if(!strcmp(month, "Jun")) return 6;
else if(!strcmp(month, "Jul")) return 7;
else if(!strcmp(month, "Aug")) return 8;
else if(!strcmp(month, "Sep")) return 9;
else if(!strcmp(month, "Oct")) return 10;
else if(!strcmp(month, "Nov")) return 11;
else if(!strcmp(month, "Dec")) return 12;
}
// -------------------------------------------------------------------------------- //
// Class game functions
void game_start(Game *game) {
strcpy(game -> name, "");
strcpy(game -> owners, "");
strcpy(game -> website, "");
strcpy(game -> developers, "");
for(int i = 0; i < MAX_STRING_ARRAY_SIZE; i++) {
strcpy(game -> languages[i], "");
strcpy(game -> genres[i], "");
}
game -> release_date.month = -1;
game -> release_date.year = -1;
game -> app_id = -1;
game -> age = -1;
game -> dlcs = -1;
game -> avg_playtime = -1;
game -> price = -1;
game -> upvotes = -1;
game -> windows_os = false;
game -> mac_os = false;
game -> linux_os = false;
game -> count_languages = 0;
game -> count_genres = 0;
}
void game_print(Game *game) {
int hours = game -> avg_playtime / 60,
minutes = game -> avg_playtime % 60;
printf("%i %s %s/%04i %s %i %.2f %i [", game -> app_id, game -> name, getMonthName(game -> release_date.month), game -> release_date.year, game -> owners, game -> age, game -> price, game -> dlcs);
for(int i = 0; i < game -> count_languages; i++) {
printf("%s%s", game -> languages[i], i < game -> count_languages - 1 ? ", " : "");
}
printf("] %s %s %s %s ", game -> website, game -> windows_os ? "true" : "false", game -> mac_os ? "true" : "false", game -> linux_os ? "true" : "false");
if(isnan(game -> upvotes)) printf("0.0%% ");
else printf("%.0f%% ", game -> upvotes);
if(hours > 0)
{
printf("%ih ", hours);
if(minutes > 0) printf("%im ", minutes);
}
else {
if(minutes > 0) printf("%im ", minutes);
else printf("null ");
}
printf("%s [", game -> developers);
for(int i = 0; i < game -> count_genres; i++) {
printf("%s%s", game -> genres[i], i < game -> count_genres - 1 ? ", " : "");
}
printf("]\n");
}
Game game_clone(Game *game) {
Game cloned;
strcpy(cloned.name, game -> name);
strcpy(cloned.owners, game -> owners);
strcpy(cloned.website, game -> website);
strcpy(cloned.developers, game -> developers);
for(int i = 0; i < game -> count_languages; i++) strcpy(cloned.languages[i], game -> languages[i]);
for(int i = 0; i < game -> count_genres; i++) strcpy(cloned.genres[i], game -> genres[i]);
cloned.release_date.month = game -> release_date.month;
cloned.release_date.year = game -> release_date.year;
cloned.app_id = game -> app_id;
cloned.age = game -> age;
cloned.dlcs = game -> dlcs;
cloned.avg_playtime = game -> avg_playtime;
cloned.price = game -> price;
cloned.upvotes = game -> upvotes;
cloned.windows_os = game -> windows_os;
cloned.mac_os = game -> mac_os;
cloned.linux_os = game -> linux_os;
return cloned;
}
void game_read(Game *game, char *line) {
char c_search, sub[MAX_FIELD_SIZE];
int index = 0, atr_index = 0;
// ------------------------------------------------------------ //
// Find "AppID"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> app_id = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Name"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> name, sub);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else {
strcpy(game -> name, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find release date
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
char subDate[10];
substring(subDate, &sub[0], 3);
game -> release_date.month = getMonthNumber(subDate);
if(c_search == ',') {
substring(subDate, &sub[4], 4);
game -> release_date.year = atoi(subDate);
index++;
}
else if(c_search == '\"') {
int nmbSpace = 0;
for(int i = 0; ; i++) {
if(sub[i] == ' ') nmbSpace++;
if(nmbSpace == 2) {
i++;
substring(subDate, &sub[i], 4);
game -> release_date.year = atoi(subDate);
break;
}
}
index += 2;
}
atr_index = index;
break;
}
}
}
else {
game -> release_date.month = 0;
game -> release_date.year = 0;
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Owners"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> owners, sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Age"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> age = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Price"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> price = atof(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "DLCs"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> dlcs = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Languages"
while(true) {
index++;
if(line[index] == ']') {
index++;
if(line[index] == ',') index++;
else if(line[index] == '\"') index += 2;
atr_index = index;
break;
}
else if(line[index] == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line[index] == '\'') {
substring(sub, &line[wordStart], index - wordStart);
strcpy(game -> languages[game -> count_languages++], sub);
break;
}
}
}
}
// ------------------------------------------------------------ //
// Find "Website"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> website, sub);
atr_index = ++index;
break;
}
}
}
else {
strcpy(game -> website, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Windows"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> windows_os = true;
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> mac_os = true;
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> linux_os = true;
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
positives = atoi(sub);
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
negatives = atoi(sub);
atr_index = ++index;
break;
}
}
game -> upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ------------------------------------------------------------ //
// Find "AVG Playtime"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> avg_playtime = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Developers"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> developers, sub);
atr_index = ++index;
break;
}
}
}
else {
strcpy(game -> developers, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Genres"
if(index < strlen(line) - 1) {
if(line[index] == ',') atr_index = ++index;
if(line[atr_index] == '\"') {
atr_index++;
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> genres[game -> count_genres++], sub);
atr_index = ++index;
}
else if(line[index] == '\"') {
substring(sub, &line[atr_index], strlen(line) - 1 - atr_index);
if(sub[strlen(sub) - 2] == '\"') sub[strlen(sub) - 2] = '\0';
strcpy(game -> genres[game -> count_genres++], sub);
break;
}
}
}
else {
substring(sub, &line[atr_index], strlen(line) - 1 - atr_index);
sub[strlen(line) - 2 - atr_index] = '\0';
strcpy(game -> genres[game -> count_genres++], sub);
}
}
}
// -------------------------------------------------------------------------------- //
// Functions - List
void list_insertBegin(Game x) {
if(n >= MAX_GAMES) {
printf("Insert error: MAX_GAMES reached");
exit(1);
}
for(int i = n; i > 0; i--) games[i] = games[i - 1];
games[0] = x;
n++;
}
void list_insertEnd(Game x) {
if(n >= MAX_GAMES) {
printf("Insert error: MAX_GAMES reached");
exit(1);
}
games[n++] = x;
}
void list_insert(Game x, int pos) {
if(n >= MAX_GAMES || (pos < 0 || pos > n)) {
printf("Insert error: %s", n >= MAX_GAMES ? "MAX_GAMES reached" : "Invalid position");
exit(1);
}
for(int i = n; i > pos; i--) games[i] = games[i-1];
games[pos] = x;
n++;
}
Game list_removeBegin() {
Game resp;
if(n == 0) {
printf("Remove error: Empty list");
exit(1);
}
resp = games[0];
n--;
for(int i = 0; i < n; i++) games[i] = games[i + 1];
return resp;
}
Game list_removeEnd() {
if(n == 0) {
printf("Remove error: Empty list");
exit(1);
}
return games[--n];
}
Game list_remove(int pos) {
Game resp;
if(n >= MAX_GAMES || (pos < 0 || pos > n)) {
printf("Insert error: %s!", n == 0 ? "Empty list" : "Invalid position");
exit(1);
}
resp = games[pos];
n--;
for(int i = pos; i < n; i++) games[i] = games[i+1];
return resp;
}
void list_print() {
for(int i = 0; i < n; i++) {
printf("[%i] ", i);
game_print(&games[i]);
}
}
Game game_search(int app_id) {
for(int i = 0; i < x; i++) {
if(gamesFull[i].app_id == app_id) return gamesFull[i];
}
Game game;
game.app_id = -1;
return game;
}
// ---------------------------------------------------------------------------------------------------------- //
int main() {
// ---------------------------------------------------------------------------------------- //
// Fill full games list
FILE *fp;
char *line = NULL;
size_t len = 0;
size_t read;
fp = fopen("/tmp/games.csv", "r");
if(fp == NULL) exit(EXIT_FAILURE);
// -------------------------------------- //
while((read = getline(&line, &len, fp)) != -1) {
Game game;
game_start(&game);
game_read(&game, line);
gamesFull[x++] = game;
}
fclose(fp);
if(line) free(line);
// ---------------------------------------------------------------------------------------- //
char line_in[100];
// Fill production games list
scanf(" %[^\n]", line_in);
while(true) {
if(isFim(line_in)) break;
// -------------------------- //
int app_id = atoi(line_in);
Game found = game_search(app_id);
if(found.app_id != -1) list_insertEnd(found);
// -------------------------- //
scanf(" %[^\n]", line_in);
}
// ---------------------------------------------------------------------------------------- //
// Execute operations
int n_ops;
scanf("%i", &n_ops);
for(int i = 0; i < n_ops; i++) {
scanf(" %[^\n]", line_in);
Game game;
char params[10];
if(line_in[0] == 'I') {
substring(params, &line_in[3], strlen(line_in) - 3);
if(line_in[1] == 'I') list_insertBegin(game_search(atoi(params)));
else if(line_in[1] == 'F') list_insertEnd(game_search(atoi(params)));
else if(line_in[1] == '*') {
char appId[10], pos[10];
int i = 0;
while(true) {
if(params[i] == ' ') {
substring(pos, &params[0], i);
substring(appId, &params[i + 1], strlen(params) - i - 1);
break;
}
else i++;
}
list_insert(game_search(atoi(appId)), atoi(pos));
}
}
else if(line_in[0] == 'R') {
if(line_in[1] == 'I') printf("(R) %s\n", list_removeBegin().name);
else if(line_in[1] == 'F') printf("(R) %s\n", list_removeEnd().name);
else if(line_in[1] == '*') {
substring(params, &line_in[3], strlen(line_in) - 3);
printf("(R) %s\n", list_remove(atoi(params)).name);
}
}
}
list_print();
return EXIT_SUCCESS;
}

View File

@ -0,0 +1,868 @@
/**
* @file WSL_Game.c
* @author Pedro Lopes
* @version 1.0
* @date 2022-10-17
* @copyright Copyright (c) 2022
**/
// -------------------------------------------------------------------------------- //
// Includes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
// -------------------------------------------------------------------------------- //
// Definitions
#define MAX_GAMES 500
#define MAX_FIELD_SIZE 250
#define MAX_STRING_ARRAY_SIZE 100
// -------------------------------------------------------------------------------- //
// Structs
typedef struct {
int year,
month;
} Date;
typedef struct {
char name[MAX_FIELD_SIZE],
owners[MAX_FIELD_SIZE],
website[MAX_FIELD_SIZE],
developers[MAX_FIELD_SIZE],
languages[MAX_STRING_ARRAY_SIZE][30],
genres[MAX_STRING_ARRAY_SIZE][30];
Date release_date;
int app_id, age, dlcs, avg_playtime, count_languages, count_genres;
float price, upvotes;
bool windows_os, mac_os, linux_os;
} Game;
// -------------------------------------------------------------------------------- //
// Global variables
Game games[MAX_GAMES];
int n = 0;
Game gamesFull[5000];
int x = 0;
// -------------------------------------------------------------------------------- //
// Functions
bool isFim(char* s) { return s[0] == 'F' && s[1] == 'I' && s[2] == 'M'; }
void substring(char *string, char *string_start, int length) {
strncpy(string, string_start, length);
string[length] = '\0';
}
char *getMonthName(int month) {
switch(month) {
case 1: return "Jan"; break;
case 2: return "Feb"; break;
case 3: return "Mar"; break;
case 4: return "Apr"; break;
case 5: return "May"; break;
case 6: return "Jun"; break;
case 7: return "Jul"; break;
case 8: return "Aug"; break;
case 9: return "Sep"; break;
case 10: return "Oct"; break;
case 11: return "Nov"; break;
case 12: return "Dec"; break;
default: return "N/A"; break;
}
}
int getMonthNumber(char* month) {
if(!strcmp(month, "Jan")) return 1;
else if(!strcmp(month, "Feb")) return 2;
else if(!strcmp(month, "Mar")) return 3;
else if(!strcmp(month, "Apr")) return 4;
else if(!strcmp(month, "May")) return 5;
else if(!strcmp(month, "Jun")) return 6;
else if(!strcmp(month, "Jul")) return 7;
else if(!strcmp(month, "Aug")) return 8;
else if(!strcmp(month, "Sep")) return 9;
else if(!strcmp(month, "Oct")) return 10;
else if(!strcmp(month, "Nov")) return 11;
else if(!strcmp(month, "Dec")) return 12;
}
// -------------------------------------------------------------------------------- //
// Class game functions
void game_start(Game *game) {
strcpy(game -> name, "");
strcpy(game -> owners, "");
strcpy(game -> website, "");
strcpy(game -> developers, "");
for(int i = 0; i < MAX_STRING_ARRAY_SIZE; i++) {
strcpy(game -> languages[i], "");
strcpy(game -> genres[i], "");
}
game -> release_date.month = -1;
game -> release_date.year = -1;
game -> app_id = -1;
game -> age = -1;
game -> dlcs = -1;
game -> avg_playtime = -1;
game -> price = -1;
game -> upvotes = -1;
game -> windows_os = false;
game -> mac_os = false;
game -> linux_os = false;
game -> count_languages = 0;
game -> count_genres = 0;
}
void game_print(Game *game) {
int hours = game -> avg_playtime / 60,
minutes = game -> avg_playtime % 60;
printf("%i %s %s/%04i %s %i %.2f %i [", game -> app_id, game -> name, getMonthName(game -> release_date.month), game -> release_date.year, game -> owners, game -> age, game -> price, game -> dlcs);
for(int i = 0; i < game -> count_languages; i++) {
printf("%s%s", game -> languages[i], i < game -> count_languages - 1 ? ", " : "");
}
printf("] %s %s %s %s ", game -> website, game -> windows_os ? "true" : "false", game -> mac_os ? "true" : "false", game -> linux_os ? "true" : "false");
if(isnan(game -> upvotes)) printf("0.0%% ");
else printf("%.0f%% ", game -> upvotes);
if(hours > 0)
{
printf("%ih ", hours);
if(minutes > 0) printf("%im ", minutes);
}
else {
if(minutes > 0) printf("%im ", minutes);
else printf("null ");
}
printf("%s [", game -> developers);
for(int i = 0; i < game -> count_genres; i++) {
printf("%s%s", game -> genres[i], i < game -> count_genres - 1 ? ", " : "");
}
printf("]\n");
}
Game game_clone(Game *game) {
Game cloned;
strcpy(cloned.name, game -> name);
strcpy(cloned.owners, game -> owners);
strcpy(cloned.website, game -> website);
strcpy(cloned.developers, game -> developers);
for(int i = 0; i < game -> count_languages; i++) strcpy(cloned.languages[i], game -> languages[i]);
for(int i = 0; i < game -> count_genres; i++) strcpy(cloned.genres[i], game -> genres[i]);
cloned.release_date.month = game -> release_date.month;
cloned.release_date.year = game -> release_date.year;
cloned.app_id = game -> app_id;
cloned.age = game -> age;
cloned.dlcs = game -> dlcs;
cloned.avg_playtime = game -> avg_playtime;
cloned.price = game -> price;
cloned.upvotes = game -> upvotes;
cloned.windows_os = game -> windows_os;
cloned.mac_os = game -> mac_os;
cloned.linux_os = game -> linux_os;
return cloned;
}
void game_read(Game *game, char *line) {
char c_search, sub[MAX_FIELD_SIZE];
int index = 0, atr_index = 0;
// ------------------------------------------------------------ //
// Find "AppID"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> app_id = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Name"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> name, sub);
if(c_search == ',') index++;
else if(c_search == '\"') index += 2;
atr_index = index;
break;
}
}
}
else {
strcpy(game -> name, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find release date
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
char subDate[10];
substring(subDate, &sub[0], 3);
game -> release_date.month = getMonthNumber(subDate);
if(c_search == ',') {
substring(subDate, &sub[4], 4);
game -> release_date.year = atoi(subDate);
index++;
}
else if(c_search == '\"') {
int nmbSpace = 0;
for(int i = 0; ; i++) {
if(sub[i] == ' ') nmbSpace++;
if(nmbSpace == 2) {
i++;
substring(subDate, &sub[i], 4);
game -> release_date.year = atoi(subDate);
break;
}
}
index += 2;
}
atr_index = index;
break;
}
}
}
else {
game -> release_date.month = 0;
game -> release_date.year = 0;
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Owners"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> owners, sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Age"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> age = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Price"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> price = atof(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "DLCs"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> dlcs = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Languages"
while(true) {
index++;
if(line[index] == ']') {
index++;
if(line[index] == ',') index++;
else if(line[index] == '\"') index += 2;
atr_index = index;
break;
}
else if(line[index] == '\'') {
int wordStart = index + 1;
while(true) {
index++;
if(line[index] == '\'') {
substring(sub, &line[wordStart], index - wordStart);
strcpy(game -> languages[game -> count_languages++], sub);
break;
}
}
}
}
// ------------------------------------------------------------ //
// Find "Website"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> website, sub);
atr_index = ++index;
break;
}
}
}
else {
strcpy(game -> website, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Windows"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> windows_os = true;
atr_index = ++index;
break;
}
}
// Find "Mac"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> mac_os = true;
atr_index = ++index;
break;
}
}
// Find "Linux"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
if(!strcmp(sub, "True")) game -> linux_os = true;
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Upvotes"
int positives, negatives;
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
positives = atoi(sub);
atr_index = ++index;
break;
}
}
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
negatives = atoi(sub);
atr_index = ++index;
break;
}
}
game -> upvotes = (float)(positives * 100) / (float)(positives + negatives);
// ------------------------------------------------------------ //
// Find "AVG Playtime"
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
game -> avg_playtime = atoi(sub);
atr_index = ++index;
break;
}
}
// ------------------------------------------------------------ //
// Find "Developers"
if(line[atr_index] != ',') {
if(line[atr_index] == '\"') {
atr_index++;
c_search = '\"';
}
else c_search = ',';
while(true) {
index++;
if(line[index] == c_search) {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> developers, sub);
atr_index = ++index;
break;
}
}
}
else {
strcpy(game -> developers, "null");
atr_index = ++index;
}
// ------------------------------------------------------------ //
// Find "Genres"
if(index < strlen(line) - 1) {
if(line[index] == ',') atr_index = ++index;
if(line[atr_index] == '\"') {
atr_index++;
while(true) {
index++;
if(line[index] == ',') {
substring(sub, &line[atr_index], index - atr_index);
strcpy(game -> genres[game -> count_genres++], sub);
atr_index = ++index;
}
else if(line[index] == '\"') {
substring(sub, &line[atr_index], strlen(line) - 1 - atr_index);
if(sub[strlen(sub) - 1] == '\"') sub[strlen(sub) - 1] = '\0';
else if(sub[strlen(sub) - 2] == '\"') sub[strlen(sub) - 2] = '\0';
strcpy(game -> genres[game -> count_genres++], sub);
break;
}
}
}
else {
substring(sub, &line[atr_index], strlen(line) - 1 - atr_index);
strcpy(game -> genres[game -> count_genres++], sub);
}
}
}
// -------------------------------------------------------------------------------- //
// Functions - List
void list_insertBegin(Game x) {
if(n >= MAX_GAMES) {
printf("Insert error: MAX_GAMES reached");
exit(1);
}
for(int i = n; i > 0; i--) games[i] = games[i - 1];
games[0] = x;
n++;
}
void list_insertEnd(Game x) {
if(n >= MAX_GAMES) {
printf("Insert error: MAX_GAMES reached");
exit(1);
}
games[n++] = x;
}
void list_insert(Game x, int pos) {
if(n >= MAX_GAMES || (pos < 0 || pos > n)) {
printf("Insert error: %s", n >= MAX_GAMES ? "MAX_GAMES reached" : "Invalid position");
exit(1);
}
for(int i = n; i > pos; i--) games[i] = games[i-1];
games[pos] = x;
n++;
}
Game list_removeBegin() {
Game resp;
if(n == 0) {
printf("Remove error: Empty list");
exit(1);
}
resp = games[0];
n--;
for(int i = 0; i < n; i++) games[i] = games[i + 1];
return resp;
}
Game list_removeEnd() {
if(n == 0) {
printf("Remove error: Empty list");
exit(1);
}
return games[--n];
}
Game list_remove(int pos) {
Game resp;
if(n >= MAX_GAMES || (pos < 0 || pos > n)) {
printf("Insert error: %s!", n == 0 ? "Empty list" : "Invalid position");
exit(1);
}
resp = games[pos];
n--;
for(int i = pos; i < n; i++) games[i] = games[i+1];
return resp;
}
void list_print() {
for(int i = 0; i < n; i++) {
printf("[%i] ", i);
game_print(&games[i]);
}
}
Game game_search(int app_id) {
for(int i = 0; i < x; i++) {
if(gamesFull[i].app_id == app_id) return gamesFull[i];
}
Game game;
game.app_id = -1;
return game;
}
// ---------------------------------------------------------------------------------------------------------- //
int main() {
// ---------------------------------------------------------------------------------------- //
// Fill full games list
FILE *fp;
char *line = NULL;
size_t len = 0;
size_t read;
fp = fopen("/tmp/games.csv", "r");
if(fp == NULL) exit(EXIT_FAILURE);
// -------------------------------------- //
while((read = getline(&line, &len, fp)) != -1) {
Game game;
game_start(&game);
game_read(&game, line);
gamesFull[x++] = game;
}
fclose(fp);
if(line) free(line);
// ---------------------------------------------------------------------------------------- //
char line_in[100];
// Fill production games list
scanf(" %[^\n]", line_in);
while(true) {
if(isFim(line_in)) break;
// -------------------------- //
int app_id = atoi(line_in);
Game found = game_search(app_id);
if(found.app_id != -1) list_insertEnd(found);
// -------------------------- //
scanf(" %[^\n]", line_in);
}
// ---------------------------------------------------------------------------------------- //
// Execute operations
int n_ops;
scanf("%i", &n_ops);
for(int i = 0; i < n_ops; i++) {
scanf(" %[^\n]", line_in);
Game game;
char params[10];
if(line_in[0] == 'I') {
substring(params, &line_in[3], strlen(line_in) - 3);
if(line_in[1] == 'I') list_insertBegin(game_search(atoi(params)));
else if(line_in[1] == 'F') list_insertEnd(game_search(atoi(params)));
else if(line_in[1] == '*') {
char appId[10], pos[10];
int i = 0;
while(true) {
if(params[i] == ' ') {
substring(pos, &params[0], i);
substring(appId, &params[i + 1], strlen(params) - i - 1);
break;
}
else i++;
}
list_insert(game_search(atoi(appId)), atoi(pos));
}
}
else if(line_in[0] == 'R') {
if(line_in[1] == 'I') printf("(R) %s\n", list_removeBegin().name);
else if(line_in[1] == 'F') printf("(R) %s\n", list_removeEnd().name);
else if(line_in[1] == '*') {
substring(params, &line_in[3], strlen(line_in) - 3);
printf("(R) %s\n", list_remove(atoi(params)).name);
}
}
}
list_print();
return EXIT_SUCCESS;
}

View File

@ -0,0 +1,72 @@
1189490
300550
49800
1851280
1112930
275570
1276550
1096530
690510
1504570
1369470
270130
336150
573210
886470
1368820
951530
247370
1879330
1634290
259570
941650
768450
1347140
722670
711540
450170
730
598550
614090
809440
1923860
559010
1547380
554310
1124090
292120
691930
325420
663670
503820
49600
49300
1631930
1038740
336760
64000
487580
410890
363110
FIM
20
II 1487390
II 258520
II 1165270
II 298140
II 213610
IF 50510
IF 998660
IF 1740720
I* 10 24720
I* 15 439550
I* 20 1507410
RF
RF
RF
RI
RI
R* 10
RF
RF
RI

View File

@ -0,0 +1,61 @@
(R) Have a Nice Death
(R) Sopwith VR
(R) Burn Zombie Burn!
(R) Sonic Adventure 2
(R) Rhiannon: Curse of the Four Branches
(R) Faefever
(R) NOBUNAGA'S AMBITION: Tendou with Power Up Kit
(R) Higurashi When They Cry Hou - Ch.2 Watanagashi
(R) Synthesis Universe -Episode 00-
[0] 258520 The Vanishing of Ethan Carter Sep/2014 500000 - 1000000 0 19.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Czech] http://EthanCarterGame.com true false false 89% 3h 13m The Astronauts [Adventure, Indie]
[1] 1487390 ANVIL Dec/2021 50000 - 100000 0 24.99 0 [English, Korean, German, Russian, Japanese, Simplified Chinese, Traditional Chinese, French, Polish, Portuguese - Brazil, Spanish - Latin America, Italian, Thai, Vietnamese] https://www.anvil.world/ true false false 63% 9h 51m Action Square [Action, Early Access]
[2] 1189490 觅长生 Nov/2019 500000 - 1000000 0 11.99 0 [Simplified Chinese] null true false false 91% 33h 39m Chalcedony Network [Indie, RPG, Strategy, Early Access]
[3] 300550 Shadowrun: Dragonfall - Director's Cut Sep/2014 500000 - 1000000 0 14.99 0 [English] http://harebrained-schemes.com/shadowrun/dragonfall/ true true true 89% 15h 1m Harebrained Schemes [Adventure, Indie, RPG, Strategy]
[4] 49800 Flight of the Icarus May/2010 50000 - 100000 0 4.99 0 [English] http://musegames.com/games/flight-of-the-icarus/ true true false 39% 15m Muse Games [Action, Indie]
[5] 1851280 Samurai Bringer Apr/2022 50000 - 100000 0 9.99 0 [English, Japanese, Simplified Chinese, Traditional Chinese] https://playism.com/game/samurai-bringer/ true false false 88% 5h 2m ALPHAWING Inc. [Action, Indie]
[6] 1112930 Dredgers Oct/2019 50000 - 100000 0 11.99 0 [English, Simplified Chinese] null true false false 92% null Pirate-Rob [Indie, RPG]
[7] 24720 SPORE™ Galactic Adventures Jun/2009 500000 - 1000000 0 19.99 0 [English, French, German, Italian, Spanish - Spain, Dutch, Russian, Polish, Czech, Hungarian, Finnish, Norwegian, Swedish, Danish] http://www.spore.com/what/ga true false false 88% 15h 32m EA - Maxis [Action, Simulation]
[8] 275570 Summoner Mar/2014 50000 - 100000 0 4.99 0 [English, German] null true false false 83% 3h 24m Volition [Action, RPG]
[9] 1096530 Solasta: Crown of the Magister May/2021 500000 - 1000000 0 15.99 4 [English, French, German, Simplified Chinese, Portuguese - Brazil, Russian] https://www.solasta-game.com/ true true false 89% 37h 56m Tactical Adventures [Adventure, RPG, Strategy]
[10] 690510 Immortal Soul: Black Survival Mar/2019 500000 - 1000000 0 0.00 0 [English, Japanese, Korean, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Traditional Chinese, Thai, Portuguese, Portuguese - Brazil] null true false false 79% 28h 5m Nimble Neuron [Free to Play, Indie, Strategy]
[11] 439550 'n Verlore Verstand Apr/2016 50000 - 100000 0 14.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Czech, Danish, Dutch, Finnish, Greek, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Swedish, Thai, Traditional Chinese, Turkish, Ukrainian] http://www.skobbejakgames.com true true true 39% 2h 20m Skobbejak Games,Skermunkel [Adventure, Casual, Indie]
[12] 1504570 Cultivation Tales Apr/2022 500000 - 1000000 0 19.99 0 [English, Simplified Chinese] null true false false 38% 27h 42m Ac Games [Action, Adventure, Indie, RPG, Strategy, Early Access]
[13] 1369470 Pincremental Aug/2020 50000 - 100000 0 0.00 0 [English] null true true false 80% null Makopaz [Casual, Free to Play, Indie, Simulation, Strategy]
[14] 270130 The Gallery - Episode 1: Call of the Starseed Apr/2016 50000 - 100000 0 14.99 1 [English] http://www.cloudheadgames.com true false false 84% 36m Cloudhead Games ltd. [Adventure, Casual, Indie]
[15] 336150 Virtual Pool 4 May/2015 50000 - 100000 0 24.99 0 [English] http://vponline.celeris.com true false false 83% null Celeris [Sports]
[16] 1507410 Coloring Book for Kids Mar/2021 50000 - 100000 0 0.00 1 [English, French, Italian, German, Arabic, Czech, Danish, Dutch, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Latin America, Swedish, Thai, Turkish, Vietnamese] null true true false 89% null Peaksel [Casual, Free to Play, Indie]
[17] 573210 Mistwood Heroes Dec/2016 50000 - 100000 0 3.99 0 [English] null true false false 56% 4h Meepower [Action, Adventure, Casual, Indie, RPG]
[18] 886470 Another Otter Jul/2018 50000 - 100000 0 0.99 0 [English] null true false false 63% null PepoLab [Casual, Indie]
[19] 1368820 RollerCoaster Tycoon® 3: Complete Edition Sep/2020 50000 - 100000 0 7.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Dutch, Finnish, Norwegian, Swedish] null true true false 83% 1h 15m Frontier Developments,Aspyr (Mac) [Simulation, Strategy]
[20] 951530 Alien Shooter - Last Hope Nov/2020 50000 - 100000 0 4.99 0 [English, Russian] http://www.sigma-team.net true false false 81% null Sigma Team Inc. [Action, Indie, RPG]
[21] 247370 Mutant Mudds Deluxe Nov/2013 50000 - 100000 0 9.99 0 [English] http://www.mutantmuddsdeluxe.com true false false 74% 3h 21m Renegade Kid [Action, Indie]
[22] 1879330 WARRIORS OROCHI 3 Ultimate Definitive Edition Jul/2022 50000 - 100000 0 39.99 0 [English, Simplified Chinese, Traditional Chinese, Japanese] https://www.gamecity.ne.jp/orochi2/ultimate/index.html true false false 88% null KOEI TECMO GAMES CO., LTD. [Action, Strategy]
[23] 1634290 Chuhou Joutai 2: Paraided! Jul/2021 50000 - 100000 0 4.99 0 [English, Japanese] https://drillimation.com/chuhou-joutai-2-paraided/ true false false 100% null Drillimation Systems [Action, Indie]
[24] 259570 EDEN STAR Jan/2015 50000 - 100000 0 19.99 0 [English] http://www.edenstargame.com true false false 61% 4h 31m Flix Interactive [Action, Adventure, Indie, Strategy, Early Access]
[25] 941650 The Island: Into The Mist Jan/2019 50000 - 100000 0 9.99 0 [Korean, English] https://imbada.itch.io/the-island true false false 69% 3h 14m SUPER WAVE Studio [Adventure, Indie]
[26] 768450 NUTS Feb/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Dutch, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese, Traditional Chinese] http://nuts.game true true false 88% null Joon, Pol, Muutsch, Char & Torfi [Adventure, Simulation]
[27] 1347140 NEAR DEADline Aug/2020 50000 - 100000 0 0.00 1 [English] https://www.newgrounds.com/portal/view/736443 true true true 90% null Dumb ****ing Horse [Action, Casual, Free to Play, Indie]
[28] 722670 Chinese Chess/ Elephant Game: 象棋/ 中国象棋/ 中國象棋 Oct/2017 50000 - 100000 0 9.99 0 [Simplified Chinese, Traditional Chinese, English, Russian] null true false false 78% 1h 45m Wang Wenxi [Indie, Simulation, Strategy, Early Access]
[29] 711540 Lonely Mountains: Downhill Oct/2019 50000 - 100000 0 9.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Japanese, Korean, Portuguese - Brazil, Polish, Turkish] http://lonelymountains.com true true false 92% 1h 15m Megagon Industries [Action, Indie, Racing, Simulation, Sports]
[30] 450170 BOOR Feb/2017 50000 - 100000 0 0.99 0 [English, Spanish - Spain, French, German] http://www.dazlog.com/boor true true true 83% 4h 30m DazlogStudio [Adventure, Casual, Indie]
[31] 730 Counter-Strike: Global Offensive Aug/2012 50000000 - 100000000 0 0.00 1 [Czech, Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Spain, Swedish, Thai, Traditional Chinese, Turkish, Bulgarian, Ukrainian, Greek, Spanish - Latin America, Vietnamese] http://blog.counter-strike.net/ true true true 88% 508h 4m Valve,Hidden Path Entertainment [Action, Free to Play]
[32] 598550 HUNTDOWN May/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Japanese, Simplified Chinese] http://huntdown.com/ true true true 95% 11h 26m Easy Trigger Games [Action, Indie]
[33] 614090 Deadbeat Heroes Oct/2017 50000 - 100000 0 14.99 0 [English] https://www.upstreamarcade.com/deadbeat-heroes/ true false false 66% 4h 36m Deadbeat Productions [Action]
[34] 809440 Protolife Jun/2018 50000 - 100000 0 11.99 0 [English, Russian] null true true false 87% 15m Volcanic Giraffe [Indie, Strategy]
[35] 1923860 Neon Outlast Mar/2022 50000 - 100000 0 4.99 0 [English] null true false false 0% null Keep Spinning [Action, Indie]
[36] 559010 Cosmic Sugar VR Nov/2016 50000 - 100000 0 0.00 1 [English] http://cosmicsugarvr.com true false false 95% 5m David Lobser [Free to Play, Simulation]
[37] 1547380 KINGDOM of the DEAD Feb/2022 50000 - 100000 0 14.99 0 [English, French, Italian, German, Spanish - Spain, Simplified Chinese, Traditional Chinese, Korean, Japanese, Polish, Portuguese - Brazil, Russian] null true false false 83% null DIRIGO GAMES [Action, Adventure, Indie]
[38] 554310 Rage Wars Nov/2016 50000 - 100000 0 0.99 0 [English] http://www.lemondo.com/ true true true 89% 4h 24m Lemondo Games [Violent, Gore, Adventure, Casual, Indie]
[39] 1124090 告死天使之言-Death angel Aug/2019 50000 - 100000 0 0.99 1 [Simplified Chinese] https://space.bilibili.com/11591868/article true false false 81% null 我妻寒十 [Adventure, Indie]
[40] 292120 FINAL FANTASY® XIII Oct/2014 500000 - 1000000 13 15.99 0 [English, French, Italian, German, Spanish - Spain] http://www.square-enix.com/ true false false 74% 28h 58m Square Enix [RPG]
[41] 691930 MSI Electric City: Core Assault Sep/2017 50000 - 100000 0 0.00 0 [English] http://msi.com/to/e-city true false false 90% 32m HyperBot Studio [Action, Adventure, Casual, Free to Play, Indie]
[42] 325420 Homebrew - Patent Unknown Nov/2014 50000 - 100000 0 14.99 0 [English] http://www.homebrewgame.com true false false 76% 5h 48m Copybugpaste [Action, Indie, Racing, Simulation, Early Access]
[43] 663670 Killer Queen Black Oct/2019 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean] http://www.killerqueenblack.com true true false 93% 2h 11m Liquid Bit, LLC,BumbleBear Games, LLC [Action, Casual, Sports, Strategy]
[44] 503820 A Detective's Novel Jul/2016 500000 - 1000000 0 0.99 0 [English] http://amaterasusoftware.blogspot.hr/ true false false 68% 4h 24m Amaterasu Software [Adventure, Indie]
[45] 49600 Beat Hazard Apr/2010 500000 - 1000000 0 9.99 2 [English, French, German, Italian, Spanish - Spain, Dutch] http://www.coldbeamgames.com true true true 95% 7h 36m Cold Beam Games [Action, Casual, Indie]
[46] 49300 Commander: Conquest of the Americas Jul/2010 50000 - 100000 0 9.99 2 [English, French, German, Spanish - Spain] http://www.cota-game.com/ true false false 48% 11h 48m Nitro Games [Strategy]
[47] 1631930 The Insignia Project Jul/2021 50000 - 100000 0 1.99 0 [English] https://darkendstu.com/ true false false 75% null Dark End Studios [Indie, Early Access]
[48] 1038740 Fluffy Store Aug/2019 50000 - 100000 0 1.99 1 [English, Simplified Chinese, Traditional Chinese, Japanese] null true true false 97% 3h 9m AsicxArt [Adventure, Casual, Indie, RPG]
[49] 336760 Pilot Brothers Dec/2014 50000 - 100000 0 4.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Traditional Chinese, Portuguese] null true false false 87% null 1C Wireless [Adventure, Casual]
[50] 64000 Men of War: Assault Squad Feb/2011 500000 - 1000000 0 9.99 5 [English, Russian, Italian, Spanish - Spain, French, German, Polish] http://www.menofwargame.com/assault/ true false false 88% 10h 5m Digitalmindsoft [Strategy]
[51] 487580 Ludo Supremo Jun/2016 50000 - 100000 0 1.99 0 [English] http://www.ensenasoft.com true false false 57% 3h 19m EnsenaSoft [Casual]

View File

@ -0,0 +1,61 @@
(R) Have a Nice Death
(R) Sopwith VR
(R) Burn Zombie Burn!
(R) Sonic Adventure 2
(R) Rhiannon: Curse of the Four Branches
(R) Faefever
(R) NOBUNAGA'S AMBITION: Tendou with Power Up Kit
(R) Higurashi When They Cry Hou - Ch.2 Watanagashi
(R) Synthesis Universe -Episode 00-
[0] 258520 The Vanishing of Ethan Carter Sep/2014 500000 - 1000000 0 19.99 2 [English, French, Italian, German, Spanish - Spain, Polish, Czech] http://EthanCarterGame.com true false false 89% 3h 13m The Astronauts [Adventure, Indie]
[1] 1487390 ANVIL Dec/2021 50000 - 100000 0 24.99 0 [English, Korean, German, Russian, Japanese, Simplified Chinese, Traditional Chinese, French, Polish, Portuguese - Brazil, Spanish - Latin America, Italian, Thai, Vietnamese] https://www.anvil.world/ true false false 63% 9h 51m Action Square [Action, Early Access]
[2] 1189490 觅长生 Nov/2019 500000 - 1000000 0 11.99 0 [Simplified Chinese] null true false false 91% 33h 39m Chalcedony Network [Indie, RPG, Strategy, Early Access]
[3] 300550 Shadowrun: Dragonfall - Director's Cut Sep/2014 500000 - 1000000 0 14.99 0 [English] http://harebrained-schemes.com/shadowrun/dragonfall/ true true true 89% 15h 1m Harebrained Schemes [Adventure, Indie, RPG, Strategy]
[4] 49800 Flight of the Icarus May/2010 50000 - 100000 0 4.99 0 [English] http://musegames.com/games/flight-of-the-icarus/ true true false 39% 15m Muse Games [Action, Indie]
[5] 1851280 Samurai Bringer Apr/2022 50000 - 100000 0 9.99 0 [English, Japanese, Simplified Chinese, Traditional Chinese] https://playism.com/game/samurai-bringer/ true false false 88% 5h 2m ALPHAWING Inc. [Action, Indie]
[6] 1112930 Dredgers Oct/2019 50000 - 100000 0 11.99 0 [English, Simplified Chinese] null true false false 92% null Pirate-Rob [Indie, RPG]
[7] 24720 SPORE™ Galactic Adventures Jun/2009 500000 - 1000000 0 19.99 0 [English, French, German, Italian, Spanish - Spain, Dutch, Russian, Polish, Czech, Hungarian, Finnish, Norwegian, Swedish, Danish] http://www.spore.com/what/ga true false false 88% 15h 32m EA - Maxis [Action, Simulation]
[8] 275570 Summoner Mar/2014 50000 - 100000 0 4.99 0 [English, German] null true false false 83% 3h 24m Volition [Action, RPG]
[9] 1096530 Solasta: Crown of the Magister May/2021 500000 - 1000000 0 15.99 4 [English, French, German, Simplified Chinese, Portuguese - Brazil, Russian] https://www.solasta-game.com/ true true false 89% 37h 56m Tactical Adventures [Adventure, RPG, Strategy]
[10] 690510 Immortal Soul: Black Survival Mar/2019 500000 - 1000000 0 0.00 0 [English, Japanese, Korean, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Traditional Chinese, Thai, Portuguese, Portuguese - Brazil] null true false false 79% 28h 5m Nimble Neuron [Free to Play, Indie, Strategy]
[11] 439550 'n Verlore Verstand Apr/2016 50000 - 100000 0 14.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Bulgarian, Czech, Danish, Dutch, Finnish, Greek, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Swedish, Thai, Traditional Chinese, Turkish, Ukrainian] http://www.skobbejakgames.com true true true 39% 2h 20m Skobbejak Games,Skermunkel [Adventure, Casual, Indie]
[12] 1504570 Cultivation Tales Apr/2022 500000 - 1000000 0 19.99 0 [English, Simplified Chinese] null true false false 38% 27h 42m Ac Games [Action, Adventure, Indie, RPG, Strategy, Early Access]
[13] 1369470 Pincremental Aug/2020 50000 - 100000 0 0.00 0 [English] null true true false 80% null Makopaz [Casual, Free to Play, Indie, Simulation, Strategy]
[14] 270130 The Gallery - Episode 1: Call of the Starseed Apr/2016 50000 - 100000 0 14.99 1 [English] http://www.cloudheadgames.com true false false 84% 36m Cloudhead Games ltd. [Adventure, Casual, Indie]
[15] 336150 Virtual Pool 4 May/2015 50000 - 100000 0 24.99 0 [English] http://vponline.celeris.com true false false 83% null Celeris [Sports]
[16] 1507410 Coloring Book for Kids Mar/2021 50000 - 100000 0 0.00 1 [English, French, Italian, German, Arabic, Czech, Danish, Dutch, Hungarian, Japanese, Korean, Norwegian, Polish, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Latin America, Swedish, Thai, Turkish, Vietnamese] null true true false 89% null Peaksel [Casual, Free to Play, Indie]
[17] 573210 Mistwood Heroes Dec/2016 50000 - 100000 0 3.99 0 [English] null true false false 56% 4h Meepower [Action, Adventure, Casual, Indie, RPG]
[18] 886470 Another Otter Jul/2018 50000 - 100000 0 0.99 0 [English] null true false false 63% null PepoLab [Casual, Indie]
[19] 1368820 RollerCoaster Tycoon® 3: Complete Edition Sep/2020 50000 - 100000 0 7.99 0 [English, French, Italian, German, Spanish - Spain, Danish, Dutch, Finnish, Norwegian, Swedish] null true true false 83% 1h 15m Frontier Developments,Aspyr (Mac) [Simulation, Strategy]
[20] 951530 Alien Shooter - Last Hope Nov/2020 50000 - 100000 0 4.99 0 [English, Russian] http://www.sigma-team.net true false false 81% null Sigma Team Inc. [Action, Indie, RPG]
[21] 247370 Mutant Mudds Deluxe Nov/2013 50000 - 100000 0 9.99 0 [English] http://www.mutantmuddsdeluxe.com true false false 74% 3h 21m Renegade Kid [Action, Indie]
[22] 1879330 WARRIORS OROCHI 3 Ultimate Definitive Edition Jul/2022 50000 - 100000 0 39.99 0 [English, Simplified Chinese, Traditional Chinese, Japanese] https://www.gamecity.ne.jp/orochi2/ultimate/index.html true false false 88% null KOEI TECMO GAMES CO., LTD. [Action, Strategy]
[23] 1634290 Chuhou Joutai 2: Paraided! Jul/2021 50000 - 100000 0 4.99 0 [English, Japanese] https://drillimation.com/chuhou-joutai-2-paraided/ true false false 100% null Drillimation Systems [Action, Indie]
[24] 259570 EDEN STAR Jan/2015 50000 - 100000 0 19.99 0 [English] http://www.edenstargame.com true false false 61% 4h 31m Flix Interactive [Action, Adventure, Indie, Strategy, Early Access]
[25] 941650 The Island: Into The Mist Jan/2019 50000 - 100000 0 9.99 0 [Korean, English] https://imbada.itch.io/the-island true false false 69% 3h 14m SUPER WAVE Studio [Adventure, Indie]
[26] 768450 NUTS Feb/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Arabic, Dutch, Japanese, Korean, Portuguese - Brazil, Russian, Simplified Chinese, Traditional Chinese] http://nuts.game true true false 88% null Joon, Pol, Muutsch, Char & Torfi [Adventure, Simulation]
[27] 1347140 NEAR DEADline Aug/2020 50000 - 100000 0 0.00 1 [English] https://www.newgrounds.com/portal/view/736443 true true true 90% null Dumb ****ing Horse [Action, Casual, Free to Play, Indie]
[28] 722670 Chinese Chess/ Elephant Game: 象棋/ 中国象棋/ 中國象棋 Oct/2017 50000 - 100000 0 9.99 0 [Simplified Chinese, Traditional Chinese, English, Russian] null true false false 78% 1h 45m Wang Wenxi [Indie, Simulation, Strategy, Early Access]
[29] 711540 Lonely Mountains: Downhill Oct/2019 50000 - 100000 0 9.99 4 [English, French, Italian, German, Spanish - Spain, Russian, Simplified Chinese, Japanese, Korean, Portuguese - Brazil, Polish, Turkish] http://lonelymountains.com true true false 92% 1h 15m Megagon Industries [Action, Indie, Racing, Simulation, Sports]
[30] 450170 BOOR Feb/2017 50000 - 100000 0 0.99 0 [English, Spanish - Spain, French, German] http://www.dazlog.com/boor true true true 83% 4h 30m DazlogStudio [Adventure, Casual, Indie]
[31] 730 Counter-Strike: Global Offensive Aug/2012 50000000 - 100000000 0 0.00 1 [Czech, Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Portuguese - Brazil, Romanian, Russian, Simplified Chinese, Spanish - Spain, Swedish, Thai, Traditional Chinese, Turkish, Bulgarian, Ukrainian, Greek, Spanish - Latin America, Vietnamese] http://blog.counter-strike.net/ true true true 88% 508h 4m Valve,Hidden Path Entertainment [Action, Free to Play]
[32] 598550 HUNTDOWN May/2021 50000 - 100000 0 19.99 1 [English, French, Italian, German, Spanish - Spain, Japanese, Simplified Chinese] http://huntdown.com/ true true true 95% 11h 26m Easy Trigger Games [Action, Indie]
[33] 614090 Deadbeat Heroes Oct/2017 50000 - 100000 0 14.99 0 [English] https://www.upstreamarcade.com/deadbeat-heroes/ true false false 66% 4h 36m Deadbeat Productions [Action]
[34] 809440 Protolife Jun/2018 50000 - 100000 0 11.99 0 [English, Russian] null true true false 87% 15m Volcanic Giraffe [Indie, Strategy]
[35] 1923860 Neon Outlast Mar/2022 50000 - 100000 0 4.99 0 [English] null true false false 0% null Keep Spinning [Action, Indie]
[36] 559010 Cosmic Sugar VR Nov/2016 50000 - 100000 0 0.00 1 [English] http://cosmicsugarvr.com true false false 95% 5m David Lobser [Free to Play, Simulation]
[37] 1547380 KINGDOM of the DEAD Feb/2022 50000 - 100000 0 14.99 0 [English, French, Italian, German, Spanish - Spain, Simplified Chinese, Traditional Chinese, Korean, Japanese, Polish, Portuguese - Brazil, Russian] null true false false 83% null DIRIGO GAMES [Action, Adventure, Indie]
[38] 554310 Rage Wars Nov/2016 50000 - 100000 0 0.99 0 [English] http://www.lemondo.com/ true true true 89% 4h 24m Lemondo Games [Violent, Gore, Adventure, Casual, Indie]
[39] 1124090 告死天使之言-Death angel Aug/2019 50000 - 100000 0 0.99 1 [Simplified Chinese] https://space.bilibili.com/11591868/article true false false 81% null 我妻寒十 [Adventure, Indie]
[40] 292120 FINAL FANTASY® XIII Oct/2014 500000 - 1000000 13 15.99 0 [English, French, Italian, German, Spanish - Spain] http://www.square-enix.com/ true false false 74% 28h 58m Square Enix [RPG]
[41] 691930 MSI Electric City: Core Assault Sep/2017 50000 - 100000 0 0.00 0 [English] http://msi.com/to/e-city true false false 90% 32m HyperBot Studio [Action, Adventure, Casual, Free to Play, Indie]
[42] 325420 Homebrew - Patent Unknown Nov/2014 50000 - 100000 0 14.99 0 [English] http://www.homebrewgame.com true false false 76% 5h 48m Copybugpaste [Action, Indie, Racing, Simulation, Early Access]
[43] 663670 Killer Queen Black Oct/2019 50000 - 100000 0 9.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean] http://www.killerqueenblack.com true true false 93% 2h 11m Liquid Bit, LLC,BumbleBear Games, LLC [Action, Casual, Sports, Strategy]
[44] 503820 A Detective's Novel Jul/2016 500000 - 1000000 0 0.99 0 [English] http://amaterasusoftware.blogspot.hr/ true false false 68% 4h 24m Amaterasu Software [Adventure, Indie]
[45] 49600 Beat Hazard Apr/2010 500000 - 1000000 0 9.99 2 [English, French, German, Italian, Spanish - Spain, Dutch] http://www.coldbeamgames.com true true true 95% 7h 36m Cold Beam Games [Action, Casual, Indie]
[46] 49300 Commander: Conquest of the Americas Jul/2010 50000 - 100000 0 9.99 2 [English, French, German, Spanish - Spain] http://www.cota-game.com/ true false false 48% 11h 48m Nitro Games [Strategy]
[47] 1631930 The Insignia Project Jul/2021 50000 - 100000 0 1.99 0 [English] https://darkendstu.com/ true false false 75% null Dark End Studios [Indie, Early Access]
[48] 1038740 Fluffy Store Aug/2019 50000 - 100000 0 1.99 1 [English, Simplified Chinese, Traditional Chinese, Japanese] null true true false 97% 3h 9m AsicxArt [Adventure, Casual, Indie, RPG]
[49] 336760 Pilot Brothers Dec/2014 50000 - 100000 0 4.99 0 [English, French, Italian, German, Spanish - Spain, Japanese, Korean, Portuguese - Brazil, Russian, Traditional Chinese, Portuguese] null true false false 87% null 1C Wireless [Adventure, Casual]
[50] 64000 Men of War: Assault Squad Feb/2011 500000 - 1000000 0 9.99 5 [English, Russian, Italian, Spanish - Spain, French, German, Polish] http://www.menofwargame.com/assault/ true false false 88% 10h 5m Digitalmindsoft [Strategy]
[51] 487580 Ludo Supremo Jun/2016 50000 - 100000 0 1.99 0 [English] http://www.ensenasoft.com true false false 57% 3h 19m EnsenaSoft [Casual]