6 ms·
Why not just reject every word your opponent plays?
by bonzoesc 14y ago
Why not just reject every word your opponent plays?
- gojomo 14y agoBecause that would freeze the game state and defeat the purpose of playing?
- ghayes 14y agoYou and your opponent could verify your dictionaries when you are matched up. Checksum mismatch = cancel match-up. Cheaters would be naturally weeded out.
- evan_ 14y agoI'd only need to hack my copy of the client to send a pre-determined checksum value- or recalculate it from a different dictionary than the one that's actually used. If hacking the client is too much of a bother then I'd just have to put a filtering proxy in front of the app to accomplish the same thing. The only solution to this is to check words on the server.
- smarx 14y ago"The only solution to this is to check words on the server." What problem are you trying to solve? My understanding of the problem being discussed: How can you make sure you aren't being cheated when playing Letterpress? To solve that problem, all I have to do is validate that all your moves are legal. (In the case of Letterpress, that all the words you play are in the dictionary.) There's no need for a server to solve that problem.
- evan_ 14y ago> To solve that problem, all I have to do is validate that all your moves are legal. Fair enough, that keeps me from cheating you by playing an illegal word. Now, what prevents you from cheating me by saying all of the words I play are invalid? (And are you really prepared to wait until my phone is in radio range before you learn if your play is accepted or not?) That this would make for an incredibly boring game isn't relevant.
- smarx 14y agoYou already know whether your play is legal or not. If you're not cheating, then all your plays will be legal. You don't have to wait for anything. As to your opponent rejecting legal moves, what's the problem? You made a legal move, and then they refused to continue the game. There's no issue here.
- tolmasky 14y agoWell the problem arrises in how such a game with "passive" cheating (your opponent having removed words you might play from their dictionary to thwart you) would be counted. Detecting a mismatch is simple, determining if it was malicious, and thus the next action you take afterward is more complex: 1. You could send back a rejection. This would handle the legitimate mismatch where differing versions of the app could have different dictionaries (there are notable missing words in the 1.0 so I wouldn't be surprised if words are added in newer versions). Receiving something like "could not verify word" is much nicer than the game just ending on you. However, this still allows your opponent to cheat in the manner described above by removing words you want to play from his dictionary. It would thus be frustrating to play against such a person. He knows the word is valid, but cannot play it against you and must play something else. He is forced to decide whether to forfeit or try a different word. 2. The solution you described: simply end the game, no win or loss since you can't know who was at fault. If this game EVER employs a ladder system, then this is the equivalent of pulling the cord in an internet game, you avoid a loss. Not to mention, again, this doesn't deal with the cases of legitimate differing dictionaries. The problem with both these methods is that cheating still has an affect. Whether it be ending the game or volleying back to you, a cheated action changes the state of the game. It is instead preferable to prevent cheating. Prevention really does thus require words to simply get checked on a server. 1. There is a clear trusted source for the words, 2. You don't need to ship an App Store update to update your dictionary. 3. There is simply no such thing as word cheating anymore, short of hacking the server.
- smarx 14y agoYou've introduced two new problems, neither of which we were discussing previously: 1. How can you deal with multiple versions of the dictionary? 2. How would a third-party (like a rating system) handle cheaters? I would say that the simplest solution for #1 is to not allow this. Players shouldn't try to play against each other if they don't agree on the dictionary. Whether you update dictionaries by shipping new versions of the app, by having clients download them from a server, or by keeping them on the server (as an oracle) isn't important. For the second problem, I think you have a server by definition. You introduced some sort of rankings, which I assume are held on a server somewhere. So this is considerably off-topic.
- ptomato 14y agoI'd point that unless I'm greatly mistaken there is no server involved, as it is all done through Game Center's turn-based game functionality.
- Jare 14y agoAFAIK you are correct.
- ap3 14y agocan you check the md5sum on the dictionary files ? approved values per version are included in the binary, if the check fails it prompts for an update? what happens when a letterpress update updates the dictionary but you are playing against someone with an older version ?