The Fishing Game
Explore your way through the different regions by catching the rarest fish you can. Catch em all to fill up your fishedex!
Hi!! This my fishing game. Here's a bit of an explanation that you also get ingame:
Welcome to my fishing game! The aim of the game is to reach level 100 as quickly as possible. Catch the rarest fish you can and level up! You can sell your fish in the shop. Rarer fish bring in more gold. You can use this gold to purchase bait, which is needed to catch fish, and rods, which make catching rarer fish easier. Careful, bait gets more expensive as you level up. New types of fish are unlocked as you level up, and at higher levels, it's easier to catch fish. You can also see information about all the fish you've come across in the 'fishedex' in the shop. Catch them all! You might also find some treasure when you're fishing! The game saves your progress at the end of each day, so you can just log in again and pick up where you left off. Good luck! Press enter to continue.
Not gonna lie, it's pretty fun.
I made this game last July. The reason I choose fishing was mainly because it makes plurals easier - the plural of most types of fish is the same as the singular ;) (This doesn't work for anchovies though... or mythical creatures. Oh well). To make it I did have to learn a little about using classes and objects - I find them really useful now though. My coding's definitely developed a bit since I made this (it's a mess), but I can't really be bothered to make the code any neater (I did a tiny bit). I have edited it a bit since I originally made it to make it ready for the game jam. Here are some of the additions (spoiler for past level 100!!) :
- There are new "mythicals" which are extremely rare fantasy creatures, like mermaids. They can only be encountered after level 100. You can't sell them, though the game remembers which ones and how many you've seen. You need the special new moonstone rod.
- The game's harder now, in that the XP needed to level up increases exponentially as you go up the levels. I really should have had that from the beginning, because levelling up was way too quick.
- Some new types of fish!
- Highscore board for how many days it takes to reach level 100. I'm not sure if this was in the original fishing game that I posted in July, but I don't think it was. It's empty currently because the new XP-level scale has made all the previous highscores made by me and my family during testing unfair. Let's see who get's the lowest!
- Rarest fish stat. Within the rarity boundaries like common, uncommon, rare ect, there are varying rarities based on a number. If you catch a fish with the same rarity number as your rarest fish stat, it counts as rarer if it's unlocked at a higher level. Basically, higher level is used to decide rarity in a couple of cases. The point is, I wanted to add something that made the game more orientated to getting the rarest fish - kinda like pokemon. Anyone got the blue whale?
- Changed the rod names from "default, alright, decent, good, great" ect. to "wooden, bamboo, copper, iron, steel" ect, just for added character. The only one that stayed the same was the awesome golden rod ;)
In the Future...
I've got a few ideas for what I want to add to the fishing game...
- A little addition of telling you the current highscore when you sign up, or when you log in, or at the top each day in game. I just don't really know which one would be best. Let me know what you want!
- More fish of course! I just don't want to bombard you with them. Maybe if some of you guys really like the game I'll put a personalised fish in for you ;)
- More ideas post level 100. Maybe some cool non-mythical fish.
- Having the option to change rods using ones you've already bought, because at the moment if you want to change your rod you have to repurchase any you've already bought and that's just dumb.
- New rods with cool properties, like extra attempts per day, or unlocking specific types of fish, unlocked at certain levels.
- Maybe, but probably not, lengths of fish - they'd be a mean length for each type, and the fish you caught would be around this. The price could depend on length. There could be a new stat with longest fish caught? I feel like this is just too complicated for my simple little fishing game though.
- Music! I feel like it would really benefit from some tunes but I don't know how to implement that. I'd have to look in to it.
- Your suggestion here. Seriously, I would really love it if you guys could tell me what you want to see, if you like the game of course.
PLANS FOR THE FINAL DAY
- Rainforest and/or
fire biome?DONE fire, I think rainforest would be cool but too much Settings page with options to reset account, see highscores, see game info/help, see current number of accounts on the game?DONE Work on fish rarity colours and fishedex/treasuredex colouring.DONE End biome highscores page?DONE and in settings Mythicals for the other biomes !!!DONE Better names than "normal biome" "ice biome" "desert biome"DONE but they were stolen from game of thrones... oops Weathers with different fish for different weathersDONE
Well that's it. I really hope you guys like it. If there's any bugs let me know, and if you want any improvements, let me know too! Thanks so much for trying it out! (also sorry that it doesn't fit the cash theme. I edited it to make it more appropriate to the cash theme, but it kinda sucked. I prefer the cutesy fishing element)
On a final note, let me know if you encounter all the mythicals! That would be seriously cool!
Edit: don't really care if you don't like that it's in all lower case. I think it looks nicer.
Change Log since posting
- Input validation for a, b, c at the start of the day, to avoid the "press enter and run up your days" error
- Input validation for logging in or signing up
- More input validation for selling some fish, plus added capability for selling multiple fish at a time (not all fish) and fixing a bug that would've prevented fish with spaces in their name - eg electric eel - to be sold.
- Fixed the printing of high scores so that it's in actually in the correct order, plus accounting for ties.
- Disallowed "-" characters in the username, which would've messed up the accounts file, had it been working anyway.
- Lowered the power of the rods and raised the prices for a more difficult game ... sorry if the highscores are now unfair but I can't let it be the same game forever :(
- More input validation in the shop... it never ends
- Weirdly, more input validation in the shop, I thought I caught it all, but nope. thanks for catching that, TechGamer
- Added the "fishedex"!! It's amazing! It's literally just a pokedex. Go to the shop to see it. If you do manage to catch em all then tell me if my code works and you get a congratulations. Hope you all like the fishedex, thanks to Hamloid for the idea!
- Accounts and highscores saving error fixed!
- You don't get as much info about a fish each time you catch one now, only the first time you do. I think it looks a lot nicer.
- The code now has the grammar knowledge of a 6 year old and can appropriately use "a" or "an" now.
- If you put in "log in" but you should've put in "sign up", you no longer need to refresh, the code will sort it out for you.
- Fixed password security thanks to ebest!
- Added treasures and treasuredex!
- Fish are now coloured based on rarity, inspired by Runescape!
- Different biomes with different fish, different treasures, harder xp gradients, and dangers [dangers are so cool]! Level resets to 1 in these biomes. You can travel between biomes by ships (your old levels stay the same, don't worry). Biomes are only unlocked past level 100. I only have the ice biome now, but more are coming (unlocked at ice level 100, ect.)
- Biome specific rods! [only 1 per biome, but they're both great at getting rare fish, and allow mythicals (at the moment mythicals can only be caught in normal, but I'm going to add ice and desert mythicals)
- Desert biome added!! I know, the names suck. I'm working on it.
- Bait price increases as you level up. It's also more expensive as you go through the biomes.
- Dangers added for normal.
- "One use" items! These are pretty cool and last for 1-2 weeks, increasing your chance at either: catching a fish, catching a treasure or catching rarer fish, or keeping you safer. There's 2 "levels" of item for each, with the better being rarer. They can't be bought in the shop and are instead found when fishing.
- Added weathers, which are specific to biomes. Most fish can only be caught in certain type(s) of weather.
- Added settings page with options to reset account, see highscores, see total number of accounts signed up, see game info and see game help. Going to settings doesn't use up your day, unlike the shop.
- Improved fish rarity colours suggested by Mavrick and each line in the fishedex is coloured according the what biome the fish is found in.
- Fire biome, which is the last one! Highscores page for when you complete it.
- Mythicals for different biomes.
- Biomes are no longer called biomes and are now named after locations in game of thrones.
- Massive bug exodus just before deadlines oops
- Inputs except user and password are now not case sensitive
- Slight edits to reaching level 100 & ship functions
- cats_ur_cool77's awesome fishing game tribute can be found in settings!
- credits when you reach endgame!
Anyone who can reach level 100 in under 300 days can have a personalised mythical! Screenshot the highscore board once you reach 300 and tell about what you want your mythical to be. Maybe they'll have even more XP than normal mythicals. Good luck!!
Account bug FIXED! Finally! Thanks so much to leon332157 for their json store module - https://repl.it/talk/share/jsonstoreio/10956. Your account information and highscores should always be saved now! (let me know if you find a bug though)
Issue with account security is definitely improved now. Don't try too hard to hack it though aha Edit: account security is much better now!! thanks to ebest!
Don't forget to upvote if you enjoyed the game! Thanks so much to everyone who has done so, or commented, already!
Notes to judges
- Sorry that there are no screenshots of game play. I was planning to take some today but I have definitely ran out of time :(
- Please don't mark me down because it's all in lowercase. It's inspired by a dark room, and it's super easy to change at the end of the day.
- PLEASE play until you reach at least
the ice biomeBeyond the Wall because I worked so hard on the biomes!! And don't you want to log a highscore?
- Sometimes, I worked on the file by forking it and editing the fork. I then copied and pasted it back into the original. I deleted some forks to make more room in my repl. I swear I used repl.it!
- I used this file a lot to change the data that is held for the accounts. It was necessary when the new developments in the game required more data to be stored. https://repl.it/@AmeliaBlackwell/Fishing-Game-Account-Handler
- Of course I really hope you enjoy my game :)
- *I had to restore the latest backup because the storage got full and had to delete itself. I'm really sorry anyone lost their data. I should've written an exception for this but I didn't think about that before the deadline. Everything should be working now though.
I recommend playing in a new tab
This game is awesome!
In the future you could make this into an 8-bit game (kinda like pokemon, or stardew valley!)
Leprechaun pot could be a treasure for a special hook (rainbow hook. Perhaps a rainbow hook could also catch the legendary leprechaun (maybe you need the hook that's blessed by St. Patricks for that)). Also, you could add hooks as treasures that you can only find by fishing. You could also add some unique fishing rods that are only acquirable by fishing. And other things like that, like a guaranteed treasure bait that's also only acquirable by fishing. Another item would be a treasure magnet, perhaps. stick it in the place of your bait and you have a higher chance of getting treasure, but you cannot get fish when you have it on. Lots of ideas.
the new storage still can be encrypted. If you have the skill, it's still easy to find the accounts.
@ebest if someone looks at my code they could use the key to find the data. Should i somehow encrypt the key so someone looking at my code can't use it, or encrypt the data so someone looking at the data can't use it? I don't really know much about this, i will have to look into it. It's hard when anyone can look at the code
@AmeliaBlackwell I'm almost done with the fork, but if I complete the operation your version of the game will not work anymore.
Here it is:
Ok. Line 683, if you delete the pound signs and run the code, the commented code will change all your passwords (even on your original copy) and the rest of the changed code will run normally.
Line 84 hashes passwords on sign-up/creation of account
Line 116 hashes user inputed password and compares to stored and hashed passwords
Line 683 changes all unhashed passwords into hashed passwords
and this is for free. I like seeing my work on other websites
@AmeliaBlackwell ohhhhhhh That's a good idea, but it might be a little hard. Because of the key thing. Maybe you could store the website somewhere else, or in an extremely complex text file. I'll think about that.
and the leon person is also where I got my json io storage idea. How coincidental.
The only way I thought of to securely store a key to a game is by person. You could also store seperate (encrypted) bits of the token in different positions in the game code, then decode them with different method. The best you can do is obfustication, and if you want that I can add it.
If you want to obfusticate it, the secure storage has this:
eobj = AES.new(key, AES.MODE_CFB, key2) ciphertext = eobj.encrypt(message)
I can add that, too
@ebest That's alright. your password hasher worked fine and that's enough for me. Yeah, I wish I could just store the key on my computer and then get replit to find it from one of my files.
the json storage is really cool huh. I've always wanted to be able to store objects as objects and not as there little individual parts. it's so much easier.
This is really cool! I'd give 100 upvotes if I could, but I can only give one. Yesterday, I was making some code for secure storage using a bunch of other ideas. Here it is:
This also stops the problem of file saving. I was having that problem too. Really annoying, but I found some info from another post.
Just curious, do you have spring break?
Wow..... i played it and at day 26 it laged and it made me quit the game, i tried to log in but it doesn't work even if i put the right username and the right password.
Here. I made some edits to the account saving part. Maybe this will work?
def create_account(): usernamedone = False while not usernamedone: flag = False cprint("Enter Username: ", "red") username = input() with open("accounts.txt", "r") as accountsfile: accounts = accountsfile.readlines() for account in accounts: account = account.strip() if account.split("-") == username: cprint("Username taken; please try again", "red") flag = True if not flag: usernamedone = True cprint("Enter Password", "red") pw = input() with open("acountsfile.txt", "a") as accountsfile: accountsfile.write(username + "-" + pw + "-0-0-1-10-none-wooden-empty-empty \n") player = Account(username, pw, 0, 0, 1, 10, "wooden", "none", "empty", "empty") game_info(player) input() return player
This may not fix all, and please tell me if there is another part so I can help.
@PYer you have a problem.
with open("acountsfile.txt", "a") as accountsfile: accountsfile.write(username + "-" + pw + "-0-0-1-10-none-wooden-empty-empty \n")
with open("accountsfile.txt", "a") as accountsfile: accountsfile.write(username + "-" + pw + "-0-0-1-10-none-wooden-empty-empty \n")
The account doesn't work for me. I lost all of my stuff after signing out, and it said that
username and password do not match; please try again I don't think it is a problem with what I am doing, because it happened to some of my friends too.
This is a really fun game, even without the accounts though.
I actually think you might win!
lol i made i made it in 321 days lol
you caught a blue whale! a blue whale is a legendary fish that can be sold for 5000 gold
CONGRATULATIONS! YOU REACHED LEVEL 100!
you reached level 100 in 321 days
these are the high score rankings for how many days other players have reached level 100 in
1. wbt - 321 days
2. tjb0411 - 341 days
3. l33g - 357 days
4. spencer - 379 days
now that you've reached level 100, you have the ability to encounter mythical creatures. these are extremely rare and can only be found with the moonstone rod, which is now unlocked in the shop. they can't be sold, but encountering them gives you a lot of experience!
How you've managed put all of this together is seriously impressive, well done! There's one small problem if you haven't noticed, anyone can come along and see what's in
accounts.txt, so the whole login thing isn't exactly 100% secure 😛
@AmeliaBlackwell No problem! ^^
I'd say the easiest way to get around it is by encrypting the username and password in some way. If you haven't heard of it before, try googling "caesar cipher" (it isn't as scary as it sounds). This won't exactly stop someone from figuring it out if they wanted to, but now they would at least have to read the source code to do it.
But if you really want to make sure that no one can find out, what I'd do is use Google Sheets to store everything in
accounts.txt, and use their api to access and modify the data.
@AmeliaBlackwell Anytime! doing caesar cipher should take you only take you around 5-10 minutes and it shouldn't be too hard at all if you've seen it before.
And yeah, using google's APIs is definitely harder, but it's also pretty interesting to learn how to do something like that and I'd say it's quite a useful skill to have so it might be worth your time. Or don't bother at all, you do you 😛
Congrats on community vote! Even though you didn't get first place, you still made a pretty good game.
I started a new game and with 10 baits, I didn't even catch a single fish, so I lost on day 1...
I have worked until day 134 and it didnt save my progress XD is there a way to get my progress back? username is RogueKing and password is 1234
Aw man... I didn't read the part where I needed to comment my stats to get entered, that's my fault tho here I'm gonna grind and I'll finish this comment when I am as good as I was... ok here:
gold - 19229
bait - 299
rod - bronze
level - 55
rarest fish caught - plaice
inventory - empty
Edit: rlly good game btw its addictive
Edit2: updated my stats, except inventory cause that's a lot of work
Edit3: updated everything
all the things i caught in one run(and stats)
gold - 0
bait - 8498
rod - silver
level - 91
rarest fish caught - dolphin
inventory - 17 minnow, 18 tuna, 12 catfish, 24 prawn, 21 spider crab, 6 trout, 11 seahorse, 13 pike, 13 sardine, 18 salmon, 10 crab, 10 mackerel, 31 shrimp, 16 crayfish, 3 blobfish, 13 dogfish, 10 stingray, 14 bass, 6 squid, 12 cod, 21 anchovies, 13 electric eel, 21 jellyfish, 5 rainbow trout, 1 swordfish, 9 herring, 6 turtle, 5 shark, 2 plaice, 7 sunfish, 1 dolphin
it is easy to get a lot of money it should be at least 2 gold for bait
very good game overall well done
it is awesome
@17hama4141 okay added to the accounts file. Username: 17hama4141 . password - "pass". thank you so much I'm really glad you like it!! :) I'll think about raising the price of bait but honestly I think that could just make the very early game difficult and the rest of the game annoying. Maybe at level 100 it could increase to 10 gold. as for the moonstone rod... reach level 100 to find out what it does ;)
Congrats on over 100 votes. Might I ask how the account system works? I've been trying to find a way to do something like this forever.
@Mavrick thank you very much! Of course. So at the start od each game each user has to make a username and password which creates the player object, using the username and password and the starting stats (day 1, 0 gold, 10 bait, empty inventory ect). This object is used and updated over each in game day. At the end of each day all the attributes of the player object are written to the accounts.txt file, seperated by special characters. You will need to make sure your code only overwrites the account in current use by checking the usernames. All data must be strings so I have a printing inventory function - inventory is an object with an attribute containing all the objects inside the inventory, so each object is written as its name and quantity, seperated by different special characters. (1 account per line)
When logging back in, the accounts file is read. The username and password must match a line of the accounts file. If they do a player object is created using the details within the accounts file. Objects like inventories are reconverted from their string data back into the object. Then the game continues using this player object.
I hope you understood that. It's easier than it sounds. If you have a problem please ask.