<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_进行时</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/22682/rss</id><updated>2012-02-21T01:10:54Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/22682/rss"/><entry><id>http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360817.html</id><title type="text">在linux中通过进程名获得进程id</title><summary type="text">得到linux中的进程</summary><published>2012-02-21T01:09:00Z</published><updated>2012-02-21T01:09:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360817.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360817.html"/><content type="html">&lt;p&gt;当需要kil一个进程时，需要提供一个pid(使用kill命令)或提供一个进程名(使用pkill命令)。&lt;br /&gt;pkill是如何通过进程名得到进程id的？&lt;br /&gt;在linux中进程是通过文件来表示的，信息都存储在/proc/pid目录中。&lt;br /&gt;在/proc/pid/status文件的第一行，保存有进程名，和用户输入的进行比对，如果一致，就添加到动态数组中，最后返回。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;附代码：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;long* find_pid_by_name( char* pidName)&#xD;
{&#xD;
	DIR *dir;&#xD;
	struct dirent *next;&#xD;
	long* pidList=NULL;&#xD;
	int i=0;&#xD;
&#xD;
        ///proc中包括当前的进程信息,读取该目录&#xD;
	dir = opendir("/proc");&#xD;
	if (!dir)&#xD;
		perror_msg_and_die("Cannot open /proc");&#xD;
	&#xD;
        //遍历&#xD;
	while ((next = readdir(dir)) != NULL) {&#xD;
		FILE *status;&#xD;
		char filename[READ_BUF_SIZE];&#xD;
		char buffer[READ_BUF_SIZE];&#xD;
		char name[READ_BUF_SIZE];&#xD;
&#xD;
		/* Must skip ".." since that is outside /proc */&#xD;
		if (strcmp(next-&amp;gt;d_name, "..") == 0)&#xD;
			continue;&#xD;
&#xD;
		/* If it isn't a number, we don't want it */&#xD;
		if (!isdigit(*next-&amp;gt;d_name))&#xD;
			continue;&#xD;
                //设置进程&#xD;
		sprintf(filename, "/proc/%s/status", next-&amp;gt;d_name);&#xD;
		if (! (status = fopen(filename, "r")) ) {&#xD;
			continue;&#xD;
		}&#xD;
		if (fgets(buffer, READ_BUF_SIZE-1, status) == NULL) {&#xD;
			fclose(status);&#xD;
			continue;&#xD;
		}&#xD;
		fclose(status);&#xD;
&#xD;
                //得到进程id&#xD;
		/* Buffer should contain a string like "Name:   binary_name" */&#xD;
		sscanf(buffer, "%*s %s", name);&#xD;
		if (strcmp(name, pidName) == 0) {&#xD;
			pidList=realloc( pidList, sizeof(long) * (i+2));&#xD;
			pidList[i++]=strtol(next-&amp;gt;d_name, NULL, 0);&#xD;
		}&#xD;
	}&#xD;
&#xD;
	if (pidList) {&#xD;
		pidList[i]=0;&#xD;
	}&#xD;
	return NULL;&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;注：该代码在busybox0.6.3/libbb/find_pid_by_name.c&lt;/p&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2360817.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360817.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360805.html</id><title type="text">busybox0.60.3源码学习开始</title><summary type="text">busybox源码学习</summary><published>2012-02-21T00:56:00Z</published><updated>2012-02-21T00:56:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360805.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360805.html"/><content type="html">&lt;p&gt;busybox是一套unix-like系统下常用命令的精简实现合集，多用于嵌入式或其他&lt;br /&gt;对内存敏感的应用。代码短小，基本功能实现完整，涉及面广，是学习unix-like下&lt;br /&gt;编程的好资料。busybox0.60.3源码是官网能下载到的最早版本，其中的代码大部分&lt;br /&gt;编写在1995年以前，里面附带的源码还没像今天这样复杂和完善，一般只实现了基本功能。&lt;/p&gt;&#xD;
&lt;p&gt;这样可以绕过很多不必要的旁枝末节，直接对实现原理进行学习。&lt;/p&gt;&#xD;
&lt;p&gt;未来，我会陆续把自己学习这套库时摘录出的代码和自己模仿编写的一些DEMO加上注释贴出来。&lt;/p&gt;&#xD;
&lt;p&gt;希望这份粗糙的代码合集能对您学习linux编程起到帮助。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2360805.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2012/02/21/2360805.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/12/19/2294070.html</id><title type="text">pygame做的贪吃蛇</title><summary type="text">pygame做的贪吃蛇游戏，代码简单。</summary><published>2011-12-19T15:50:00Z</published><updated>2011-12-19T15:50:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/12/19/2294070.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/12/19/2294070.html"/><content type="html">&lt;p&gt;某天无聊，在阅览室一上午做的。&lt;br /&gt;唉，对做2d小游戏还是挺有兴趣的，可惜数学实在不好，只能偶尔做做简单的小玩意～&lt;br /&gt;一口气写的，没写注释&amp;hellip;&lt;br /&gt;你控制的蛇是s，周围都是b，撞上就lost了&lt;br /&gt;&lt;br /&gt;&lt;img src="http://hi.csdn.net/attachment/201112/19/1089753_1324293290Uqw7.png" alt="" /&gt;&lt;br /&gt;看代码～贴到文件里就可以用。&lt;/p&gt;&#xD;
&lt;dl &gt;&lt;dt&gt;&lt;/dt&gt;&lt;dt&gt;&lt;/dt&gt;&lt;/dl&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;#!/usr/bin/env python2&#xD;
# -*- coding: utf-8 -*-&#xD;
'''&#xD;
Created on 2011-11-25&#xD;
author: shiweifu&#xD;
  mail: shiweifu@126.com&#xD;
'''&#xD;
import struct&#xD;
import sys&#xD;
import os&#xD;
import pygame&#xD;
from random import randint&#xD;
&#xD;
&#xD;
import pygame.sprite as Sprite&#xD;
from pygame.locals import *&#xD;
&#xD;
debug = True&#xD;
&#xD;
FONT_NAME = "Arial"&#xD;
FONT_SIZE = 25&#xD;
&#xD;
SCREENRECT = Rect(0, 0, 640, 480)&#xD;
RECT_LEN = 15&#xD;
&#xD;
class Box:&#xD;
    def __init__(self, x, y, f):&#xD;
        self.x = x&#xD;
        self.y = y&#xD;
        self.flag = f&#xD;
        if self.flag:&#xD;
            self.surface = get_font_surface("b")&#xD;
        else:&#xD;
            self.surface = pygame.Surface((15,15))&#xD;
&#xD;
    def __str__(self):&#xD;
        return "x:%s y:%s" % (str(self.x),str(self.y))&#xD;
&#xD;
&#xD;
class Link(object):&#xD;
    &#xD;
    def __init__(self, x, y, surface):&#xD;
        self.x = x&#xD;
        self.y = y&#xD;
        self.surface = surface&#xD;
    &#xD;
    def __str__(self):&#xD;
        return "x:%s y:%s" % (str(self.x),str(self.y))&#xD;
        &#xD;
class Player:&#xD;
    def __init__(self,x,y):&#xD;
        self.snake_body = []&#xD;
        self.append(x,y)&#xD;
&#xD;
    def append(self,x,y):&#xD;
        l = Link(x,y,get_font_surface("s",(255,0,0)))        &#xD;
        self.snake_body.append(l)&#xD;
&#xD;
    def abc(self):&#xD;
        print("test")&#xD;
    &#xD;
    def move_left(self):&#xD;
        i = len(self.snake_body) - 1&#xD;
&#xD;
        while i &amp;gt;= 1:&#xD;
#            debug_output("i:"+str(i))&#xD;
            self.snake_body[i].x = self.snake_body[i-1].x&#xD;
            self.snake_body[i].y = self.snake_body[i-1].y&#xD;
            i -= 1&#xD;
        self.snake_body[0].x -= 1        &#xD;
&#xD;
&#xD;
    def move_right(self):&#xD;
        i = len(self.snake_body) - 1&#xD;
&#xD;
        while i &amp;gt;= 1:&#xD;
#            debug_output("i:"+str(i))&#xD;
            self.snake_body[i].x = self.snake_body[i-1].x&#xD;
            self.snake_body[i].y = self.snake_body[i-1].y&#xD;
            i -= 1&#xD;
        self.snake_body[0].x += 1&#xD;
&#xD;
    def move_up(self):&#xD;
        i = len(self.snake_body) - 1&#xD;
&#xD;
        while i &amp;gt;= 1:&#xD;
            self.snake_body[i].x = self.snake_body[i-1].x&#xD;
            self.snake_body[i].y = self.snake_body[i-1].y&#xD;
            i -= 1&#xD;
        self.snake_body[0].y -= 1&#xD;
    &#xD;
    def move_down(self):&#xD;
        i = len(self.snake_body) - 1&#xD;
&#xD;
        while i &amp;gt;= 1:&#xD;
            self.snake_body[i].x = self.snake_body[i-1].x&#xD;
            self.snake_body[i].y = self.snake_body[i-1].y&#xD;
            i -= 1&#xD;
        self.snake_body[0].y += 1&#xD;
&#xD;
    def move(self,target):&#xD;
        if target == "up":&#xD;
            self.move_up()&#xD;
        if target == "down":&#xD;
            self.move_down()&#xD;
        if target == "left":&#xD;
            self.move_left()&#xD;
        if target == "right":&#xD;
            self.move_right() &#xD;
                &#xD;
def get_font_surface(s,color = (0,255,0),font_size=25):&#xD;
    font = pygame.font.SysFont(FONT_NAME,font_size)&#xD;
    #color = (0,255,0)&#xD;
    backcolor = (0,0,0)&#xD;
    r = font.render(s,True,color,backcolor)&#xD;
    return r&#xD;
&#xD;
def create_map(width,height,rect_len):&#xD;
    y = 0&#xD;
    map_pos = []&#xD;
    snake_map = []&#xD;
    flag =True&#xD;
    while y &amp;lt; height:&#xD;
        x = 0        &#xD;
        flag = False&#xD;
        while x &amp;lt; width:        &#xD;
            if x &amp;lt; rect_len or x+rect_len &amp;gt;= width:&#xD;
                flag = True&#xD;
            elif y &amp;lt; rect_len or y+rect_len &amp;gt;= height:&#xD;
                flag = True&#xD;
            else:&#xD;
                flag = False&#xD;
&#xD;
            snake_map.append(Box(x/rect_len,y/rect_len,flag))&#xD;
            x += 15&#xD;
        y += 15&#xD;
&#xD;
    return snake_map&#xD;
&#xD;
def debug_output(s, f=sys.stdout):&#xD;
    if debug == True:&#xD;
        f.write("debug info: " + s + "\n")&#xD;
        f.flush()&#xD;
&#xD;
class Game:&#xD;
    &#xD;
    WIDTH = 640&#xD;
    HEIGHT = 480&#xD;
    BOX_SIZE = 15&#xD;
    &#xD;
    def __init__(self, caption="CooooolSnake"):&#xD;
    &#xD;
        pygame.init()&#xD;
        pygame.display.set_caption(caption)&#xD;
        self.screen = pygame.display.set_mode(SCREENRECT.size, 0, 32)    &#xD;
        pygame.mouse.set_visible(0)&#xD;
        self.background = pygame.Surface(SCREENRECT.size)&#xD;
        &#xD;
        self.map_size = (Game.WIDTH/15-1,Game.HEIGHT/15-1)&#xD;
        &#xD;
        self.snake_map = create_map(Game.WIDTH,Game.HEIGHT,self.BOX_SIZE)&#xD;
        &#xD;
        self.stages = []&#xD;
        &#xD;
        self.__crate_player__()&#xD;
&#xD;
    def get_new_pos(self):&#xD;
        done = False&#xD;
        pos = None&#xD;
        while not done:&#xD;
            x = randint(2,self.map_size[0]-1)&#xD;
            y = randint(2,self.map_size[1]-2)&#xD;
&#xD;
            for link in self.player.snake_body:&#xD;
                if x == link.x and y == link.y:&#xD;
                    continue&#xD;
            pos = (x,y)&#xD;
            done = True&#xD;
&#xD;
        return pos&#xD;
               &#xD;
&#xD;
    def __crate_player__(self):&#xD;
        x = randint(2,self.map_size[0]-1)&#xD;
        y = randint(2,self.map_size[1]-2)&#xD;
        self.player = Player(x,y)&#xD;
&#xD;
    def is_over(self):&#xD;
        head = self.player.snake_body[0]&#xD;
        i = 0&#xD;
        &#xD;
        for link in self.player.snake_body[1:]:&#xD;
            if head.x == link.x and head.y == link.y:&#xD;
                return True &#xD;
        &#xD;
        for box in self.snake_map:&#xD;
            if box.flag:&#xD;
                if head.x == box.x and head.y == box.y:&#xD;
                    return True&#xD;
        return False&#xD;
        &#xD;
    def update_snake(self):&#xD;
        &#xD;
        for link in self.player.snake_body:&#xD;
            self.background.blit(link.surface,(link.x*Game.BOX_SIZE,link.y*Game.BOX_SIZE))&#xD;
            &#xD;
    def update_map(self):&#xD;
        for box in self.snake_map:&#xD;
            self.background.blit(box.surface,(box.x*Game.BOX_SIZE,box.y*Game.BOX_SIZE))&#xD;
&#xD;
    def add_stage(self):&#xD;
        x,y = self.get_new_pos()&#xD;
        s = get_font_surface("s",(255,0,0))&#xD;
        l = Link(x,y,s)&#xD;
        self.stages.append(l)&#xD;
    &#xD;
    def update_stage(self):&#xD;
        head = self.player.snake_body[0]&#xD;
        for stage in self.stages:&#xD;
            if stage.x == head.x and stage.y == head.y:&#xD;
                self.player.append(stage.x,stage.y)&#xD;
                self.stages.remove(stage)&#xD;
                &#xD;
        for stage in self.stages:&#xD;
            self.background.blit(stage.surface,(stage.x*Game.BOX_SIZE,stage.y*Game.BOX_SIZE))&#xD;
&#xD;
    def refresh_background(self):&#xD;
        self.background.fill((0,0,0))&#xD;
        self.update_map()&#xD;
        self.update_snake()&#xD;
        &#xD;
        self.update_stage()&#xD;
        &#xD;
        self.screen.blit(self.background, (0, 0))&#xD;
        &#xD;
    def over(self):        &#xD;
        logo = get_font_surface("YOU ARE LOST!",(0,0,255),60)&#xD;
        self.background.blit(logo,(100,200))&#xD;
&#xD;
        clock = pygame.time.Clock()&#xD;
        done = False&#xD;
&#xD;
        count = 0&#xD;
&#xD;
        while not done:&#xD;
            clock.tick(10)&#xD;
            count += 1&#xD;
            if count == 5:&#xD;
                done = True         &#xD;
            self.screen.blit(self.background, (0, 0))&#xD;
            pygame.display.flip()&#xD;
    &#xD;
    def loop(self):&#xD;
        pygame.display.update()&#xD;
        clock = pygame.time.Clock()&#xD;
        target = ["up","down","left","right"][randint(0,3)]&#xD;
        &#xD;
        count = 0&#xD;
        stage_time = randint(0,50)&#xD;
&#xD;
        &#xD;
        done = False&#xD;
        while not done:&#xD;
            for e in pygame.event.get():&#xD;
                if e.type == pygame.KEYDOWN:&#xD;
                    keystate = pygame.key.get_pressed()&#xD;
                    if keystate[K_UP]:&#xD;
                        if target != "down":                        &#xD;
                            target = "up"&#xD;
&#xD;
                    elif keystate[K_DOWN]:&#xD;
                        if target != "up":                        &#xD;
                            target = "down"&#xD;
&#xD;
                    elif keystate[K_LEFT]:&#xD;
                        if target != "right":                        &#xD;
                            target = "left"&#xD;
&#xD;
                    elif keystate[K_RIGHT]:&#xD;
                        if target != "left":                        &#xD;
                            target = "right"&#xD;
                            &#xD;
                if e.type == QUIT:&#xD;
                    done = True&#xD;
            self.player.move(target)&#xD;
            if count == stage_time:&#xD;
                self.add_stage()&#xD;
                stage_time = randint(0,50)&#xD;
                count = 0&#xD;
 &#xD;
            if self.is_over():&#xD;
                done = True&#xD;
                &#xD;
            clock.tick(10)&#xD;
            &#xD;
            count += 1&#xD;
            &#xD;
            self.refresh_background()&#xD;
            &#xD;
            if done:&#xD;
                self.over()&#xD;
            &#xD;
            pygame.display.flip()&#xD;
&#xD;
if __name__ == '__main__':&#xD;
    game = Game()&#xD;
    game.loop()&#xD;
    pass&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;dl &gt;&lt;dt&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2294070.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/12/19/2294070.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/07/31/2122821.html</id><title type="text">python中使用struct模块处理二进制数据</title><summary type="text">python中处理二进制数据。</summary><published>2011-07-31T09:01:00Z</published><updated>2011-07-31T09:01:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/07/31/2122821.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/07/31/2122821.html"/><content type="html">&lt;p&gt;假设这样个场景：&lt;/p&gt;&lt;p&gt;你有个文件，里面全是二进制方式存储的整型，你需要读取出来。于是你随手写出了这样的代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;open(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;file&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;rb&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;读取个整型&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;data&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.read(&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;读取完毕，关了文件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;f.close()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;转换&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;num&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;int(data)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;然后就会报错：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;Traceback (most recent call last):&lt;br /&gt;&amp;nbsp; File "&amp;lt;stdin&amp;gt;", line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;ValueError: null byte in argument for int()&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;你查看下data：&lt;/p&gt;&lt;p&gt;&lt;div&gt;data = '8\x00:\x00'&lt;/div&gt;&lt;/p&gt;&lt;p&gt;神马！！竟然是十六进制！！这货怎么转换？&lt;br /&gt;&lt;/p&gt;&lt;p&gt;你翻开《CookBook》 里面扯了一堆不着边用不到的东西，就是没有这个问题。绝望之时，你在文档里看到了struct模块，文档里这么说：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;This&amp;nbsp;module&amp;nbsp;performs&amp;nbsp;conversions&amp;nbsp;between&amp;nbsp;Python&amp;nbsp;values&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;C&amp;nbsp;structs&amp;nbsp;represented&amp;nbsp;as&amp;nbsp;Python&amp;nbsp;strings.&amp;nbsp;It&amp;nbsp;uses&amp;nbsp;format&amp;nbsp;strings&amp;nbsp;(explained&amp;nbsp;below)&amp;nbsp;as&amp;nbsp;compact&amp;nbsp;descriptions&amp;nbsp;of&amp;nbsp;the&amp;nbsp;lay&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;out&amp;nbsp;of&amp;nbsp;the&amp;nbsp;C&amp;nbsp;structs&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;the&amp;nbsp;intended&amp;nbsp;conversion&amp;nbsp;to&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Python&amp;nbsp;values.&amp;nbsp;This&amp;nbsp;can&amp;nbsp;be&amp;nbsp;used&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;handling&amp;nbsp;binary&amp;nbsp;data&amp;nbsp;stored&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;files&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;or&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;network&amp;nbsp;connections,&amp;nbsp;among&amp;nbsp;other&amp;nbsp;sources.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p id="index-605"&gt;&lt;/p&gt;&lt;/div&gt;&amp;nbsp;没错，找的就是这货！&lt;/p&gt;&lt;p&gt;大概看了下，主要用到的是pack 函数和unpack函数。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;pack:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;struct.pack(fmt,&amp;nbsp;v1,&amp;nbsp;v2,&amp;nbsp;...)&amp;nbsp;&lt;br /&gt;Return&amp;nbsp;a&amp;nbsp;string&amp;nbsp;containing&amp;nbsp;the&amp;nbsp;values&amp;nbsp;v1,&amp;nbsp;v2,&amp;nbsp;...&amp;nbsp;packed&amp;nbsp;according&amp;nbsp;to&amp;nbsp;the&amp;nbsp;given&amp;nbsp;format.&amp;nbsp;The&amp;nbsp;arguments&amp;nbsp;must&amp;nbsp;match&amp;nbsp;the&amp;nbsp;values&amp;nbsp;required&amp;nbsp;by&amp;nbsp;the&amp;nbsp;format&amp;nbsp;exactly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;unpack:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;struct.unpack(fmt,&amp;nbsp;string)&amp;nbsp;&lt;br /&gt;Unpack&amp;nbsp;the&amp;nbsp;string&amp;nbsp;(presumably&amp;nbsp;packed&amp;nbsp;by&amp;nbsp;pack(fmt,&amp;nbsp;...))&amp;nbsp;according&amp;nbsp;to&amp;nbsp;the&amp;nbsp;given&amp;nbsp;format.&amp;nbsp;The&amp;nbsp;result&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;is&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a&amp;nbsp;tuple&amp;nbsp;even&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;it&amp;nbsp;contains&amp;nbsp;exactly&amp;nbsp;one&amp;nbsp;item.&amp;nbsp;The&amp;nbsp;string&amp;nbsp;must&amp;nbsp;contain&amp;nbsp;exactly&amp;nbsp;the&amp;nbsp;amount&amp;nbsp;of&amp;nbsp;data&amp;nbsp;required&amp;nbsp;by&amp;nbsp;the&amp;nbsp;format&amp;nbsp;(len(string)&amp;nbsp;must&amp;nbsp;equal&amp;nbsp;calcsize(fmt)).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;下面还有个对应C语言中数据类型的表格： &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;div&gt;&lt;div&gt;&lt;table border="1"&gt; &lt;colgroup&gt; &lt;col width="13%"&gt; &lt;col width="42%"&gt; &lt;col width="33%"&gt; &lt;col width="12%"&gt;&lt;/colgroup&gt; &lt;thead valign="bottom"&gt; &lt;tr&gt; &lt;th&gt;Format&lt;/th&gt; &lt;th&gt;C Type&lt;/th&gt; &lt;th&gt;Python&lt;/th&gt; &lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt; &lt;tbody valign="top"&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;x&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;pad byte&lt;/td&gt; &lt;td&gt;no value&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;c&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;char&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;string of length 1&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;b&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;signed char&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;integer&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;B&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;unsigned char&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;integer&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;?&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;_Bool&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;bool&lt;/td&gt; &lt;td&gt;(1)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;h&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;short&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;integer&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;H&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;unsigned short&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;integer&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;i&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;int&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;integer&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;I&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;unsigned int&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;integer or long&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;l&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;long&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;integer&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;L&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;unsigned long&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;long&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;q&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;long long&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;long&lt;/td&gt; &lt;td&gt;(2)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;Q&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;unsigned long long&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;long&lt;/td&gt; &lt;td&gt;(2)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;f&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;float&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;float&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;d&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;double&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;float&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;s&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;char[]&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;string&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;p&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;char[]&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;string&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;tt literal=""&gt;P&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;&lt;tt docutils="" literal=""&gt;void *&lt;/tt&gt;&lt;/td&gt; &lt;td&gt;long&lt;/td&gt; &lt;td&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&amp;nbsp;怎么样？大概看明白了吧？&lt;/div&gt;&lt;p&gt;你把代码改成了：&lt;/p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;open(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;file&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;rb&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;data&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.read(&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;转换格式&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;num&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;struct.unpack(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;i&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,data)&lt;br /&gt;f.close()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;print&lt;/span&gt;&lt;span style="color: #000000;"&gt;(num)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这样就正常输出了吧？&lt;/p&gt;&lt;p&gt;嘿嘿，可以早点下班了。&lt;/p&gt;&lt;p&gt;如果还不明白，就接着看文档去，还有可以参考下这篇文章：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;div&gt;http://www.cnblogs.com/tonychopper/archive/2010/07/23/1783501.html&lt;/div&gt;&lt;/p&gt;&lt;p&gt;再次赞颂简洁万能的Python。&lt;/p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2122821.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/07/31/2122821.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/05/09/2041013.html</id><title type="text">使用PYGAME开发的坦克游戏[代码][思路]</title><summary type="text">使用PYGAME开发的坦克游戏</summary><published>2011-05-09T03:54:00Z</published><updated>2011-05-09T03:54:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/05/09/2041013.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/05/09/2041013.html"/><content type="html">&lt;div&gt;&lt;div&gt;下载地址：&lt;br /&gt;&lt;br /&gt;http://ishare.iask.sina.com.cn/f/15170274.html&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;带图的链接：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;http://topic.csdn.net/u/20110506/11/00F9E224-3354-4908-BC96-8670769D93B7.html&lt;/div&gt;&amp;nbsp;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;坦克游戏设计思路&lt;br /&gt;&lt;br /&gt;近期通过pygame设计了个坦克游戏，熟悉了下2D游戏的开发，总结一下吧，否则又忘记了。&lt;br /&gt;&lt;br /&gt;游戏类似小时候红白机上的坦克大战，有几种坦克类型，主要区别在于：&lt;br /&gt;攻击力&lt;br /&gt;移动速度&lt;br /&gt;四个方向的贴图（png）&lt;br /&gt;发炮的声音&lt;br /&gt;移动的声音&lt;br /&gt;血量&lt;br /&gt;&lt;br /&gt;因为比较喜欢玩手机，所以里面坦克的名字都是以用过的手机名命名的：&lt;br /&gt;E71&lt;br /&gt;N95&lt;br /&gt;HD2&lt;br /&gt;i780&lt;br /&gt;touch&lt;br /&gt;8900&lt;br /&gt;.....&lt;br /&gt;&lt;br /&gt;:-) 有点雷人&lt;br /&gt;&lt;br /&gt;地图的设计：&lt;br /&gt;666666666666666666666666666&lt;br /&gt;600000000000000000000000006&lt;br /&gt;600000000000000000000000006&lt;br /&gt;600000300001000000000000006&lt;br /&gt;600000300001000001345000006&lt;br /&gt;600000322221000001000100006&lt;br /&gt;600000311111000001222100006&lt;br /&gt;600000300001000001000100006&lt;br /&gt;600000300001000001111000006&lt;br /&gt;644444444444444444444444006&lt;br /&gt;600000000000000000000000006&lt;br /&gt;600000111110000011111000006&lt;br /&gt;600000100000000000200000006&lt;br /&gt;600000111110000000200000006&lt;br /&gt;600000000010000000200000006&lt;br /&gt;600000000010000000200000006&lt;br /&gt;600000111110000011211000006&lt;br /&gt;600000000000000000000000006&lt;br /&gt;600000000000000000000000006&lt;br /&gt;666666666666666666666666666&lt;br /&gt;这就是一张地图，看明白没？&lt;br /&gt;0-6代表7种不一样的元素：&lt;br /&gt;土&lt;br /&gt;铁&lt;br /&gt;树&lt;br /&gt;水&lt;br /&gt;冰&lt;br /&gt;空白&lt;br /&gt;城墙&lt;br /&gt;每种都有不一样的贴图，读取地图文件时算好坐标对着贴就是了&lt;br /&gt;&lt;br /&gt;而每关不一样的坦克信息，玩家控制的坦克，敌方控制的坦克，都是写在地图的配置文件里的：&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; &amp;nbsp;   "background" : null,&lt;br /&gt;&lt;br /&gt; &amp;nbsp;   "backcolor" : [0,0,0],&lt;br /&gt;&lt;br /&gt;	"tank_info" :&amp;nbsp; &lt;br /&gt;&lt;br /&gt;	{&lt;br /&gt;&lt;br /&gt;		"normal":1,&lt;br /&gt;&lt;br /&gt;		"hard":1&lt;br /&gt;&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt; &amp;nbsp;   "player" : "e90",&lt;br /&gt;&lt;br /&gt; &amp;nbsp;   "slash" : ["6.jpg","7.jpg"],&lt;br /&gt;&lt;br /&gt; &amp;nbsp;   "sound" : "Mozart_Piano_Sonata_Amin3.ogg",&lt;br /&gt;&lt;br /&gt; &amp;nbsp;   "mapfile":"map",&lt;br /&gt;&lt;br /&gt;	"size":[815,700]&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;配置文件是json格式，python 加载json格式非常简单，而且定义清晰明了&lt;br /&gt;&lt;br /&gt;然后每关都压缩成个zip文件，加载时进行读取。&lt;br /&gt;&lt;br /&gt;坦克的移动和碰撞检测直接用pygame中的sprite对象来做就可以了，都封装在里面了，看看文档就会用，我就不细说了。&lt;br /&gt;&lt;br /&gt;开头动画就是简单的图片切换，加上渐变效果。&lt;br /&gt;&lt;br /&gt;整个坦克游戏开发从三月中旬一直到四月中旬，从接触pygame到写完这个游戏，也都是在这个时间段，弄明白2D游戏大概是如何开发的了。坦克重做了三回，终于成形了，也不打算改了，再改估计又想重新做了。&lt;br /&gt;&lt;br /&gt;猜猜用了多少行。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在linux下用wc统计，抛去注释的代码，1600多行&lt;br /&gt;python 强大有木有&lt;br /&gt;pygame 给力有木有&lt;br /&gt;&lt;br /&gt;先贴几张截图，再传下代码&lt;br /&gt;&lt;br /&gt;总体来说，写的比较灵活，可配置性比较强，地图坦克什么的都可以自己改&lt;br /&gt;&lt;br /&gt;windows下请放在英文路径下运行，没处理中文路径的问题，这个有空再改吧（估计。。。。改不了了）哪位朋友有空改好也可以发我份哦～&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2041013.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/05/09/2041013.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/05/09/2040938.html</id><title type="text">一篇很好的讲/etc/inittab的文章[转]</title><summary type="text">转自：http://www.chinaunix.net/jh/7/588122.html</summary><published>2011-05-09T02:58:00Z</published><updated>2011-05-09T02:58:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/05/09/2040938.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/05/09/2040938.html"/><content type="html">&lt;div&gt;转自：http://www.chinaunix.net/jh/7/588122.html&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;/etc/inittab文件中每个登记项的结构都是一样的，共分为以冒号&amp;#8220;：&amp;#8221;分隔的4个字段。具体如下： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;identifier&amp;nbsp;:&amp;nbsp;&amp;nbsp;run_level&amp;nbsp;&amp;nbsp;:&amp;nbsp;&amp;nbsp;action&amp;nbsp;&amp;nbsp;:&amp;nbsp;&amp;nbsp;process &lt;br /&gt;其中，各字段以及与其相关的说明如下： &lt;br /&gt;identifier　　登记项标识符，最多为4个字符。用于惟一地标识/etc/inittab文件中的每一个登记项 &lt;br /&gt; &lt;br /&gt;run_level　　系统运行级，即执行登记项的init级别。用于指定相应的登记项适用于哪一个运行级，即在哪一个运行级中被处理。如果该字 段为空，那么相应的登记项将适用于所有的运行级。在该字段中，可以同时指定一个或多个运行级，其中各运行级分别以数字0.1.2.3.4.5.6或字母 a、b、c表示，且无需对其进行分隔。 &lt;br /&gt; &lt;br /&gt;action　　　　动作关键字。用于指定init(M)命令或进程对相应进程（在&amp;#8220;process&amp;#8221;字段定义）所实施的动作。具体动作包括： &lt;br /&gt;　　1、boot：只有在引导过程中，才执行该进程，但不等待该进程的结束；当该进程死亡时，也不重新启动该进程。 &lt;br /&gt;　　2、bootwait：只有在引导过程中，才执行该进程，并等待进程的结束：当该进程死亡时，也不重新启动该进程。实际上，只有在系统被引导 后，并从单用户方式进入多用户方式时，这些登记项才被处理；如果系统的默认运行级设置为2（即多用户方式），那么这些登记项在系统引导后将马上被处理。 &lt;br /&gt;　　3、initdefault：指定系统的默认运行级。系统启动时，init将首先查找该登记项。如果存在init将据此决定系统最初要进入的 运行级。具体来说，init将指定登记项&amp;#8220;run_level"字段中的最大数字（即最高运行级）为当前系统的默认运行级；如果该字段为空，那么将其解释 为&amp;#8220;0123456&amp;#8221;，并以&amp;#8220;6&amp;#8221;作为默认运行级。如果不存在该登记项，那么init将要求用户在系统启动时指定一个最初的运行级。 &lt;br /&gt;　　4、off：如果相应的进程正在运行，那么就发出一个警告信号，等待20秒后，再通过杀死信号强行终止该进程。如果相应的进程并不存在那么就忽略该登记项。 &lt;br /&gt;　　5、once：启动相应的进程，但不等待该进程结束便继续处理/etc/inittab文件中的下一个登记项；当该进程死亡时，init也不重新启动该进程。注意：在从一个运行级进入另一个运行级时，如果相应的进程仍然在运行，那么init就不重新启动该进程。 &lt;br /&gt;　　6、ondemand：与&amp;#8220;respawn&amp;#8221;的功能完全相同，但只用于运行级为a、b或c的登记项。 &lt;br /&gt;　　7、powerfail：只在init接收到电源失败信号时执行相应的进程，但不等待该进程结束。 &lt;br /&gt;　　8、powerwait：只在init接收到电源失败信号时执行相应的进程，并在继续对/etc/inittab文件进行任何处理前等待该进程结束。 &lt;br /&gt;　　9、respawn：如果相应的进程还不存在，那么init就启动该进程，同时不等待该进程的结束就继续扫描/etc/inittab文件； 当该进程死亡时，init将重新启动该进程。如果相应的进程已经存在，那么init将忽略该登记项并继续扫描/etc/inittab文件。 &lt;br /&gt;　　10、sysinit：只有在启动或重新启动系统并首先进入单用户时，init才执行这些登记项。而在系统从运行级1－6进入单用户方式 时，init并不执行这些登记项。"action&amp;#8221;字段为&amp;#8220;sysinit&amp;#8221;的登记项在&amp;#8220;run_level&amp;#8221;字段不指定任何运行级。 &lt;br /&gt;　　11、wait：启动进程并等待其结束，然后再处理/etc/inittab文件中的下一个登记项。 &lt;br /&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2040938.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/05/09/2040938.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/04/29/2033120.html</id><title type="text">哲学家吃空心粉问题</title><summary type="text">LINUX POSIX线程解决哲学家吃空心粉问题</summary><published>2011-04-29T13:22:00Z</published><updated>2011-04-29T13:22:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/04/29/2033120.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/04/29/2033120.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pe.c&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;哲学家吃空心粉的问题&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Copyright&amp;nbsp;2011&amp;nbsp;shiweifu&amp;nbsp;&amp;lt;shiweifu@126.com&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;_REENTRANT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;stdio.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;unistd.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;stdlib.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;semaphore.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;pthread.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;#define&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;STR_MAX&amp;nbsp;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;struct&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;philosophy&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;name[STR_MAX];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_t&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;left;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_t&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;right;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;is_stop;&lt;br /&gt;}&amp;nbsp;philosophy;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;thread_function(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;arg);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;main(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;argc,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;**&lt;/span&gt;&lt;span style="color: #000000;"&gt;argv)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;五只悲剧的筷子&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_t&amp;nbsp;sems[&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;五个NC哲学家&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;philosophy&amp;nbsp;philers[&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pthread_t&amp;nbsp;threads[&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;res&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;tmp[&lt;/span&gt;&lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;philers[i].left&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sems[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;philers[i].right&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sems[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;philers[i].left&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sems[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;philers[i].is_stop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sprintf(tmp,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;NC&amp;nbsp;%d&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strncpy(philers[i].name,tmp,&lt;/span&gt;&lt;span style="color: #800080;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_init(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sems[i],&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;pthread_create(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;threads[i],NULL,thread_function,&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;philers[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(res&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;perror(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;创建线程出错啦...&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;给这群吃货吃20秒&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sleep(&lt;/span&gt;&lt;span style="color: #800080;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;philers[i].is_stop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pthread_join(threads[i],NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_destroy(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sems[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(EXIT_SUCCESS);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;thread_function(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;arg)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;philosophy&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;p&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;arg;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(sem_trywait(p&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;left)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(sem_trywait(p&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;right)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;红烧翅膀真好吃,我是%s\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,p&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_post(p&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;left);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_post(p&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;right);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sleep(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sem_post(p&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;left);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(p&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;is_stop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pthread_exit(NULL);&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2033120.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/04/29/2033120.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/04/16/2018151.html</id><title type="text">《代码整洁之道》笔记之函数</title><summary type="text">书的作者给出了几个评判函数好坏的标准，笔者对其加上自己肤浅的理解</summary><published>2011-04-16T06:15:00Z</published><updated>2011-04-16T06:15:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/04/16/2018151.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/04/16/2018151.html"/><content type="html">&lt;div&gt;   	 	 	 	  &lt;p&gt;作者给出了几个评判函数好坏的标准：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;短小&lt;br /&gt;作者给的函数合理长度是小于15行，目标是每个函数都一目了然，每个函数都会把你依次带到下一个函数中去。&lt;br /&gt;if、else、while语句等其中的代码快应该只有一行。该行大抵应该是一个函数的调用语句。这样不但能保持函数短小，而且因为块内调用的函数拥有较具说明行的名称，从而增加了文档上的价值函数的缩进曾不该多余两层，这样函数更容易理解。&lt;/p&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;只做一件事 	&lt;br /&gt;从我接触编程开始，这条规则反反复复听了很多遍：函数应该做一件事，做好这件事，只做这一件事。问题是那件事是什么，函数到底做了一件事还是做了几件事。比如一个名为write_text_to_file(char 	*filename)的函数，它在其中会打开一个文件，写入文本到这个文件，然后关闭文件流。这算几件事？&lt;br /&gt;作者如是说：如果函数只是做了该函数名下同一抽象层上的步骤，则函数还是只做了一件事。&lt;br /&gt;这样就好分辨的多。&lt;br /&gt;我的理解是：write_text_to_file函数里面调用的几个函数，fopen、fwrite、fclose都是同一抽象层的，这算是只做了一件事，如果调用了更上层的delete_file函数，这样就算两件事了。不知道这样理解有没错。&lt;/p&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;switch语句的正确使用 	&lt;br /&gt;学习过《windows程序设计》的人肯定都写过这样的代码：&lt;br /&gt;switch(uMsg)&lt;br /&gt;{&lt;br /&gt; 	case WM_DESTORY:&lt;br /&gt;       //xxxxxxx&lt;br /&gt;      break;&lt;br /&gt;case 	WM_CREATE:&lt;br /&gt;     //xxxxxxx&lt;br /&gt;     	break;&lt;br /&gt;}&lt;br /&gt;在其中对WINDOWS窗口的消息进行判断，然后处理。没什么封装的话，就是直接写在case和break之间，一大坨。有了点封装，会把要执行的代码写到独立的函数里，在收到消息时进行调用。还可以弄个消息表，这样只需要在for循环中就完成了对应消息的处理，除非是写框架时才会这么做，一般都没这么多消息要处理。有了面向对象还可以利用继承和多态机制来简化代码，参看：&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/04/12/2014136.html"&gt;http://www.cnblogs.com/shiweifu/archive/2011/04/12/2014136.html&lt;/a&gt;&lt;br /&gt;作者这么说switch：对于switch语句，我的规矩是如果只出现一次，用于创建多态对象，而且隐藏在某个继承关系中，在系统其他部分看不到，就能容忍&lt;br /&gt;对于switch他也没说绝对，后来又补充说： 	要就事论事&lt;/p&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;函数的名称 	&lt;br /&gt;函数名别怕长，命名方式要在模块中进行统一。做到让看代码的人自己可以通过函数名就能大概弄明白函数是干嘛的，这样就到位了，也就是他最后说的&amp;#8220;深合己意&amp;#8221;&lt;/p&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p&gt;函数的参数 	&lt;br /&gt;书中说最理想的函数参数是没有参数，其次是一个，再次是两个，如果有了三个以上的参数，就说明这个函数需要传递对象作为参数了。我觉得这个更多适合的是面向对象编程，像面向过程编程，有些时候没参数活儿没法干，难道哪个文件都弄一大堆静态函数，再弄静态变量放在文件中？我不怎么习惯这样。等我看完lua的源码再谈这个吧&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;然后是一些建议：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;使用异常替代返回错误码&lt;br /&gt;相对与返回错误码，这是更好的做法。有异常就用异常吧 		&lt;/p&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;如何正确编写异常处理 	&lt;br /&gt;对异常没有太多经验，只停留在会用的层面，就不多说了&lt;/p&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;避免重复 	&lt;br /&gt;一般第一遍编写代码，会有不少冗余重复的代码。再写一遍就是了。&lt;/p&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p&gt;如何编写出优秀的代码 	&lt;br /&gt;以前代码写的又烂又难看，设计的又丑陋（现在设计也很糟糕），我向一位有经验的程序员请教，他说你重新再写一遍就好了，多写几次，总能写好的。后来我就按照他的话重新写了遍当时的代码，果然好看多了。后来每当遇到不满意的代码，都会重新写一下，慢慢的就有了进步。现在有时重写一次就能写出满意的代码，有时得写三次。这与对所使用的技术是否了解有关系。对所运用的技术越熟悉，一次性写好的几率就越高。书中对写出好的代码的建议也是重复编写，当然，加上这些规则对自己的代码进行审查，会写的更好。&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt; &lt;/p&gt; &lt;/div&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2018151.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/04/16/2018151.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/04/12/2014136.html</id><title type="text">使用面向对象概念优化条件判断语句的一个小应用</title><summary type="text">面向对象优化分支语句的一个小例子</summary><published>2011-04-12T13:45:00Z</published><updated>2011-04-12T13:45:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/04/12/2014136.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/04/12/2014136.html"/><content type="html">以前就知道可以通过面向对象来优化条件语句，甚至看到过说面向对象概念可以完全替代条件语句，新想那得弄多少类啊，觉得太累了就没细研究，而且那时是在用C语言，没有面向对象的语法支持。&lt;br /&gt;&lt;p&gt;今天写代码时候，写出了这样的代码：&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px; "&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #0000ff; "&gt;if&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;isinstance(b,Iron):&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;#&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;铁&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #0000ff; "&gt;if&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;self._size&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;==&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;Bullet.BIG:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.health&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;-=&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;1&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #0000ff; "&gt;elif&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;self._size&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;==&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;Bullet.LARGE:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.health&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;-=&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;3&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #0000ff; "&gt;elif&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;self._size&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;==&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;Bullet.HUGE:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.health&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;-=&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;5&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #0000ff; "&gt;if&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;isinstance(b,Soil):&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;#&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;土&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #0000ff; "&gt;if&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;self._size&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;==&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;Bullet.SMALL:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.health&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;-=&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;1&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #0000ff; "&gt;elif&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;self._size&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;==&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&amp;nbsp;Bullet.BIG:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.health&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;-=&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;5&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #000000; "&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;又臭又长又丑，看了下，也没什么好办法改，条件总是要判断的呀，铁和转块受到攻击时效果不一样，受到不同大小子弹的攻击，效果不一样。&lt;br /&gt;&amp;nbsp;突然灵光一闪，想起了还有继承这么回事。三下五除二，写下了这样的代码：&lt;br /&gt;&lt;div&gt;&lt;div&gt;class Floor(pygame.sprite.Sprite):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Stage的组成部分。Stage向Game对象传递进来的pygame.sprite.Group对象引用进行填充。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;这是个基类，不同种类的格子通过这个来继承。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"""&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;image = None&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_small_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到小子弹攻击"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise TypeError,"not implement"&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_big_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到大子弹攻击"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise TypeError,"not implement"&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_large_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到巨大子弹攻击"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise TypeError,"not implement"&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_huge_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到炮弹攻击"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise TypeError,"not implement"&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;div&gt;&lt;div&gt;class Soil(Floor):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"""土"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def __init__(self,pos):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Floor.__init__(self)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.pos = pos&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.health = 5&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.image = Soil.image&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.rect = self.image.get_rect(topleft = pos)&lt;/div&gt;&lt;div&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.rect = Rect(self.rect)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pass&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_small_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到小子弹攻击"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.health -= 1&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_big_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到大子弹攻击"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.health -= 2&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_large_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到巨大子弹攻击"""&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.health -= 3&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;def _on_huge_bullet(self):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"""收到炮弹攻击"""&lt;/div&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.health -= 5&amp;nbsp;&lt;/p&gt;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: verdana, 'courier new'; font-size: 14px; "&gt;啊哈，搞定了，而且代码好看很多。&lt;br /&gt;所有砖块元素都继承自Floor，这样就不需要判断类型了。&lt;br /&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if self._size == Bullet.SMALL:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b._on_small_bullet()&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif self._size == Bullet.BIG:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b._on_big_bullet()&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif self._size == Bullet.LARGE:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b._on_large_bullet()&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif self._size == Bullet.HUGE:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b._on_huge_bullet()&lt;/div&gt;&lt;p&gt;代码好看了很多。&lt;br /&gt;&amp;nbsp;还是得多写代码啊。。&lt;/p&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2014136.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/04/12/2014136.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shiweifu/archive/2011/04/06/2006431.html</id><title type="text">python生成文件树的代码</title><summary type="text">一段通过python遍历当前目录，并生成文件树的代码。转自：http://hi.baidu.com/linniebeibeihome/blog/item/1d446eec3a7bd22163d09f6f.html</summary><published>2011-04-06T02:21:00Z</published><updated>2011-04-06T02:21:00Z</updated><author><name>飘啊飘</name><uri>http://www.cnblogs.com/shiweifu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shiweifu/archive/2011/04/06/2006431.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shiweifu/archive/2011/04/06/2006431.html"/><content type="html"> &#xD;
&lt;table style="width: 100%; table-layout: fixed;"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;div id="blog_text" &gt;&#xD;
&lt;p&gt;&lt;font size="3" face="黑体"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;!/usr/bin/python&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;from&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;os.path&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;basename,&amp;nbsp;isdir&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;from&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;os&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;listdir&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;traverse(path,&amp;nbsp;depth&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prefix&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;depth&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;|&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;|_&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(isdir(path)):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;prefix,&amp;nbsp;basename(path)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;item&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;listdir(path):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;traverse(path&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;item,&amp;nbsp;depth&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;prefix,&amp;nbsp;basename(path)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;__name__&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;__main__&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;traverse(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;./&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;img src="http://www.cnblogs.com/shiweifu/aggbug/2006431.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shiweifu/archive/2011/04/06/2006431.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
