11from  ursina  import  * 
22from  ursina .prefabs .first_person_controller  import  FirstPersonController 
3+ import  pickle  # added 
4+ import  os  # added 
35
46app  =  Ursina ()
57
6- grass_texture  =  load_texture ("assets/grass.png" )
7- soil_texture  =  load_texture ("assets/soil.png" )
8- stone_texture  =  load_texture ("assets/stone.png" )
9- wood_texture  =  load_texture ("assets/wood.png" )
8+ #removed load_texture 
9+ grass_texture  =  "assets/grass.png" 
10+ soil_texture  =  "assets/soil.png" 
11+ stone_texture  =  "assets/stone.png" 
12+ wood_texture  =  "assets/wood.png" 
1013
1114sky_texture  =  load_texture ("assets/sky.png" )
1215
@@ -19,6 +22,10 @@ def update():
1922 if  held_keys ['3' ]: current_texture  =  stone_texture 
2023 if  held_keys ['4' ]: current_texture  =  wood_texture 
2124
25+  # added 
26+  if  held_keys ['g' ]:
27+  save_game ()
28+ 2229 if  held_keys ['left mouse' ] or  held_keys ['right mouse' ]:
2330 hand .active ()
2431 else :
@@ -57,6 +64,9 @@ def passive(self):
5764 self .position  =  Vec2 (0.4 , - 0.4 )
5865
5966
67+ 68+ game_data  =  []
69+ 6070class  Voxel (Button ):
6171 def  __init__ (self , position = (0 , 0 , 0 ), texture = grass_texture ):
6272 super ().__init__ (
@@ -73,16 +83,37 @@ def input(self, key):
7383 if  self .hovered :
7484 if  key  ==  "left mouse down" :
7585 voxel  =  Voxel (position = self .position  +  mouse .normal  , texture = current_texture )
86+  pos  =  self .position  +  mouse .normal 
87+  game_data .append ([(pos .x ,pos .y ,pos .z ),current_texture ])
7688 if  key  ==  'right mouse down' :
7789 destroy (self )
7890
7991
80- for  z  in  range (15 ):
81-  for  x  in  range (15 ):
82-  voxel  =  Voxel ((x , 0 , z ))
92+ 93+ def  save_game ():
94+  with  open ("game_stage.pickle" , "wb" ) as  file_ :
95+  pickle .dump (game_data , file_ , - 1 )
96+ 97+ def  load_basic_game ():
98+  for  z  in  range (- 20 ,15 ):
99+  for  x  in  range (- 20 ,15 ):
100+  voxel  =  Voxel ((x , 0 , z ),texture = grass_texture )
101+  game_data .append ([(x ,0 ,z ),grass_texture ])
102+ 103+ def  load_saved_game ():
104+  saved_game  =  pickle .load (open ("game_stage.pickle" , "rb" , - 1 ))
105+  for  data  in  saved_game :
106+  voxel  =  Voxel (data [0 ],data [1 ])
107+ 108+ if  os .path .isfile ("game_stage.pickle" ):
109+  load_saved_game ()
110+ else :
111+  load_basic_game ()
112+  save_game ()
83113
84114player  =  FirstPersonController ()
85115sky  =  Sky ()
86116hand  =  Hand ()
87117
118+ 88119app .run ()
0 commit comments