First attempt at a Python prog (Chess)

Chris Hinsley chris.hinsley at gmail.com
Wed Apr 30 09:28:58 EDT 2014


On 2013-02-15 05:05:27 +0000, Rick Johnson said:

> On Thursday, February 14, 2013 11:48:10 AM UTC-6, Chris Hinsley wrote:
> 
>> Is a Python list as fast as a bytearray?
> 
> Why would you care about that now? Are you running this code on the 
> Xerox Alto? Excuse me for the sarcasm but your post title has perplexed 
> me:
> 
>  "First attempt at a Python prog (Chess)"Okay, but how does that translate to:
> "The fastest, most efficient, most brain fricked python code ever 
> released in the form of a game, that just happens to look an awful lot 
> like C source"?
>     
> http://en.wikipedia.org/wiki/Optimization_%28computer_science%29#When_to_optimize 
> 
> 
> Why bother to use Python if what you really want to write is C code? If 
> you want to write good code (not just python), you need to write code 
> that is maintainable. Yes i KNOW, this is just some stupid chess game, 
> but i can assure you that this style of code is only going to harm your 
> evolution. This code is obfuscated at best and BF'ed at worst. And 
> forget about the algorithms for now, the first problems to address are 
> superficial.
> 
> First of all your naming conventions suck. You've used the "interface" 
> style for every function in this game so i can't /easily/ eyeball parse 
> the /real/ interface functions from the helper functions -- and i'm not 
> going to even try, because i don't read ugly code! Try to learn the 
> Python style guide as soon as you can (In particular pay attention to 
> naming conventions):
> 
>  http://www.python.org/dev/peps/pep-0008/
> 
> Secondly this game could benefit from some OOP paradigm (not sure if 
> are familiar with OOP or not???). But don't go bat-crazy with OOP! You 
> don't need an object to represent /every/ single piece on the board 
> (That would be nuts!). You need just enough OOP to encapsulate the data 
> and create a proper interface.
> A good litmus test is based on the "three little bears":
> 
>  "Papa bears bed is too hard"
> 
> A hard utilization of paradigms wields too little OOP and therefore 
> ends up being too difficult (aka: "hard") to maintain because there is 
> no logical interface; just a massive collection of functions stuffed 
> into global space until BF reaches critical mass and you're forced to 
> do a complete re-write! (Of course sometimes you don't need OOP at all, 
> just interface)
>  "Mama bears bed is too soft"
> 
> A soft utilization of paradigms wields too much OOP whereby you are 
> surrounded by big FAT objects which are smothering you to death, and 
> they smell because they cannot properly wash themselves between the 
> rolls of fat.
> 
>  "but baby bears is just right"
> Ahhh, the blissful comfort of a paradigm utilization that is "just 
> right". This is where your code should be, you want a level of OOP 
> usage that is "just right" for the occasion; not any more, not any less.
> ## START EXAMPLE CODE ##
> class GameBoard(???):
>     def __init__(self):
>         self.board = self._createBoard()
>            def __str__(self):
>         """Override:"""
>         # return a string represention of the board
>         # suitable for writing to stdout
>            def _createBoard(self):
>         """Internal:"""
>         self.board = [blah]
>           def make_move(self, piece, vector):
>         """Interface: move a game piece based on vector"""
>         # Find and move the piece. Whether the pieces
>         # are objects or not doesn't matter.
>        class GamePiece(object):
>     def __init__(self, typename, color):
>         self.typeName = typeName
>         self.color = color
>         self.captureFlag = self._computeFlag()
> 
> 
> def main():
>     board = Board()
>     playing = True
>     while playing is not False
>         i = input('PieceName - MoveVec:')
>         n, v = parse(i)
>         result = board.make_move(n, v)
>         if result == 'GameOver':
>             playing = False
>         else:
>             # clear the stdout
>             str(board)
> 
> if __name__ == '__main__:
>     main()
> ## END EXAMPLE CODE ##
> 
> And now you have the added benefit of exporting the objects for use elsewhere.

Wow, such vitriol for such a simple bear to cope with !

Maybe Papa bear would like to try some humility !

This was my very first Python prog, and my first chess prog and my 
attempt to learn somthing about Generators ! Do youtself a favour and 
leave the Python comunity for the good of the language !

Chris




More information about the Python-list mailing list