编写程序先简单做一个思维架构 函数方法
1.主界面总结
类名大写,文件名、函数名小写,
import numpy as np #应用已有的库
import time
import game_functions as gf #应用自己编写的函数模块
from maze_env import Maze #应用自己写的库 form+文件名 import+类名
UNIT = 40 # pixles 像素 本文件下的全局变量
class Maze: #类应用库方法 Maze(tk.Tk, object):
def __init__(self): #初始类 也可以 __init__(self, ai_settings, screen)
super(Maze, self).__init__() #继承
self.action_space = ['u', 'd', 'l', 'r'] # 赋值变量
self.title('maze') #应用库中函数
self._build_maze() #呈现图像 编写自己的函数方法也可以放在这里
def _build_maze(self): #函数方法 1.变量赋值2.动作3.是否返回值
self.canvas = tk.Canvas(self, bg='white', #背景
height=MAZE_H * UNIT,
width=MAZE_W * UNIT)
# 创造网格
for c in range(0, MAZE_W * UNIT, UNIT):
x0, y0, x1, y1 = c, 0, c, MAZE_H * UNIT
self.canvas.create_line(x0, y0, x1, y1)
# return observation 返回值
return self.canvas.coords(self.rect)
def update(): #函数方法的书写
for t in range(10):
s = env.reset()
while True:
env.render()
a = 1
s, r, done = env.step(a)
if done:
break
if __name__ == "__main__": #主函数方法的调用 双引号
env = Maze()
env.after(100, update)
env.mainloop()
2.编写代码注意
1.主函数中 def 为方法必须调用才运行。
2.其他功能尽可能的写在函数方法体中。
3.句子后加不加分号 ; 但def,class,if,for 等后加冒号 :
3.类初始化传值——例子
class QLearingTable:
def __init__(self,actions,learning_rate=0.01,reward_decay=0.9,e_greedy=0.9):
self.actions=actions # a liat
self.lr=learning_rate
self.gamma=reward_decay
self.epsilon=e_greedy
self.q_table=pd.DataFrame(columns=self.actions,dtype=np.float64)
4.继承父类
1.父类
class RL(object):
def __init__(self, action_space, learning_rate=0.01):
2.继承父类
class QLearningTable(RL): # 继承了父类 RL
def __init__(self, actions, learning_rate=0.01):
super(QLearningTable, self).__init__(actions, learning_rate) # 表示继承关系