Re: [pygame] roguelike question

2010-10-04 Thread Marius Gedminas
On Mon, Oct 04, 2010 at 01:05:36PM -0500, Michael Schultz wrote:
 Hi, new to the list, but not the language. I'm completely at home with
 Python :)

Have you read PEP 8?

Your Common.Common class, which has two unrelated methods and no
instance state, and is instantiated everywhere for a single use and then
discarded, is not how we do things in Python land.  What's wrong with a
simple global function?

 Right now, I'm coding a roguelike game, and am having
 trouble getting the map to update changes. I've got movement and
 collision detection, but for whatever reason, the changes to the map
 are not being updated.
 
 When the player is up against a d tile, and presses the key d, the
 d should be replaced with a . tile, but nothing's happening.

Because the code:

for tile in tiles:
if tile.rect.bottom == new_tile.rect.top:
tile = new_tile

is not doing what you think it is doing (and also, the comparison looks
wrong).  You need something like:

for index, tile in enumerate(tiles):
if tile.rect == new_tile.rect:
tiles[index] = new_tile

(Incidentally, a plain list of tiles is not the best data structure for
a roguelike.)

 Here's the files:

 ===move_test.py
 http://pastebin.com/fmz491K9
 
 ===Actions.py
 http://pastebin.com/TUm3mv3b
 
 ===Terrain.py
 http://pastebin.com/SXR8LqyL
 
 ===Common.py
 http://pastebin.com/YhN2Cszu
 
 ===Imp.py
 http://pastebin.com/2g4Yz469

Why not use Mercurial and put the code on bitbucket.org?

Or git and github.com?

Or Bazaar and launchpad.net?

Marius Gedminas
-- 
The primary purpose of the DATA statement is to give names to constants;
instead of referring to PI as 3.141592653589797, at every appearance,
the variable PI can be given that value with a DATA statement, and
used instead of the longer form of the constant. This also simplifies
modifying the program, should the value of PI change.
-- Fortran manual for Xerox computers


signature.asc
Description: Digital signature


Re: [pygame] pygame.mixer.init(frequency=?)

2010-02-25 Thread Marius Gedminas
On Thu, Feb 25, 2010 at 10:37:36AM -0800, James Paige wrote:
 On Thu, Feb 25, 2010 at 10:31:12AM -0800, B W wrote:
 I have two songs. One has a bitrate of 48000, the other 44100. If I allow
 Pygame (SDL mixer) to use the default frequency, the playback speed of 
  the
 songs is distorted. If I explicitly set the mixer frequency to match a
 song so it sounds good, the other sounds distorted.
  
 Reinitializing the mixer is not a good option. There are other sounds 
  that
 need to play, and would be interrupted by a reinit. Resampling the songs
 is not ideal, either, as Vorbis is a lossy format and sound quality is
 obviously lost in re-sampling.

Is that a theoretical observation, or can you actually hear the
difference?

 Does anyone have a recommendation? Are all sounds in an implementation
 expected to have the same bitrate?
 
 Even if SDL_mixer was capable of handling this situation, it would still 
 have to handle it by resampling. Unless I am greatly mistaken, there is 
 no way to avoid resambling in this situation, so it will be better to 
 resample in advance, rather than to expect the library to do it at 
 runtime.

If SDL resampled the sound on load, you'd end up with:

  decode vorbis - resample (mostly lossless) - play.

If you resample it in advance, you end up with

  decode vorbis - resample (mostly lossless) - reencode vorbis
  (lossy!) = decode vorbis - play

It's not the resampling that B W is trying to avoid, it's the lossy
reencoding.

Marius Gedminas
-- 
(mental note: stop installing red hat. everytime i do so, it takes ages to fix
my system again.)
-- from the sig of Martin H�gman


signature.asc
Description: Digital signature


Re: [pygame] Requiring pygame in setup.py

2009-10-05 Thread Marius Gedminas
On Sun, Oct 04, 2009 at 09:33:47PM -0300, Henrique Nakashima wrote:
 Hello, I'm working on my setup.py for a Pygame library
 (http://www.pygame.org/project-LibRPG-1293-2260.html) and trying to
 declare Pygame 1.9.1 as a dependency. I wrote:
 
 setup(...
   provides=['librpg'],
   requires=['pygame(=1.9.1)'],

If you use setuptools, it's spelled install_requires.

If you use distutils, it doesn't enforce dependencies.

...
)
 
 It worked, but when I replaced 1.9.1 with 1.9.2, to check if it
 actually depended on pygame, it worked as well. What is the right way
 to ask easy_install to get pygame as a dep when my lib is installed?

Marius Gedminas
-- 
To stay awake all night adds a day to your life.
-- Stilgar (Frank Herbert _Children_of_Dune_)


signature.asc
Description: Digital signature


Re: [pygame] [Pygame] Key Configuration

2009-05-12 Thread Marius Gedminas
On Mon, May 11, 2009 at 05:31:06PM -0700, Fawkes wrote:
 I was wondering what would be the best way to do a key configuration
 for my game? One of the comments from our recent release (
 http://pygame.org/project/1106/ ) was that we ought to have the
 controls configurable by the player for instance if they have a non
 QWERTY keyboard. Right now all the controls are hard coded (e.g. the
 game looks to see if Z is pressed, do something). I was thinking of
 using a dictionary like the following.
 
 controls{
 confirm:K_z,
 cancel:K_x
 prev_ally:K_a,
 next_ally:K_s,
 prev_enemy:K_q,
 next_enemy:K_w}
 
 The values within the dictionary would be changeable by the player
 within the game. Is this a good way to go about doing this?

Sometimes it's useful to allow more than one key for the same action.

Like claudio already said, for the purposes of the main game loop it's
more convenient to have a dictionary from key to action (it also allows
you to detect conflicts).

However for the purposes of the user interface, it may be more
convenient to have a dictionary like you have.  It's pretty simple to
translate between the two forms, so you could have both.

Marius Gedminas
-- 
Never, ever expect hackers to be able to read closed proprietary document
formats like Microsoft Word. Most hackers react to these about as well as you
would to having a pile of steaming pig manure dumped on your doorstep.
-- ESR (http://www.tuxedo.org/~esr/faqs/smart-questions.html)


signature.asc
Description: Digital signature


Re: [pygame] Cairo + SDL

2009-05-04 Thread Marius Gedminas
On Sun, 5/3/09, Marius Gedminas mar...@gedmin.as wrote:
 On Sun, May 03, 2009 at 07:32:39AM -0700, Yanom Mobis wrote:
  Is cairo used for game programming?
 
 There are a few games using Cairo:
 http://lists.cairographics.org/archives/cairo/2006-May/007032.html
 
 It was not designed specifically for games, though, unlike SDL.

On Mon, May 04, 2009 at 03:47:04PM -0700, Yanom Mobis replied:
 so does it have support for collision detection, load images onto the
 screen, mouse input, etc?

No, yes, no, and why don't you go over to http://cairographics.org/ and
read a little, if you're interested?

Marius Gedminas
-- 
A: Because it destroys the flow of the conversation
Q: Why is it bad?
A: No, it's bad.
Q: Should I top post in replies to mailing lists?


signature.asc
Description: Digital signature


Re: [pygame] Cairo + SDL

2009-05-03 Thread Marius Gedminas
On Sun, May 03, 2009 at 07:32:39AM -0700, Yanom Mobis wrote:
 Is cairo used for game programming?

There are a few games using Cairo:
http://lists.cairographics.org/archives/cairo/2006-May/007032.html

It was not designed specifically for games, though, unlike SDL.

Marius Gedminas
-- 
We don't care.  We don't have to.  We're the Phone Company.


signature.asc
Description: Digital signature


Re: [pygame] API draft for vector type

2009-04-28 Thread Marius Gedminas
On Tue, Apr 28, 2009 at 06:32:12PM +0200, Lorenz Quack wrote:
 1.5.4.1  v.isNormalized() - bool
 1.5.4.2  v.normalize() - None# normalizes inplace
 1.5.4.3  v1.normalized() - v2# returns normalized vector

 In my opinion normalize() and normalized() are far too ambiguous. We
 might should use something like ip_XXX() for inplace operations:

   v.ip_normalize () - None
   v.normalize () - v2

 We do that naming already for Rect objects and should take care of doing
 that anywhere where inplace operations happen. The same then applies to
 the rest of your inplace methods.

 hm. ok. but the ip is after the name: v.normalize_ip()

When I see 'ip', I cannot stop thinking about IP addresses.

I think .normalize() vs .normalized() is clear enough, and also follows
the convention set by Python builtins (list.sort() vs sorted()).

And if vectors are immutable, this question becomes moot.

 1.6 properties
 ==
 1.6.1.1  v.length - a # gets the magnitude/length of the vector
 1.6.1.2  v.length = a
   # sets the length of the vector while preserving its direction

 The setter might be risky due to rounding issues.

 true, but I think this can be very usefull. and I can live with the fact that
 v.length = 1.
 v.length == 1.  # - false
 when dealing with floating point variables you have to expect weird 
 behavior like this.

I used to think that way.  Then I read _What Every Computer Scientist
Should Know About Floating Point Arithmetic_ and understood that floats
are very predictable if you understand them.

(I still don't understand them. *wink*)

 1.7 comparison operations
 =
 1.7.0the == and != and bool operater compare the differences 
 against
   the attribute v._epsilon. this way the user can adjust the 
 accuracy.
 1.7.1.1  v == s - bool
   # true if all component differ at most by v._epsilon

 How am I as user supposed to manipulate _epsilon? It should be made public.

 well. I thought you rarely want to twiddle with this so I marked it 
 private. I  thought the normal user doesn't want to be bothered with this 
 and the pro can access it.

I'm kind of expecting some expert to pop in and explain how this breaks
mathematical properties of equality (v1 == v2 and v2 == v3 no longer
implies v1 == v3) and how this could result in bugs and pain in real
life code.

 1.8 misc
 ==
 1.8.1  support iter protocol
 1.8.2  str(v) - [x, y, z]
 1.8.3  repr(v) - Vecx, y, z

 Most objects have the same output for str() and repr(). Why do you
 differ here?

 with repr I wanted to make explicitly clear that this is not a list but I 
 thought that the normal str() would look nicer that way. what would you  
 suggest? [x, y, z] for both (or (x, y, z) if we choose to make 
 vectors immutable) or Vector3dx, y, z?

I'm +0.95 for distinct __str__ and __repr__.  str is what you show your
users and should be short and clear, while repr is what you give the
programmers who're debugging and therefore exact types matter.

 1.10 open questions (in no particular order)
 
 1.10.1  a) use radians for all angles
  b) use degrees for all angles

 Degrees, I'd say. The api should be easy to use and letting users
 calculate the rad values before is not that intuitive.

math.radians(180) is not intuitive?  Well, maybe.  You have to know it's
there.

(Can I mention math.hypot?  Nobody knows about math.hypot.  It's a
modest little function that deserves more fame than it gets.)

 I just checked: unfortunately pygame seems to be inconsistent: 
 transform.rotate use degrees and draw.arc uses radians.

Does transform.rotate rotate clockwise or counter-clockwise?  Pydoc
doesn't say.

   * __abs__
 pyeuclid returns the magnitude.
 3DVectorType returns vec3d(abs(x), abs(y), abs(z))
 vectypes and this proposal don't implement __abs__ to avoid confusion

 I'd expect abs() to get the magnitude/length, too.

 I don't so to avoid confusion I wouldn't implement it at all. how do 
 other people feel about this?

I'd expect len(v) to return its length, but (1) that would be a horrible
abuse of the sequence protocol, and (2) Python doesn't allow __len__ to
return a non-integer value, thankfully.

I didn't even know/had forgotten all about __abs__.

 thanks again for the quite thorough feedback.

Thanks for the comprehensive proposal.

Marius Gedminas
-- 
User n.:
A programmer who will believe anything you tell him.


signature.asc
Description: Digital signature


Re: [pygame] Never seen this before

2009-04-25 Thread Marius Gedminas
On Sat, Apr 25, 2009 at 06:33:00AM -0700, Yanom Mobis wrote:
 what does the super() function do?

It's a way to call the superclass version of the method you're
overriding.  (Technically, it's a built-in type, and not a function, but
that's an irrelevant implementation detail).

Read more about it:

 * http://www.python.org/download/releases/2.2/descrintro/#cooperation
 * http://fuhm.net/super-harmful/

Marius Gedminas
-- 
Microsoft's entry in this cavalcade of horrors is Universal Plug and Play
(UPnP).  This is a protocol that allows [...] an end-user system to request a
dynamic port-forwarding from the firewall to the box.  Many network
administrators will probably (rightly) recoil at letting applications on a
Windows box dictate firewall policy.
-- Anthony Baxter


signature.asc
Description: Digital signature


Re: [pygame] Never seen this before

2009-04-25 Thread Marius Gedminas
On Sat, Apr 25, 2009 at 08:17:11AM -0700, Tyler Laing wrote:
 Happens to everyone. It takes time(10 years or 10,000 hours) to get
 good at something. I'm at about year 6-7 and I find while I still make
 silly mistakes, I've become much better at catching them before or
 during testing.  :)

Silly mistakes never go away.

With experience you begin to expect them and check your assumptions more
often.

There have been countless times I've written unit tests for tiny
functions that I couldn't possibly have written wrong, only to discover
that I have in fact made a silly mistake.

Marius Gedminas
-- 
I'm unaware of anyone having implemented even a fraction of H.323 in Python.
Doing so would require a special kind of dedication, and quite possibly a large
amount of whiskey and prescription medication.
-- Anthony Baxter


signature.asc
Description: Digital signature


Re: [pygame] multi-width aalines and aacircles

2009-03-24 Thread Marius Gedminas
On Tue, Mar 24, 2009 at 08:56:16AM -0600, John Krukoff wrote:
  -Original Message-
  From: owner-pygame-us...@seul.org [mailto:owner-pygame-us...@seul.org] On
  Behalf Of Lenard Lindstrom
  Sent: Monday, March 23, 2009 6:07 PM
  To: pygame-users@seul.org
  Subject: Re: [pygame] multi-width aalines and aacircles
  
  None of the SDL_gfx functions has a line width argument that I could see.
 
 Sure, but at least SDL_gfx gives you the tools you need to get there for AA
 lines. A filled polygon, redraw the edges with an AA line, use some AA
 circles to draw caps, and viola!
 
 AA donuts would still be a pain, and require an offscreen buffer, which is
 unfortunate.
 
 And, likely you'd ask for variable width AA bezier curves next, which also
 isn't supported. That one may be because it's hard, though.

How about full Cairo support while we're at it?

;-)

Marius Gedminas
-- 
Programs that write programs are the happiest programs in the world.
-- Andrew Hume


signature.asc
Description: Digital signature


Re: [pygame] Redraw under mouse cursor in HWSURFACE mode

2009-03-02 Thread Marius Gedminas
On Sun, Mar 01, 2009 at 03:19:53PM -0800, Lin Parkh wrote:
 I'm noticing a weird little artifact namely that I get left over 
 fragments of a surface i redraw on to screen where the mouse cursor 
 moves.  It appears as if my code is interacting with whatever controls 
 cursor redraw.

I'm afraid I'm not familiar with this problem.

 I notice that this only happens when i go to fullscreen 
 mode and enable hardware draw (HWSURFACE (not using double buffer right 
 now since not 'flipping display' but rather controling exactly what 
 rectangles get redrawn).

You will get flicker that way, unless you're very careful about how
you're redrawing those rectangles.

 I need HWSURFACE to be on for performance.

It's not always an improvement and could in fact lower performance.
Again, it's a matter of what exactly you're drawing.

 So 
 seems like in HWSURFACE mode the mouse cursor is run differently and is 
 interacting with my redraws (i.e. fails to let them complete well under 
 it). Anyone familiar with this kind of mouse cursor issue in HWSURFACE 
 mode? Thanks

Marius Gedminas
-- 
Cool. Does it also recode ISO10646-1 pcf files into the funny
permutations and subsets used a long time ago in a galaxy far far away
on the planets Isolatinus XV and Koiruski VIII ...
-- Markus Kuhn inquires about libXft


signature.asc
Description: Digital signature


Re: [pygame] surfarray on 64-bit machines

2009-03-01 Thread Marius Gedminas
On Mon, Mar 02, 2009 at 02:06:35PM +1100, René Dudfield wrote:
 hehe, double typo...
 
 'use_arraytype'
 
 http://www.pygame.org/docs/ref/surfarray.html#pygame.surfarray.use_arraytype

That works better, thanks!

I've refactored PySpaceWar's fading title code into three classes now,
one that uses plain PyGame, one that uses Numeric, and one that uses
NumPy.  The last one will be preferred if available.

Marius Gedminas
-- 
main(k){float i,j,r,x,y=-16;while(puts(),y++15)for(x
=0;x++84;putchar( .:-;!/)|IH%*#[k15]))for(i=k=r=0;
j=r*r-i*i-2+x/25,i=2*r*i+y/10,j*j+i*i11k++111;r=j);}
/* Mandelbrot in ASCII. */


signature.asc
Description: Digital signature


Re: [pygame] surfarray on 64-bit machines

2009-02-28 Thread Marius Gedminas
On Fri, Feb 27, 2009 at 08:04:30PM -0800, Lenard Lindstrom wrote:
 Marius Gedminas wrote:
 Since I'm really clueless about
 Numeric/numarray/numpy, please tell me if this code has any obvious
 shortcomings:

   # initialization, done once
   import pygame
   import numpy
   image = pygame.image.load('title.png')   # has an alpha channel
   mask = pygame.surfarray.array_alpha(image)

   # this is done once every frame
   array = pygame.surfarray.pixels_alpha(image)
   alpha = 42.5 # a float varying between 1 and 255
   array[...] = (mask * alpha / 255).astype('b')
   
 Well, alpha and 255 are both scalars, so (mask * (alpha / 255)) saves  
 one intermediate array. Also the preferred NumPy convention is to use  
 dtypes (data-types) rather than type characters: .astype(numpy.uint8).  

I was using Numeric.UnsignedInt8 before, and couldn't find the NumPy
version of that in a hurry.  dir(array) showed me a typecode() method
which returned things like 'b', and so I tried those.

 But arithmetic operations have ufunc equivalents which take an optional  
 output array. This means the astype(), along with its intermediate  
 array, can be removed. It probably also means the intermediate array  
 float array goes away as well. So it is likely this alternative uses no  
 intermediate arrays.

 ## array = pygame.surfarray.pixels_alpha(image)
 alpha = 42.5
 ## array[...] = (mask * alpha / 255).astype('b')
 numpy.multiply(mask, alpha  /  255, pygame.surfarray.pixels_alpha(image))

Unfortunately this gives me a TypeError: return arrays must be of ArrayType

Marius Gedminas
-- 
... Another nationwide organization's computer system crashed twice in less
than a year. The cause of each crash was a computer virus
-- Paul Mungo, Bryan Glough  _Approaching_Zero_
(in 1986 computer crashes were something out of the ordinary.  Win95 anyone?)


signature.asc
Description: Digital signature


Re: [pygame] surfarray on 64-bit machines

2009-02-26 Thread Marius Gedminas
This was a long time ago (shame on me for not finding the time to
investigate this further):

 On Wed, Oct 22, 2008 at 7:23 PM, Marius Gedminas mar...@gedmin.as wrote:
  A user reported that PySpaceWar fails on 64-bit Linux machines if I try
  to scale the alpha channel.  Here's the code (simplified):
 
 import pygame
 import Numeric
 image = pygame.image.load('title.png')   # has an alpha channel
 mask = pygame.surfarray.array_alpha(image).astype(Numeric.Int)
 array = pygame.surfarray.pixels_alpha(self.image)
 alpha = 42.5 # a float between 1 and 255
 array[:] = (mask * alpha / 255).astype(Numeric.UnsignedInt8)
 
  The error happens on the last line, and it says
 
 ValueError: matrices are not aligned for copy
 
  Any ideas?  The code works fine on 32-bit systems.

On Wed, Oct 22, 2008 at 09:28:46PM -0500, Charlie Nolan wrote:
 I may be having this same error.  I've got a bug report with that same
 error message at one point (and on a 64-bit machine), even though it
 works fine on my (32-bit) machine.  Could you try printing out
 array[:].shape?  In my case, I do a sensible slice and somehow end
 up with a 0x600 array.

On a 32-bit machine:

  array[:].shape == array.shape == (333, 83)

On a 64-bit machine:

  array[:].shape == (0, 83)

On Wed, Oct 22, 2008 at 07:46:53PM -0700, Lenard Lindstrom wrote:
 I am curious, but what happens if array[:] is replaced with array[...].  

The code starts working!  Thank you!

 It is a two dimension array, so I am surprised the single index slice  
 [:] even works.

(on 32-bit only, for some reason).

 The alternate form [..] is indifferent to array 
 dimension.

It's a thinko on my part.  I want an in-place assignment, I tend to
write container[:] = new_value, without considering dimensionality at
all.

Cheers!
Marius Gedminas
-- 
A programmer started to cuss
Because getting to sleep was a fuss
As he lay there in bed
Looping 'round in his head
was: while(!asleep()) sheep++;


signature.asc
Description: Digital signature


Re: [pygame] surfarray on 64-bit machines

2009-02-26 Thread Marius Gedminas
On Fri, Feb 27, 2009 at 11:16:28AM +1100, René Dudfield wrote:
 hey,
 
 is it possible to use numpy instead of Numeric?  Numeric really is
 dying now...  even we are going to stop trying to keep it working.

I suppose I should.  Since I'm really clueless about
Numeric/numarray/numpy, please tell me if this code has any obvious
shortcomings:

  # initialization, done once
  import pygame
  import numpy
  image = pygame.image.load('title.png')   # has an alpha channel
  mask = pygame.surfarray.array_alpha(image)

  # this is done once every frame
  array = pygame.surfarray.pixels_alpha(image)
  alpha = 42.5 # a float varying between 1 and 255
  array[...] = (mask * alpha / 255).astype('b')

Cheers!
Marius Gedminas
-- 
Never trust a computer you can't repair yourself.


signature.asc
Description: Digital signature


Re: [pygame] Name self not defined

2009-01-28 Thread Marius Gedminas
On Tue, Jan 27, 2009 at 07:24:13PM -0800, James Paige wrote:
 You can't use self in the def line. Here is how I usually accomplish 
 what you are trying to do:
 
 class Car(Basicsprite): #car class
 def __init__(self, speedarg=(0,0)):
 self.speed = speedarg
 Basicsprite.__init__(self)
 def move(self, speedv=None):
 if speedv==None: speedv = self.speedv
 self.rect = self.rect.move(speedv)
 
 
 But maybe somebody else can suggest a nicer way to do that.

The idiomatic way to express that is 'if speedv is None:'.
See http://www.python.org/dev/peps/pep-0008/

Marius Gedminas
-- 
lg_PC.gigacharset (lg = little green men language, PC = proxima centauri)
-- Markus Kuhn provides an example of a locale


signature.asc
Description: Digital signature


Re: [pygame] Pathfinding

2009-01-26 Thread Marius Gedminas
On Sun, Jan 25, 2009 at 07:16:38PM -0800, Yanom Mobis wrote:
 1) How is pathfinding done?

There are algorithms for it.  Breadth-first search is the simplest one
and works well for grids where the distance between nearby cells is the
same.  Dijkstra is a generalization that works for arbitrary maps.  A*
is essentially Dijkstra with an extra heuristic that makes it work
faster, which is important for large maps.  All of them find the
shortest possible path.

Wikipedia describes them all.

 2) How do you prevent a moving sprite from being caught in a v-shaped
 rut made of obstacles?

You use a pathfinding algorithm.

On Sun, Jan 25, 2009 at 07:20:36PM -0800, Noah Kantrowitz wrote:
 2) Alter the chain length score computation to reduce exploitation.

Could you please translate that to something mere mortals without PhDs
could understand?

On Sun, Jan 25, 2009 at 09:13:28PM -0800, Bill Coderre wrote:
 There are still ways that this can get confused or beaten, of course.
 Until someone comes out with a low-cost traveling-salesman solver,
 however, whatever algorithm you find will have some snags.

I don't see how traveling salesman applies here.  Could you elaborate?

My personal snag with A* is that the NPCs seem to know too much about
the map and directly walk the most optimal path without exploration.

Marius Gedminas
-- 
niemeyer philiKON: I'm changing ZCML to parse files twice as fast..
philiKON niemeyer, weee
benjiooh, I like it!
philiKON how do you do that?
niemeyer Lying
philiKON i knew it
* benji cries fowl!
-- #zope3-dev


signature.asc
Description: Digital signature


Re: [pygame] fast sqrt? and profiling

2009-01-21 Thread Marius Gedminas
On Wed, Jan 21, 2009 at 07:45:08AM -0800, Ian Mallett wrote:
 math.hypot() is good for distance calculation.

I did some microbenchmarks a while ago, and math.hypot() was faster than
x**2 + y**2.  I was surprised.

Still, avoiding O(n**2) algorithms would be best.

Marius Gedminas
-- 
Anything can be made to work if you fiddle with it long enough.


signature.asc
Description: Digital signature


Re: [pygame] unit and doc testing questions

2009-01-15 Thread Marius Gedminas
On Thu, Jan 15, 2009 at 07:44:00AM +1100, René Dudfield wrote:
 it can be good to mark your slow tests somehow, so you can run them
 separately.
 
 With pygame we extend the python unittest module to allow specifying
 tags(categories) for tests.  This allows us to also use interactive
 tests, and other tests you may not want to run every time.
 
 However you could just move them into a different directory, and
 change your test runner to look in a different directory given a cmd
 line option... you don't need any fancy testing framework.

I prefer phrasing it as Python lets you trivially create your own fancy
testing framework in 15 minutes.  ;-)

 doctests can be a quick way to do testing.  You can create your code
 in the interactive interpreter, then paste the output into the doc
 strings.  You can use doc tests, and unittests together too... so the
 doc tests can be run in a unittest test runner.

This is, in fact, my preferred mode of testing.  Example:
http://mg.pov.lt/pyspacewar/trac/browser/trunk/src/pyspacewar/tests/test_world.py

(I dislike long doctests in the docstrings of real functions, they
obscure the code too much and make it hard to read.  Short doctests
there are fine.  Long doctests belong in a separate test module.)

 On Thu, Jan 15, 2009 at 5:57 AM, Jake b ninmonk...@gmail.com wrote:
  I say 'compiling', because I found a method in the python cookbook that says
  you want to ensure your modules tests are run each time your module is
  compiled.
 
  It pretty much does if module is imported, but not main script, and needs
  recompile(because was changed): then run tests

This sounds very interesting.  Do you have a URL?  I tried searching on
http://code.activestate.com/recipes/langs/python/, but didn't find
anything.

Marius Gedminas
-- 
Writing setattr hooks properly is a black art. Writing persistent
setattr hooks is more like hearding bees blindfolded...
-- Casey Duncan


signature.asc
Description: Digital signature


Re: [pygame] unit and doc testing questions

2009-01-14 Thread Marius Gedminas
On Tue, Jan 13, 2009 at 06:44:10AM -0600, Jake b wrote:
 I'm learning about doctest, and unittests. Now if I create a file, like
 pygame/test/rect_test.py , is there and easy way to import the project in
 its parent directory?

Make sure it's in sys.path, then import using the absolute package name.

(Hint: 'pygame' is a bad name for a project, it will clash with the
pygame library.)

 I thought import ../mymodule might work, ( but at least not in 2.5  ).
 Then I got it to work appending sys.path.

 1) What is your advice on imports from test files? ( Do you append your
 sys.path, or something else? )

The test runner makes sure your project is importable by adding it to
sys.path, if necessary.

 2) Do you have two seperate unittests ? (A) One is ran every time source
 files are compiled, and a second, (B) slower one is ran at a longer interval
 for slow tests ?

Such separation is rarely necessary.

I generally have a separate test module for every code module (with
separate tests for each function/method), and then a top-level script
that imports all test module, collects all the tests into a single
unittest.TestSuite, and runs them.  http://pypi.python.org/pypi/nose can
be used instead of a custom script, but I got used to writing those
before nose was available and so far hadn't gotten to try it out.

Compiling is a very nebulous, automatic and invisible step in Python.
I run the tests whenever I want to get some feedback on my code, and
also before committing my changes to the source control system (you have
one, right?)

 3) Other advice relating to testing ?

Keep them short and fast.

Marius Gedminas
-- 
Microsoft has performed an illegal operation and will be shut down.
-- Judge Jackson


signature.asc
Description: Digital signature


[pygame] surfarray on 64-bit machines

2008-10-22 Thread Marius Gedminas
A user reported that PySpaceWar fails on 64-bit Linux machines if I try
to scale the alpha channel.  Here's the code (simplified):

import pygame
import Numeric
image = pygame.image.load('title.png')   # has an alpha channel
mask = pygame.surfarray.array_alpha(image).astype(Numeric.Int)
array = pygame.surfarray.pixels_alpha(self.image)
alpha = 42.5 # a float between 1 and 255
array[:] = (mask * alpha / 255).astype(Numeric.UnsignedInt8)

The error happens on the last line, and it says

ValueError: matrices are not aligned for copy

Any ideas?  The code works fine on 32-bit systems.

Marius Gedminas
-- 
If C gives you enough rope to hang yourself, C++ gives you enough rope to bind
and gag your neighborhood, rig the sails on a small ship, and still have enough
rope left over to hang yourself from the yardarm.


signature.asc
Description: Digital signature


Re: [pygame] Good code for text wrapping?

2008-09-21 Thread Marius Gedminas
On Mon, Sep 22, 2008 at 02:41:28PM +1000, René Dudfield wrote:
 oops, I also forgot...
 - CSS3 and CSS4 support.
 - a pony.

I'm sure the last one could be implemented easily, if you had SVG support
and Javascript.

Marius Gedminas
-- 
In short, at least give the penguin a fair viewing. If you still don't
like it, that's ok: that's why I'm boss. I simply know better than you
do.
-- Linus what, me arrogant? Torvalds, on c.o.l.advocacy


signature.asc
Description: Digital signature


Re: [pygame] Good code for text wrapping?

2008-09-16 Thread Marius Gedminas
On Tue, Sep 16, 2008 at 12:11:45PM +1000, René Dudfield wrote:
 The cookbook has this entry, but it doesn't work with new lines.
 http://www.pygame.org/wiki/TextWrapping
 
 Anyone have any code like this that supports new lines?

http://mg.pov.lt/pyspacewar/trac/browser/trunk/src/pyspacewar/ui.py#L466

Output example: http://mg.pov.lt/pyspacewar/pyspacewar-help-screen.png

It's GPL-ed, feel free to use or ask me for a licence change if that's
not suitable.

Marius Gedminas
-- 
If you are smart enough to know that you're not smart enough to be an
Engineer, then you're in Business.


signature.asc
Description: Digital signature


Re: [pygame] my 3d planet game

2008-06-12 Thread Marius Gedminas
On Thu, Jun 12, 2008 at 06:20:25PM +1000, Astan Chee wrote:
 I've been working on my 3d planet game and now it is finally done. For  
 those of you interested the source can be found at:
 http://code.google.com/p/planetgame/

 Also, this is kinda like a post-prototype, so any feedback is much  
 appreciated.

The main window doesn't fit on my 1280x800 screen.

If I blindly tab down there and press Enter, without changing any of the
default settings, I get this exception:

Traceback (most recent call last):
  File wxSol.py, line 1925, in OnAddObj
orbit = int(self.txt_orb_time.GetValue())
ValueError: invalid literal for int() with base 10: '0.6'

Cheers!
Marius Gedminas
-- 
Special bonus feature: absolutely nowhere in RetchMail's code is there an
arbitrary 3-second sleep(). Wow! What other mail retriever can say that? (Hint:
not fetchmail.)
-- http://open.nit.ca/wiki/index.php?page=RetchMail


signature.asc
Description: Digital signature


Re: [pygame] Battery Life

2008-06-03 Thread Marius Gedminas
On Mon, Jun 02, 2008 at 09:31:34PM -0700, The dob wrote:
 I'm running pygame on Maemo (linux on a mobile device). In my main
 game loop I am using pygame.event.wait() and sleeping all other
 running threads. To me this means that until there is an event, the
 process should not consume very much processor time. Unfortunately,
 the battery on the device still drains very quickly (about 4 hours
 when idle, as compared to 2 days while other applications are idle).
 
 Running 'top' does not indicate that the idle process is consuming
 very much processing power either.

What does strace show your process doing?

Marius Gedminas
-- 
It's not illegal to disagree with my opinions (*).
[...]
(*) Although it obviously _should_ be. Mwhaahahahahaaa... You unbelievers
will all be shot when the revolution comes!
-- Linus Torvalds


signature.asc
Description: Digital signature


Re: [pygame] your opinion: singleton-pattern vs. modules vs. classes

2008-03-04 Thread Marius Gedminas
Hi,

On Mon, Mar 03, 2008 at 05:09:12PM +0100, Olaf Nowacki wrote:
 probably most of you use an mvc aproach for writing games with pygame.
 i would like to know how you implement these (mvc-) objects:
 
 - as classes
 - as modules or
 - as singleton-pattern classes?

Classes.  I see no point to add a restriction of at most one game in a
Python process.

Regards,
Marius Gedminas
-- 
Computers are not intelligent.  They only think they are.


signature.asc
Description: Digital signature


Re: [pygame] LAN vs Internet

2008-01-31 Thread Marius Gedminas
On Thu, Jan 31, 2008 at 12:43:45PM -0500, David wrote:
 I have been making gentle progress towards a networking module for my
 game, but have doubts about the value of my approach.
 
 I have been working toward the goal of having a module that will find
 peers on a LAN, via a UDP discovery process, or on an internet server.
 The game is basically a one-on-one contest, so the player-finding
 process is just to setup matches, and not as a many-playered universe.
 
 The UDP discovery process makes the whole module much more complex,
 and I am wondering whether it has any real value.

Perhaps you could make it simpler by reusing an existing implementation
of Zeroconf, e.g. Avahi:
http://en.wikipedia.org/wiki/Avahi_(software)

It's LGPL, so no licence taint.  It's also cross-platform.  And it has
Python bindings.  OTOH it might make the distribution of the game
somewhat more complicated (another library to install).

 Do any of you play network games on a LAN that is *not* internet
 connected?  How common is that usage case?

I don't play multiplayer games much.

 I ask, because if LANs are generally internet connected, the game can
 just use an internet server to find competitors, including those
 within that LAN.

That would require the server to proxy all communications between
players, to work with NATed LANs.  Is the latency decrease worth
maintaining complex code?  You decide.

Marius Gedminas
-- 
Never assume the reader has read the subject line.


signature.asc
Description: Digital signature


Re: [pygame] Good code

2007-12-07 Thread Marius Gedminas
On Thu, Dec 06, 2007 at 05:52:59PM +0100, Mundial 82 wrote:
 Thanks to all your help, my little newbie project is shaping up. So now I 
 have a different question: being a non-programmer, I like to learn by 
 reading other people's code when it is available. I find it difficult, 
 though, to understand what are the good practices and structures that are 
 present in good coding.

Hint: it's whatever makes reading and understanding the code easier.
Usually the best way to do that is to split the code into separate
chunks (such as modules, classes and functions) that can be reasoned
about and used without having to remember what's inside them.

 So, for the code reading newbies: what are your examples of nice, clean, 
 elegant code for games that I could take a look at (beyond the pygame.org 
 tutorials, that is)?

I've tried to make pyspacewar code nice and clean:
http://mg.pov.lt/pyspacewar/trac/browser/trunk/src/pyspacewar/

Regards,
Marius Gedminas
-- 
lg_PC.gigacharset (lg = little green men language, PC = proxima centauri)
-- Markus Kuhn provides an example of a locale


signature.asc
Description: Digital signature


Re: [pygame] Fullscreen Display

2007-12-04 Thread Marius Gedminas
Hi,

On Tue, Dec 04, 2007 at 08:50:53PM +, Matt Smith wrote:
 I have seen the following line used to initialise a full screen display in 
 a number of books and tutorials:

 screen = pygame.display.set_mode((xsize, ysize), FULLSCREEN, 32)

 When I use it in my program then I get the following error:

 Traceback (most recent call last):
   File bouncing_ball_OOP.py, line 63, in module
 screen = pygame.display.set_mode((xsize, ysize), FULLSCREEN, 32)
 NameError: name 'FULLSCREEN' is not defined

You need to import it, usually with

  from pygame.locals import *

near the top of your program.

 I expected the set_mode method to treat the FULLSCREEN as an argument and 
 not as a variable/ object.

That's not how Python works.

Cheers!
Marius Gedminas
-- 
If the code and the comments disagree, then both are probably wrong.
-- Norm Schryer


signature.asc
Description: Digital signature


Re: [pygame] This showed up in pygame-users@seul.org

2007-11-21 Thread Marius Gedminas
On Wed, Nov 21, 2007 at 04:48:20PM +0100, Laura Creighton wrote:
 Anybody want to come explain twisted to somebody who just wants
 to network his game?  Alas pygame-users is not a mailman mailing
 list, and Activestate seems to have stopped archiving it in August,
 so there is no way I know of to read the whole thread.

I've seen a couple of blog posts about integrating PyGame with twisted's
main loop.  Here's one:

  http://bob.pythonmac.org/archives/2005/04/17/twisted-and-foreign-event-loops/

And here's some source code for a VNC viewer that's built with twisted
and pygame: http://homepage.hispeed.ch/py430/python/

Marius Gedminas
-- 
A real friend isn't someone you use once and then throw away.
A real friend is someone you can use over and over again.


signature.asc
Description: Digital signature


Re: [pygame] Reverse Compiling

2007-08-08 Thread Marius Gedminas
On Tue, Aug 07, 2007 at 03:52:51PM -0700, Ian Mallett wrote:
 I was backing up my files onto a CD when I ironically deleted an original
 .py file for a module leaving the .pyc version.  My question here, is can
 you reverse compile it?  I want to make some changes.

http://www.crazy-compilers.com/decompyle/

Marius Gedminas
-- 
If it weren't for the last minute, nothing would get done.


signature.asc
Description: Digital signature


Re: [pygame] What is wrong with this

2007-07-14 Thread Marius Gedminas
On Sat, Jul 14, 2007 at 02:31:20PM -0400, Jason Coggins wrote:
 I am trying to create a very simple program that makes a list of the
 music files in a folder, sorts the files into alphabetical order and
 then plays each file in the folder.  The program below plays the first
 file in the folder and then freezes without playing any of the
 remaining songs.

I'm glad you found the problem, but I cannot refuse the opportunity to
offer some generic Python style suggestions.

 
 
 import pygame, os
 
 def findFiles(location):
 files = []
 for item in os.listdir(location):
 files.append(item)

This is a bit pointless.  You're taking a list of files and converting
it to another list, one item at a time.

files = os.listdir(location)

would work perfectly well.

 files.sort()
 return files

(And if you don't care about older Python versions, you could do

  def findFiles(location):
  return sorted(os.listdir(location)

)

 def playMusic(music)
 clock=pygame.time.Clock()

I cringe when I see an assignment statement squished together without
any spaces around the '='.

 pygame.mixer.music.load(music)
 pygame.mixer.music.play(0, 0.0)
 while pygame.mixer.music.get_busy():
 clock.tick(300)
 return

Empty returns at the end of a function are a bit pointless.

 def main():
 pygame.init()
 pygame.mixer.init()
 destinationPath = /home/owner/Desktop/playList
 os.chdir(destinationPath)
 playList = []

This assignment is pointless.  You're reassigning a different value to
playList on the very next line.

 playList = findFiles(destinationPath)
 for item in playList:
 playMusic(item)
 
 

Cheers!
Marius Gedminas
-- 
C, n:
A programming language that is sort of like Pascal except more like
assembly except that it isn't very much like either one, or anything
else.  It is either the best language available to the art today, or
it isn't.
-- Ray Simard


signature.asc
Description: Digital signature


Re: [pygame] I have a quick question... again...

2007-06-19 Thread Marius Gedminas
On Tue, Jun 19, 2007 at 04:34:15PM -0400, Charles Joseph Christie II wrote:
 On Sunday 17 June 2007 08:30:04 pm Greg Ewing wrote:
  I once did a true 3D tetris for the Mac. It was
  quite an interesting experience, both to implement
  and to play. Some day I'll dig it out and make a
  pygame version...
 
 How do you do 3D tetris? o.O

http://en.wikipedia.org/wiki/Blockout

Marius Gedminas
-- 
Perl is hard for most people to write. They write PERL or Pearl.
-- Abigail


signature.asc
Description: Digital signature


Re: [pygame] Smooth Scaling for Terrain Generation

2007-06-16 Thread Marius Gedminas
On Sat, Jun 16, 2007 at 12:33:10AM -, [EMAIL PROTECTED] wrote:
 I fiddled with a different terrain generation algorithm, this one based on
 using Pygame to do something like Conway's Game of Life. That is, I draw
 some random shapes of grass on water on a 100x100 image, then iterate
 each pixel through a Life-like process to build a grass/sand/water map.
 The results look OK, and I was thinking it was reasonably simple and
 fast... but it assumes a 100x100 image. My program uses 1000x1000 zones.
...
 I'd also be open to different ways to generate terrain entirely.

Check out http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

Marius Gedminas
-- 
Si fractum non sit, noli id reficere.


signature.asc
Description: Digital signature


Re: [pygame] I have a quick question... again...

2007-06-16 Thread Marius Gedminas
On Sat, Jun 16, 2007 at 09:32:09AM -0700, Casey Duncan wrote:
 On Jun 16, 2007, at 8:56 AM, Laura Creighton wrote:
 [..]
 
 If you use Model-View-Controller like separation of your code,
 None.  All your changes will be in the drawing.
 
 I'm curious how many of you actually employ MVC using pygame, since  
 the library encourages mixing the model and view via sprites. I'd be  
 interested to see a canonical example of a pygame that uses MVC.

I don't know about canonical, but PySpaceWar uses pure MVC.  I think; I
never fully understood the controller part of it; my views are often
also controllers.

http://mg.pov.lt/pyspacewar/http://mg.pov.lt/pyspacewar/

There were two reasons for making the model independent of views:

  * I wanted beautiful and understandable code
  * I want to add network play at some undetermined point in the future

 MVC has strong advantages when you need to present and interact with  
 the same data in multiple ways, but often in simple games data is  
 only presented a single way. Using MVC has advantages for unit  
 testing as well, but how many pygames actually employ unit tests in a  
 meaningful way?

For some low-level functions (e.g. vector math) unit tests were rather
useful.  Also, I couldn't have refactored the AI code that Ignas
Mikalajūnas wrote for me without writing a set of unit tests for it.
Other than that, my initial resolution to have everything covered by
unit tests evaporated pretty rapidly when I got caught in the frenzy of
prototyping the fun stuff.

 Also, is unit testing something that the gaming  
 industry at large embraces?

(I'm completely clueless about the gaming industry.)

 I'm curious how widespread these practices really are in the pygame  
 community, not to make a point for or against them, but to better  
 understand theory vs. practice.

Marius Gedminas
-- 
Never trust an operating system you don't have sources for.


signature.asc
Description: Digital signature


Re: [pygame] I have a quick question... again...

2007-06-16 Thread Marius Gedminas
On Sat, Jun 16, 2007 at 01:27:37PM -0400, Charles Joseph Christie II wrote:
  I don't know about canonical, but PySpaceWar uses pure MVC.  I think; I
  never fully understood the controller part of it; my views are often
  also controllers.
 
  http://mg.pov.lt/pyspacewar/http://mg.pov.lt/pyspacewar/

Gaah, obviously it should have been just http://mg.pov.lt/pyspacewar/
Copying and pasting URLs from Firefox to GNOME Terminal sometimes has
this strange delay that makes me thing I didn't press the middle mouse
button, so I do it again.

  There were two reasons for making the model independent of views:
 
* I wanted beautiful and understandable code
* I want to add network play at some undetermined point in the future
 
 I'll take a look at that. But when you say making the model independant of 
 views, what exactly do you mean?

Model objects have no references to view objects.

You can take the Python modules that implement the game model of
PySpaceWar (world.py, game.py, ai.py) and build a different user
interface without changing those modules.  Or build a network server
that doesn't have any drawing code.  In theory.  I haven't attempted
either, so it's possible that some flaw in the design may require
modifications to the model classes to support alternative views.

 What's unit testing? I wouldn't be surprised if I knew what it was, but 
 didn't 
 know what it was called. I also wouldn't be surprised if I never had the 
 slightest idea what it was, either.

It's the programming equivalent of putting your answers into the
original math equation to make sure you haven't made any silly mistakes
while solving the problem.

Dive Into Python has two chapters devoted to unit testing (and
test-first programming, which is a somewhat separate thing):
http://www.diveintopython.org/unit_testing/index.html
http://www.diveintopython.org/unit_testing/stage_1.html

Marius Gedminas
-- 
1 + 1 = 3
-- from a Microsoft advertisement


signature.asc
Description: Digital signature


Re: [pygame] 'Shining Sea' source code

2007-05-31 Thread Marius Gedminas
On Wed, May 30, 2007 at 10:02:34PM -, [EMAIL PROTECTED] wrote:
  The game starts, but I cannot control anything. I believe you
  mentioned W, A, S, D keys?  Nothing happens.  When I kill the game,
  I get this traceback: if pygame.mixer.music.get_busy():
  KeyboardInterrupt (BTW there's no sound or music.)
...
 I made the ZIP file directly from a working set of code and just zipped up
 the whole directory, with all the music etc.. Is there some reason the
 code wouldn't be portable? Hmm... the music is in MIDI; does Ubuntu's
 Pygame support that?

That could be it.  I'm pretty sure this dinky laptop soundcard doesn't
have any MIDI capability of its own, and today's Linux systems don't
provide a software synthesizer out of the box (you can get one, but only
if you run it manually).

*tests*

Yes, that was it.  I renamed the 'music' directory so the game wouldn't
find it, and I had no problems after that.

Marius Gedminas
-- 
The death rate on Earth is:  (computing)  One per person.


signature.asc
Description: Digital signature


Re: [pygame] Need help testing Slingshot rc2

2007-05-26 Thread Marius Gedminas
On Fri, May 25, 2007 at 07:46:32AM -0400, Charles Joseph Christie II wrote:
 On Friday 25 May 2007 04:23:24 am Rikard Bosnjakovic wrote:
  On 5/24/07, Charles Joseph Christie II [EMAIL PROTECTED] wrote:
   It segfaulted when trying to find some timidity configs.
 
  Sounds very unlikely, and OTOH: strace is not a good tool for finding
  segmentation violations. But you can try adding the -f option to
  strace (follow forks) and see what happens.
 
 Same thing, it shows a bunch of sound related things and the timidity config 
 file is the last thing on the list before segmentation fault. Because it 
 doesn't dump a core, gdb was no help either _

If you run 'ulimit -c unlimited' before you run python Slingshot.py,
then you ought to get a core file.

Marius Gedminas
-- 
To stay awake all night adds a day to your life.
-- Stilgar (Frank Herbert _Children_of_Dune_)


signature.asc
Description: Digital signature


Re: [pygame] Need help testing Slingshot rc2

2007-05-25 Thread Marius Gedminas
On Thu, May 24, 2007 at 09:04:48PM +0200, John Eriksson wrote:
 Please, help me test Slingshot once more and tell me what you think.

There's a typo in Tutorial 2: nuclear wast pods.  And another one in
3: cant.  Tutorial 4 also misspels waste as wast.

A pair of keys for controlling the torpedo speed would be nice -- not
all mice have wheels.

Marius Gedminas
-- 
IBM motto: If you can't read our assembly language, you must be
borderline dyslexic, and we don't want you to mess with it anyway
-- Linus Torvalds


signature.asc
Description: Digital signature


Re: [pygame] Need feed back on new game!

2007-05-23 Thread Marius Gedminas
On Tue, May 22, 2007 at 09:11:01PM +0200, Rikard Bosnjakovic wrote:
 On 5/22/07, John Eriksson [EMAIL PROTECTED] wrote:
 
 Could you try downloading it again? (I can't for some reason start my
 vmware windows right now.)
 
 pygame.org seems to be dead at the moment.

Still spewing SQL errors all over the place here.

Marius Gedminas
-- 
Unix for stability;
Macs for productivity;
Palm for mobility;
Windows for Solitaire


signature.asc
Description: Digital signature


Re: [pygame] Fixed width font

2007-05-19 Thread Marius Gedminas
On Sun, May 20, 2007 at 12:54:13AM +1000, Alex Holkner wrote:
 Will McGugan wrote:
 Is there any way I can get a fixed width font accross all platforms, 
 without bundling the script with a ttf?
 
 I'm using 'courier new' on Windows, but the exact look of the font is 
 not too important.
 Courier New is installed on all platforms:

pedantic
Um, not precisely.

For example, on many Linux systems you will not find Courier New.  There
will probably be an alias of that name, to some other fixed-width font.
There will also be a generic alias 'Monospace'.
/pedantic

 it is one of Microsoft's 
 core web fonts,

Yes.

 and is required by PDF applications.

pedantic
The PDF 1.4 spec (the last one I read) requires the availability of some
14 fonts, but Courier New was not one of them (plain Courier was, though).
That doesn't mean these fonts must be present on all platforms, the PDF
viewer may have those fonts bundled with it.  Heck, a PDF viewer is not
necessarily installed on all platforms.
/pedantic

I agree that 'Courier New' ought to be a pretty safe bet.

Marius Gedminas
-- 
Any sufficiently advanced technology is indistinguishable from a rigged demo.
- Andy Finkel, computer guy


signature.asc
Description: Digital signature


[pygame] Missing fonts on Ubuntu Edgy

2007-03-01 Thread Marius Gedminas
This is on Ubuntu Edgy:

 import pygame
 pygame.init()
open /dev/sequencer: No such file or directory
(6, 0)
 pygame.version.ver
'1.7.1release'

 pygame.font.match_font('Verdana')
'/usr/share/fonts/truetype/freefont/FreeSansOblique.ttf'

I do have Verdana:

$ fc-match -v Verdana|grep file
file: /usr/share/fonts/truetype/msttcorefonts/verdana.ttf(s)

however /usr/share/fonts/truetype/msttcorefonts/ does not have a
fonts.dir, nor fonts.scale, nor fonts.cache-1.  Only fonts.cache-1 in my
home directory knows about Verdana.

I imagine I would have the same problem with any fonts installed into
~/.fonts/

Suggested fix: have pygame/sysfont.py parse ~/.fonts.cache-1.  (There's
a slight complication: most fonts.cache-1 files have three fields per
line (font name, some number, font properties), while ~/.fonts.cache-1
has four (font name, some number, some other number, font properties).

Actually, as I recall from a discussion about a different bug[1] (that
still plagues me in 1.7.1), the CVS version of PyGame uses fc-list to
find fonts on Unix systems, so this bug should be already fixed in CVS.

[1] http://aspn.activestate.com/ASPN/Mail/Message/pygame-users/2970161

Marius Gedminas
-- 
If Linux doesn't have the solution, you have the wrong problem.


signature.asc
Description: Digital signature


[pygame] Re: Missing fonts on Ubuntu Edgy

2007-03-01 Thread Marius Gedminas
On Thu, Mar 01, 2007 at 04:46:01PM +0200, Marius Gedminas wrote:
 Suggested fix: have pygame/sysfont.py parse ~/.fonts.cache-1.  (There's
 a slight complication: most fonts.cache-1 files have three fields per
 line (font name, some number, font properties), while ~/.fonts.cache-1
 has four (font name, some number, some other number, font properties).

 Actually, as I recall from a discussion about a different bug[1] (that
 still plagues me in 1.7.1), the CVS version of PyGame uses fc-list to
 find fonts on Unix systems, so this bug should be already fixed in CVS.
 
 [1] http://aspn.activestate.com/ASPN/Mail/Message/pygame-users/2970161

For those who do not want to wait for 1.8, here's a patch that fixes
this problem (and the other one too) in 1.7.1: attached.

Marius Gedminas
-- 
I code in vi because I don't want to learn another OS. :)
-- Robert Love
Patch for pygame 1.7.1:

 * Also parse ~/.fonts.conf-1 on Unix systems to find more fonts (needed
   to find many TTF fonts on Ubuntu Edgy).
 * Fix font style parsing in fonts.conf-1 files (bug described in
   http://aspn.activestate.com/ASPN/Mail/Message/pygame-users/2970161).

--- sysfont.py.orig 2007-03-01 16:25:04.0 +0200
+++ sysfont.py  2007-03-01 16:46:51.0 +0200
@@ -128,21 +128,25 @@
 
 
 #read the fonts from a unix 'fonts.cache-1' file
-def read_unix_fontscache(dir, file, fonts):
+def read_unix_fontscache(dir, file, fonts, nfields=3):
 file = open(os.path.join(dir, file))
 for line in file.readlines():
 try:
-font, num, vals = line.split(' ', 2)
+fields = line.split(' ', nfields-1)
 except ValueError:
 continue
-font = font.replace('', '')
+font = fields[0].replace('', '')
 if font[-4:].lower() not in [.ttf, .ttc]:
 continue
 font = os.path.join(dir, font)
-vals = vals.split(':')
+
+vals = fields[-1].split(':')
 name = _simplename(vals[0][1:])
-bold = vals[1].find('Bold') = 0
-italic = vals[1].find('Italic') = 0
+bold = italic = 0
+for prop in vals[1:]:
+if prop.startswith('style='):
+bold = prop.find('Bold') = 0
+italic = prop.find('Italic') = 0
 _addfont(name, bold, italic, font, fonts)
 
 
@@ -182,6 +186,13 @@
 for p in paths:
 if os.path.isdir(p):
 os.path.walk(p, _fontwalk, fonts)
+filename = os.path.expanduser('~/.fonts.cache-1')
+try:
+# Unlike other fonts.cache-1 files, this one has four fields per line
+# rather than three
+read_unix_fontscache('', filename, fonts, nfields=4)
+except IOError:
+pass
 return fonts
 
 


signature.asc
Description: Digital signature


Re: [pygame] alpha channel in font-rendered Surfaces

2007-02-15 Thread Marius Gedminas
On Thu, Feb 15, 2007 at 07:40:13AM -0600, Brendan Speer wrote:
 On 2/15/07, Goran [EMAIL PROTECTED] wrote:
 I have a problem when trying to fade-in a text.
 
 Using the alpha-channel when blitting in an image works fine, but not a
 surface generated by Font.render().

 Surface.convert_alpha creates per-pixel alpha values.
 
 From the Surface.set_alpha help: 'This value is different than the per 
 pixel
 Surface alpha. If the Surface format contains per pixel alphas, then this
 alpha value will be ignored. If the Surface contains per pixel alphas,
 setting the alpha value to None will disable the per pixel transparency.'
 
 In order to do what you're asking, you need to look at Sufarray. and
 manipulate each per-pixel alpha individually,

I do that in PySpaceWar with Numeric:
http://mg.pov.lt/pyspacewar/trac/browser/trunk/src/pyspacewar/ui.py?rev=260#L817

(The code is GPLed.)

 or you can use convert()
 instead of convert_alpha() (I think...)

There's a fallback in PySpaceWar that does this when Numeric is not
installed.

Marius Gedminas
-- 
11. Are you at least tracking the number of users of retchmail?

As far as I know, retchmail has exactly three users. 
-- http://open.nit.ca/wiki/index.php?page=RetchMail


signature.asc
Description: Digital signature


Re: [pygame] sdl_ttf font render failed

2007-01-31 Thread Marius Gedminas
On Wed, Jan 31, 2007 at 03:42:37PM +0100, Simon Oberhammer wrote:
 hi pygamers,
 whenever I use font.render() with the antialias param set to False I
 get this error:
 
  File pysssi_dist.py, line 258, in printf
s = self.print_font.render( str,False,self.color1)
 pygame.error: SDL_ttf render failed

Actually, you only get this if you call font.render with a string that
contains a space character, and with antialias set to False.

Seems to be a known bug in the SDL_ttf version that is in Ubuntu.

Marius Gedminas
-- 
Always proofread carefully to see if you any words out.


signature.asc
Description: Digital signature


Re: [pygame] Masking Test: Simulated Lighting

2007-01-21 Thread Marius Gedminas
On Sun, Jan 21, 2007 at 10:17:32PM +0100, Nicola Larosa wrote:
  Kris Schnee wrote:
  I was thinking about how to simulate a lighting effect in Pygame: a 
  character with a portable light source in a dark room.
 
 Marius Gedminas wrote:
  This reminds me of something...
  
  Here it is: Escape from Anathema Mines from the second Ludum Dare
  http://www.imitationpickles.org/ld48
 
 URL changed, no redirect, bad Phil Hassey broke da interweb. ;-)
 
 http://www.imitationpickles.org/ld486/

More likely that was me botching the copy and paste.

 You've obviously never tried to reverse engineer a chip using an electron
 microscope. [...] That's like looking at the grains of sand on a beach
 and trying to map out the coastline of Hawaii. -- Cutie Pi, July 2006

Nice one.  Mind if I steal it?

Marius Gedminas
-- 
Press any key to continue, or any other key to cancel.


signature.asc
Description: Digital signature


[pygame] PySpaceWar 0.9.3

2006-12-25 Thread Marius Gedminas
Merry Christmas, everyone!

Here's my gift to you all: PySpaceWar 0.9.3.  Biggest new feature is
customizable keyboard controls.  Well, you could say it's the only new
feature, as a configuration file is pretty much required once you have
this kind of customization.

Get it at http://mg.pov.lt/pyspacewar/

Testing, feedback of any kind, or return gifts (such as pretty artwork
or sound effects) would be appreciated.

Cheers!
Marius Gedminas
-- 
You can't have megalomania.  *I* have megalomania.
-- Joe Bednorz


signature.asc
Description: Digital signature


[pygame] Font.render barfs on spaces

2006-12-16 Thread Marius Gedminas
Hi,

Pygame 1.7.1 on my Ubuntu Linux system is unable to render a space in the
default font, when anti-aliasing is disabled:

 import pygame
 pygame.version.ver
'1.7.1release'
 pygame.font.init()

 f = pygame.font.Font(None, 10)
 f.render( , 0, (255, 255, 255))
Traceback (most recent call last):
  File stdin, line 1, in ?
pygame.error: SDL_ttf render failed

Other characters work fine:

 f.render(a, 0, (255, 255, 255))
Surface(4x7x8 SW)

Space also works if I enable anti-aliasing:

 f.render( , 1, (255, 255, 255))
Surface(2x7x32 SW)

Is this a bug?

Marius Gedminas
-- 
The IQ of the group is the lowest IQ of a member of
the group divided by the number of people in the group.


signature.asc
Description: Digital signature


Re: [pygame] Galcon linux version

2006-12-13 Thread Marius Gedminas
On Wed, Dec 13, 2006 at 12:28:45PM +, Adam Bark wrote:
 Yay linux! Is it actually possible to play a net game in the demo? When I
 ran the win version on cedega I typed a name in then got an error about it
 not exiting properly (can't remember exactly but I can reproduce it if you
 want to see it). In linux however I get this error.
 
 Traceback (most recent call last):
  File main.py, line 540, in ?
  File pgu/engine.py, line 113, in run
  File pgu/engine.py, line 178, in loop
  File pgu/engine.py, line 82, in fnc
  File mygui.py, line 122, in event
  File pgu/gui/app.py, line 147, in event
  File pgu/gui/container.py, line 185, in event
  File pgu/gui/widget.py, line 300, in _event
  File pgu/gui/theme.py, line 321, in func
  File pgu/gui/container.py, line 185, in event
  File pgu/gui/widget.py, line 300, in _event
  File pgu/gui/theme.py, line 321, in func
  File pgu/gui/container.py, line 185, in event
  File pgu/gui/widget.py, line 300, in _event
  File pgu/gui/theme.py, line 321, in func
  File pgu/gui/container.py, line 185, in event
  File pgu/gui/widget.py, line 300, in _event
  File pgu/gui/theme.py, line 321, in func
  File pgu/gui/container.py, line 185, in event
  File pgu/gui/widget.py, line 300, in _event
  File pgu/gui/theme.py, line 321, in func
  File pgu/gui/input.py, line 92, in event
 LookupError: unknown encoding: latin-1

IIRC py2exe doesn't bundle the 'codecs' module by default, and you have to
edit some .ini file and explicitly ask for it to be included.

My memory of everything is a bit hazy, since I haven't used py2exe for
ages, but this sounds like the problem I've seen.  I'm sure there's a
FAQ somewhere.

Marius Gedminas
-- 
Woe unto them that rise up early in the morning -- Isaiah 5:11


signature.asc
Description: Digital signature


Re: [pygame] I can handle more of a one monitor?

2006-10-10 Thread Marius Gedminas
On Mon, Oct 09, 2006 at 05:21:38PM -0700, Jasper wrote:
 I had a friend try my game on a dual monitor system once, and it 
 wouldn't work.  I recall at the time someone here said SDL just didn't 
 support dual monitors, so there was no way to make it work short of 
 extending SDL.

My experience was that pygame.display.list_modes() returned the
dual-head desktop as the largest mode (2048x768), which then caused an
SDL crash if I tried to pass it to pygame.display.set_mode with the
FULLSCREEN flag.

Single-head modes (1024x768 or lower) work just fine, but you get the
same picture on both monitors.

Marius Gedminas
-- 
Anybody who doesn't cut his speed at the sight of a police car is
probably parked.


signature.asc
Description: Digital signature


Re: [pygame] PyGame on Palm?

2006-08-30 Thread Marius Gedminas
On Wed, 30 Aug 2006 20:06:57 +1000
Jonathan McLean [EMAIL PROTECTED] wrote:

 I believe the short, practical answer would be no.  I do not believe
 there is currently any python that is capable of being run on Palm OS.
  A port named Pippy was attempted for Python 1.5.2, but I believe all
 work has been canned on that.  Any one elses' clarification would be
 greatly appreciated.

I've seen a port of Python 2.3 compiled for PalmOS 5, but I've never tried
it.  IIRC it didn't have any GUI stuff and was therefore basically useless.

Google finds Pippy (not maintained since 2002) and this message about
Python 2.3 port with a broken link:
http://itconnection.ru/pipermail/zopyrus/2005-April/078617.html

Marius Gedminas
-- 
He who sacrifices functionality for ease of use
Loses both and deserves neither


pgpLSSRTgetQ7.pgp
Description: PGP signature


Re: [pygame] BUG: display.init() confuses key mods

2006-08-13 Thread Marius Gedminas
On Sun, Aug 13, 2006 at 09:32:02AM +1000, René Dudfield wrote:
 weirdness...
 
 This is from my full screen code...
 
mods = event.mod
 
# right alt modifier doesn't work it seems.
#  So I use 512 as a constant...  seems to work.
if (mods  K_LALT) or (mods  K_RALT) or (mods  512):

These should be KMOD_LALT and KMOD_RALT, not K_LALT/K_RALT.  KMOD_xxx
are bit masks used in event.mod, K_xxx are key codes used in event.key.

(mods  KMOD_ALT) is the same as (mods  KMOD_LALT) or (mods  KMOD_RALT).

Marius Gedminas
-- 
H.323 has much in common with other ITU-T standards - it features a complex
binary wire protocol, a nightmarish implementation, and a bulk that can be used
to fell medium-to-large predatory animals.
-- Anthony Baxter


signature.asc
Description: Digital signature


Re: [pygame] 2D vector class

2006-08-12 Thread Marius Gedminas
On Fri, Aug 11, 2006 at 01:38:06PM -0500, Nelson, Scott wrote:
 I've got 2 simple games roughed out (about 600 lines each) with about
 2000 lines worth of shared modules I've written.  I have a somewhat full
 featured 2D vector class (supports adding, subtracting, scaling,
 rotation, normalizing, angle between, etc. that I use in both heavily to
 represent points, velocities, etc.  After using it for awhile, I've
 wondered how others have approached creating a 2D vector class.  Here's
 my philosophical questions, as the class I have works well, but I want
 to know how to make it better.  My main goals are to keep it simple, let
 it interface cleanly with Pygame's use of tuples of 2 ints for 2D
 points, not be specifically tied to Pygame, and have it not be a
 performance hog.
 
 So, here's the issues that I'd love to hear feedback on:
 
 #1 - Do you store the vector components internally as self.x and self.y
 or as a tuple?  Or subclass the vector class from a tuple?  If you use
 self.x and self.y, what is an efficient way to pass this as a tuple to
 pygame functions?

I chose to subclass tuple in pyspacewar, but I forgot why.

 #2 - Do you store the values as ints (making it easier to pass to
 Pygame) or floats (more accurate vector math, but need to cast to int
 before passing to pygame functions that require a tuple of ints?).  Or
 do you not even care and just let duck-typing do it stuff?

I needed floats, because I wanted the world to be scaled arbitrarily for
display, and besides that I needed the accuracy for gravity
calculations.

You can find my Vector class here:
http://mg.pov.lt/pyspacewar/trac/browser/trunk/src/pyspacewar/world.py

It has unit tests, and is somewhat optimized (only those bits that
showed up when profiling).

Marius Gedminas
-- 
C is for Cookies.  Perl is even better for Cookies.


signature.asc
Description: Digital signature


Re: [pygame] GP2X Game Comp

2006-06-13 Thread Marius Gedminas
On Tue, Jun 13, 2006 at 05:36:19PM +1000, Richard Jones wrote:
 Hrm, I recently acquired a Nokia 770. It has a *slightly* higher resolution 
 (800x480) but otherwise has very similar specs. Eerily similar, in fact. Hrm.

I have one.  Yummy.

 I've not had a chance to do much except import pygame and test opening a 
 window:
 
http://jafo.ca/getentry.html?stamp=20060526_0237
 
 Anyway, stand by for a completely different announcement...

PySpaceWar (http://mg.pov.lt/pyspacewar) runs on my Nokia 770 without
any changes.  At about 1 frame per second.  ;-)

Marius Gedminas
-- 
The only way to learn a new programming language is by writing programs in it.
-- Brian Kernighan


signature.asc
Description: Digital signature