From aa0a0cd0d1833197a4feb675577b0c724bf923d2 Mon Sep 17 00:00:00 2001 From: cecilkorik Date: Mon, 22 Jan 2007 07:10:17 +0000 Subject: [PATCH] initial import of "very simple space game" --HG-- branch : vssg --- framebg.png | Bin 0 -> 1017 bytes img/base_star.png | Bin 0 -> 262 bytes img/blue_dwarf1.png | Bin 0 -> 272 bytes img/green_dwarf1.png | Bin 0 -> 257 bytes img/red_dwarf1.png | Bin 0 -> 250 bytes img/white_dwarf1.png | Bin 0 -> 248 bytes img/yellow_dwarf1.png | Bin 0 -> 249 bytes ships.py | 0 starmap.py | 72 ++++++++++++++++++ starmap.pyc | Bin 0 -> 3140 bytes starmap_gen.py | 170 ++++++++++++++++++++++++++++++++++++++++++ starmap_gen.pyc | Bin 0 -> 6676 bytes testui.py | 72 ++++++++++++++++++ testui2.py | 15 ++++ vssg.py | 124 ++++++++++++++++++++++++++++++ 15 files changed, 453 insertions(+) create mode 100644 framebg.png create mode 100644 img/base_star.png create mode 100644 img/blue_dwarf1.png create mode 100644 img/green_dwarf1.png create mode 100644 img/red_dwarf1.png create mode 100644 img/white_dwarf1.png create mode 100644 img/yellow_dwarf1.png create mode 100644 ships.py create mode 100644 starmap.py create mode 100644 starmap.pyc create mode 100644 starmap_gen.py create mode 100644 starmap_gen.pyc create mode 100644 testui.py create mode 100644 testui2.py create mode 100644 vssg.py diff --git a/framebg.png b/framebg.png new file mode 100644 index 0000000000000000000000000000000000000000..16f5b0ab810727c492440221da6b7377d647a741 GIT binary patch literal 1017 zcmeAS@N?(olHy`uVBq!ia0y~yV2lG{4kn<8ljj3pAjMhW5n0T@pz;!g83Ri_6Pzhu2N-SXlQ0&`1v1512vQyFfhDIU|_JC!N4G%KPmpG z8v_G#zNd?0NX4x;*Eb3_D2TWm?01$7OH&kaocpD*Q<+0`$83$4toaIG86uuOkM?DB zadD}<9H6XM&9IoSQpT_P!27LF9Uq1=zT>+5Kanp%owvb+;Sz%fvjTPoP6>z}d|EFt z;4l+z9bUunyNjUVGZ-eYIY=>NGAv=l#=t27)q_VXPzt-5a6R}9$L1Wk)&Vsf*%jCV z4zJ7cdwL1u02)ppx*8PEwAYTTCDpdxChGqtapZ|e0P(!H!1H-EX1_rAc3=HD=lj4uM z0oB%cx;TbZ+N_tTlOEM3$j?#<0 z!h#Iju1;6EA+xU}@KWZIDJ55@m(;X=pL+d+EW^r`q4MwE#99H}!QkoY=d#Wzp$P!} C6<%ln literal 0 HcmV?d00001 diff --git a/img/blue_dwarf1.png b/img/blue_dwarf1.png new file mode 100644 index 0000000000000000000000000000000000000000..4fad37c41d674b79d941d56070ef2e235826c27c GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9E8FF}|wK;`)lpdd@S zqpu?a!^Xav-+_~Xe1&9>AYTTCDpdxChGqtapZ|e0P(!H!1H-EX1_rAc3=HD=lj4uM z0oAs7x;TbZ+|%ddBJlLEvUcRA zCs$AHE?e>DVCUQ)#f>}e?PC*JEAZIxdYA&k9-i6e26NlBE+xKAYTTCDpdxChGqtapZ|e0P(!H!1H-EX1_rAc3=HD=lj4uM z0o9g!x;TbZ+7DNbXI0(Y5w_`~goMH~V_%F`8M= z7M`>su-)tL9fxTTH!5^a)kxelk%5I_MRg%lRcYEMxrcqe>-n_ZW_WU`w>zxoi?&!- vE-!GzEAYTTCDpdxChGqtapZ|e0P(!H!1H-EX1_rAc3=HD=lj4uM z0o4|Gx;TbZ+zopr09R;K;s5{u literal 0 HcmV?d00001 diff --git a/img/white_dwarf1.png b/img/white_dwarf1.png new file mode 100644 index 0000000000000000000000000000000000000000..48efbee6ace0773c526a458e1d4e626aeaaadf6a GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9E8FF}|wK;`)lpdd@S zqpu?a!^Xav-+_~Xe1&9>AYTTCDpdxChGqtapZ|e0P(!H!1H-EX1_rAc3=HD=lj4uM z0oCStx;TbZ+T31IOF23zu!Rud?`ADy@&bLd3gT<-+-og!MrFHjQ zInJB4b~)qGxQ?}3FG_JV%=!G5TPJfyjQfpq+f;(QcqS{)k!(`ESk2y{&S5xhx#lgq nH9=kJ#kYTR{MWvJ*@|Jyy9lQnhdpKkZD#Ov^>bP0l+XkKhaOf! literal 0 HcmV?d00001 diff --git a/img/yellow_dwarf1.png b/img/yellow_dwarf1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3d334fbd4c13b5b3cbc2c3dea4d67eec284eeb GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9E8FF}|wK;`)lpdd@S zqpu?a!^Xav-+_~Xe1&9>AYTTCDpdxChGqtapZ|e0P(!H!1H-EX1_rAc3=HD=lj4uM z0oCSvx;TbZ+B?_q!Gn5%uMn_Zl#QO9|c3d7lqi%abI zBCc2PXhbRIMPCu~RP@yRSj8NqC2CY~aAlF$wuVCsn{w!;Qv$ax9~H_y;>~tTJp_Gpw$eXu6{1-oD!M5blv=Sx#cd`E%j`fj|NZ0jH9JDv|?`#K3_n9mWTOuxo3hUCSFJt-Ldd zEy~HoyazAAlko(6U(agSaTSLY+L~5x&rJV*)3f7$md~s_`}>E1l)onazsGRTKoXJP zMf!m;(l?SANgJ{YrXhcd9E<$gZ%WdfOIww+CCS2E+ODJv)VbANgz}zmgZ>nc;=@^G z-azyO!+i_lVOveYQom7}4CW|-1vS@)(gj-RwpFpxS;V}O?GEDc$j?P3JtuY%irv^_2I;r1)%hTEmejpKso7DPwa~Bu0V!mgkSTm_Tl6Y2b20))B<|=FTl4y4#Eg?gL6M8j_zC zgP0~sqZ_mqk4C{F&Cl%+ zRa8ybshu1QaEV4h+Lps@HQQpF+uZ3fr*s2p)xLpDW{b>c){*0uunf8rxt=bETrbEA zk$hEOLVtnU{dHu2U4A)gSLs*K5+A*M5|TU4CIo>d8a&e#0)7vxLVB-|t3Xxt2yW8` z8`f6~!lnw7*AgA-iGB970G%ivXs>FJ_iy&g!c$TGYZkX%fRvHSMvW-mQaT-OQ zkwnorPhO7jYR}@;Qma*OuanaVJ_1);S5A+vg~2xr0I=zswYO&wH^RHPN#BT$o%R;VZIC)8Asfu!28Lr^#VnOi)u1cveuZg* zbKanFRQU?WLt8H2t2TYy6qD5LnCee}hEC~WPm1_J8TYc-wJQ+Uh|^9UK=v88V+0ah z{}iwEDjc^)S3|xDf&G|7k-;_fKIOt@*7{2fZQMXX+p~?c<2)V3&JFOQzyAq?M^N&v zFd!aqxiNPE4;?7c9PtQfKJ>~TxAw!QR6iumfId5X^I@q+&IZ_8Jx zDO)YQ!OG)C2~9fPa~D9f@$lYl7bORAv3q|53Bospf*m>Fd_W-&N=PG*#dJ1AJ+u_r zI7U~ax=|h{nn{(9@`JSSyd(zswXY!d9vZ7 z?fEG4C+d$uHZ1aAmi$=gqu$}tRJo4F=E#NK{INs-B~;PFRIw8WB>pF literal 0 HcmV?d00001 diff --git a/starmap_gen.py b/starmap_gen.py new file mode 100644 index 0000000..dce5928 --- /dev/null +++ b/starmap_gen.py @@ -0,0 +1,170 @@ +from starmap import * +import copy +import random + +class Starmap_Params(object): + def __init__(self): + self.density = 2 + self.minerals = Minerals_Params(0.1, 0.2, 0.4, 0.2, 0.1) + self.habitat = Habitat_Params(0.05, 0.03, 0.10, 0.07, 0.06, 0.09, 0.06, 0.09, 0.08, 0.08, 0.12, 0.08, 0.06, 0.08) + self.size = (80, 60) + +class PercentArray(object): + def __init__(self): + self.order = [] + self.array = {} + + def __setitem__(self, key, value): + if not self.array.has_key(key): + self.order += [key] + self.array[key] = value + + def __getitem__(self, key): + return self.array[key] + + def normalize(self): + tot = sum(self.array.values()) + + for k in self.array.keys(): + self[k] = self[k] / tot + + def __mul__(self, other): + if type(other) != type(self): + raise TypeError + retval = copy.deepcopy(self) + for k in retval.array.keys(): + retval[k] *= other[k] + retval.normalize() + return retval + + def random(self): + loopcount = 0 + while True: + loopcount += 1 + rv = random.random() + tot = 0.0 + for k in self.order: + tot += self[k] + if rv < tot: + return k + + if loopcount >= 5: + raise IndexError + + + +class Minerals_Params(PercentArray): + def __init__(self, vpoor, poor, normal, rich, vrich): + PercentArray.__init__(self) + self['vpoor'] = vpoor + self['poor'] = poor + self['normal'] = normal + self['rich'] = rich + self['vrich'] = vrich + + +class Habitat_Params(PercentArray): + def __init__(self, noplanet, paradise, terran, ocean, swamp, arid, desert, tundra, minimal, barren, dead, inferno, toxic, radiated): + PercentArray.__init__(self) + self['noplanet'] = noplanet + self['paradise'] = paradise + self['terran'] = terran + self['ocean'] = ocean + self['swamp'] = swamp + self['arid'] = arid + self['desert'] = desert + self['tundra'] = tundra + self['minimal'] = minimal + self['barren'] = barren + self['dead'] = dead + self['inferno'] = inferno + self['toxic'] = toxic + self['radiated'] = radiated + + + +startypes = [] + +whitedwarf_min = Minerals_Params(0.0, 0.2, 0.5, 2.0, 3.5) +whitedwarf_hab = Habitat_Params(3.0, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3, 0.8, 0.7, 1.5, 4.5, 1.0, 2.0, 2.0) +bluestar_min = Minerals_Params(0.5, 0.5, 1.0, 2.0, 2.5) +bluestar_hab = Habitat_Params(1.0, 0.4, 0.6, 0.6, 0.6, 0.9, 1.0, 0.6, 1.1, 1.2, 1.5, 3.0, 2.0, 3.0) +redstar_min = Minerals_Params(2.0, 2.0, 1.0, 0.4, 0.3) +redstar_hab = Habitat_Params(1.0, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.2, 1.0, 0.9, 0.8, 0.5, 0.5, 0.5) +yellowstar_min = Minerals_Params(1.0, 1.0, 1.0, 1.0, 1.0) +yellowstar_hab = Habitat_Params(1.0, 1.5, 1.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) +greenstar_min = Minerals_Params(1.0, 1.0, 1.0, 1.5, 1.5) +greenstar_hab = Habitat_Params(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) + + +startypes.append((0.15, StarClass(name="Blue Giant", color="Blue", size="Giant", minerals_mod=bluestar_min, habitat_mod=bluestar_hab))) +startypes.append((0.15, StarClass(name="Green Star", color="Green", size="Star", minerals_mod=greenstar_min, habitat_mod=greenstar_hab))) +startypes.append((0.25, StarClass(name="Yellow Star", color="Yellow", size="Star", minerals_mod=yellowstar_min, habitat_mod=yellowstar_hab))) +startypes.append((0.30, StarClass(name="Red Dwarf", color="Red", size="Dwarf", minerals_mod=redstar_min, habitat_mod=redstar_hab))) +startypes.append((0.10, StarClass(name="Red Giant", color="Red", size="Giant", minerals_mod=redstar_min, habitat_mod=redstar_hab))) +startypes.append((0.05, StarClass(name="White Dwarf", color="White", size="Dwarf", minerals_mod=whitedwarf_min, habitat_mod=whitedwarf_hab))) + + + +def starmap_generate_star(map): + pass + +def starmap_generate(): + params = Starmap_Params() + numstars = int(round((params.size[0] * params.size[1] / 100.0) * params.density)) + mindist = None + mapx = params.size[0] - 2 + mapy = params.size[1] - 2 + map = Galaxy(params.size[0], params.size[1]) + i = 0 + print numstars + while True: + if i >= numstars: + break + + if i != 0: + mindist = max(175.0, (mapx + mapy) / 2.0 * 100.0 / ((i + 1)**0.75*0.75)) + + x = (random.random() * mapx) + 1 + y = (random.random() * mapy) + 1 + x *= 100 + y *= 100 + + if mindist != None: + star = map.get_nearest_star(x, y) + dist = map.get_distance(x, y, star.x, star.y) + if dist < mindist: + print "Dist (%s, %s): %s, Mindist (%s, %s): %s" % (star.x, star.y, dist, int(x), int(y), mindist) + continue + + loopcount = 0 + startype = None + while True: + loopcount += 1 + rv = random.random() + tot = 0.0 + for pct, startype_test in startypes: + tot += pct + if rv < tot: + startype = startype_test + break + + if startype != None: + break + + if loopcount >= 5: + raise IndexError + + + hab = params.habitat * startype.habitat_mod + min = params.minerals * startype.minerals_mod + hab = hab.random() + min = min.random() + + print "Generated star %s %s %s at (%s, %s)" % (startype.name, hab, min, int(x), int(y)) + + star = StarSys(int(x), int(y), startype, hab, min) + map.add_star(star) + + i += 1 + return map \ No newline at end of file diff --git a/starmap_gen.pyc b/starmap_gen.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5340f370d7b0dec7d80464656d28faf4b7859939 GIT binary patch literal 6676 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 math.pi*2.0: + dir -= math.pi*2.0 + return dir + +def bouncedir(normal, dir): + inv_normal = limitdir(normal + math.pi) + return limitdir(normal + (inv_normal - dir)) + + +loc_player = [100.0,150.0] +dir_player = math.pi * 0.80 + +size = width, height = (800,600) +scr = pygame.display.set_mode(size) + +#options +color_player = (255,255,255) +bounce = True +speed_player = 5.0 +trails = False + +scr.fill((0,0,0)) + +keys = [] +do_quit = False + +map = starmap_gen.starmap_generate() + +while True: + events = pygame.event.get((KEYDOWN, KEYUP, QUIT)) + for ev in events: + if ev.type == QUIT: + do_quit = True + break + elif ev.type == KEYUP: + try: + del keys[keys.index(ev.key)] + except IndexError: + pass + else: + keys += [ev.key] + + if do_quit: + break + + handle_keys(keys) + pygame.event.pump() + """ + loc_new = move(loc_player, dir_player, speed_player) + + if loc_new[0] < 5: + if not bounce: + loc_new[0] = width-6 + else: + dir_player = bouncedir(math.pi*0.5, dir_player) + elif loc_new[1] < 5: + if not bounce: + loc_new[1] = height-6 + else: + dir_player = bouncedir(math.pi, dir_player) + elif loc_new[0] > width - 5: + if not bounce: + loc_new[0] = 6 + else: + dir_player = bouncedir(math.pi*1.5, dir_player) + elif loc_new[1] > height - 5: + if not bounce: + loc_new[1] = 6 + else: + dir_player = bouncedir(0, dir_player) + + if bounce: + loc_new = move(loc_player, dir_player, speed_player) + + if not trails: + pygame.draw.circle(scr, (0,0,0), loc_player, 2, 1) + pygame.draw.circle(scr, color_player, loc_new, 2, 1) + + + loc_player = loc_new + """ + + for star in map.get_all_stars(): + star.draw(scr) + + + pygame.display.flip() \ No newline at end of file