手把手自制人工智能AI游戏1(附源码)

引言:近几年来人工智能的发展很火热,尤其是AI游戏决策方面。像王者荣耀的高级人机等等都得益于人工智能的发展。今天我们就将把一个游戏改成AI自动玩取得。

本文就将利用DQN算法玩转小时候经典的游戏-俄罗斯方块游戏。
在这里插入图片描述
其中代码分为下面几个步骤:

1、预准备:

import cv2
import numpy as np



2、  定义初始函数奖励机制:

def __init__(self):
        self.screen = np.ones((100, 100), np.float32) * 255
        self.screen = cv2.cvtColor(self.screen, cv2.COLOR_GRAY2BGR)
        self.steps = 0

    def frame_step(self, input_vec):
        reward = -1

        if self.screen[0,0,0] == 255:
            if input_vec[1] == 1:
                reward = 1
                self.screen *= (1./255.)
            elif input_vec[0] == 1:
                reward = 0
        else:
            if input_vec[2] == 1:
                reward = 1
                self.screen *= 255
            elif input_vec[0] == 1:
                reward = 0

        self.steps += 1
        terminal = False
        if self.steps >= 10:
            self.steps = 0
            terminal = True

        return self.screen, reward, terminal

3、  游戏部分代码:

import random, time, pygame, sys
from pygame.locals import *

FPS = 25
WINDOWWIDTH = 640
WINDOWHEIGHT = 480
BOXSIZE = 20
BOARDWIDTH = 10
BOARDHEIGHT = 20
BLANK = '.'

MOVESIDEWAYSFREQ = 0.15
MOVEDOWNFREQ = 0.1

XMARGIN = int((WINDOWWIDTH - BOARDWIDTH * BOXSIZE) / 2)
TOPMARGIN = WINDOWHEIGHT - (BOARDHEIGHT * BOXSIZE) - 5

gamma = 4

#               R    G    B
WHITE       = (255, 255, 255)
GRAY        = (185, 185, 185)
BLACK       = (  0,   0,   0)
RED         = (155,   0,   0)
LIGHTRED    = (175,  20,  20)
GREEN       = (  0, 155,   0)
LIGHTGREEN  = ( 20, 175,  20)
BLUE        = (  0,   0, 155)
LIGHTBLUE   = ( 20,  20, 175)
YELLOW      = (155, 155,   0)
LIGHTYELLOW = (175, 175,  20)

BORDERCOLOR = BLUE
BGCOLOR = BLACK
TEXTCOLOR = WHITE
TEXTSHADOWCOLOR = GRAY
COLORS      = (     BLUE,      GREEN,      RED,      YELLOW)
LIGHTCOLORS = (LIGHTBLUE, LIGHTGREEN, LIGHTRED, LIGHTYELLOW)
assert len(COLORS) == len(LIGHTCOLORS) # each color must have light color

TEMPLATEWIDTH = 5
TEMPLATEHEIGHT = 5

S_SHAPE_TEMPLATE = [['..OO.',
                     '.OO..',
                     '.....',
                     '.....',
                     '.....'],
                    ['..O..',
                     '..OO.',
                     '...O.',
                     '.....',
                     '.....']]

Z_SHAPE_TEMPLATE = [['.OO..',
                     '..OO.',
                     '.....',
                     '.....',
                     '.....'],
                    ['..O..',
                     '.OO..',
                     '.O...',
                     '.....',
                     '.....']]

I_SHAPE_TEMPLATE = [['..O..',
                     '..O..',
                     '..O..',
                     '..O..',
                     '.....'],
                    ['OOOO.',
                     '.....',
                     '.....',
                     '.....',
                     '.....']]

O_SHAPE_TEMPLATE = [['.OO..',
                     '.OO..',
                     '.....',
                     '.....',
                     '.....']]

J_SHAPE_TEMPLATE = [['.O...',
                     '.OOO.',
                     '.....',
                     '.....',
                     '.....'],
                    ['..OO.',
                     '..O..',
                     '..O..',
                     '.....',
                     '.....'],
                    ['.OOO.',
                     '...O.',
                     '.....',
                     '.....',
                     '.....'],
                    ['..O..',
                     '..O..',
                     '.OO..',
                     '.....',
                     '.....']]

L_SHAPE_TEMPLATE = [['...O.',
                     '.OOO.',
                     '.....',
                     '.....',
                     '.....'],
                    ['..O..',
                     '..O..',
                     '..OO.',
                     '.....',
                     '.....'],
                    ['.OOO.',
                     '.O...',
                     '.....',
                     '.....',
                     '.....'],
                    ['.OO..',
                     '..O..',
                     '..O..',
                     '.....',
                     '.....']]

T_SHAPE_TEMPLATE = [['..O..',
                     '.OOO.',
                     '.....',
                     '.....',
                     '.....'],
                    ['..O..',
                     '..OO.',
                     '..O..',
                     '.....',
                     '.....'],
                    ['.OOO.',
                     '..O..',
                     '.....',
                     '.....',
                     '.....'],
                    ['..O..',
                     '.OO..',
                     '..O..',
                     '.....',
                     '.....']]

PIECES = {'S': S_SHAPE_TEMPLATE,
          'Z': Z_SHAPE_TEMPLATE,
          'J': J_SHAPE_TEMPLATE,
          'L': L_SHAPE_TEMPLATE,
          'I': I_SHAPE_TEMPLATE,
          'O': O_SHAPE_TEMPLATE,
          'T': T_SHAPE_TEMPLATE}

在这里插入图片描述
效果如上图,仅仅训练了5秒的模型:

完整代码获取,后台回复“AI游戏1”,欢迎大家挂住我的公众号“人工智能实战及常见代码分享”
在这里插入图片描述

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
构建一个3D游戏引擎的源码需要考虑许多因素,包括图形渲染、物理模拟、碰撞检测、场景管理等。以下是一个简要的步骤: 首先,我们需要选择一个合适的编程语言,如C++或Python,来实现3D游戏引擎。 其次,我们需要设计和实现一个图形渲染器,以便在屏幕上渲染3D场景。这可以通过使用现有的图形库(如OpenGL或DirectX)来实现,也可以自己编写一个简化版本。 接下来,我们需要实现物理模拟,以使3D场景的物体能够逼真地运动和相互作用。这可以通过应用牛顿力学定律和碰撞检测算法来实现。 然后,我们需要设计一个场景管理系统,以便管理和呈现3D场景中的对象。这包括管理场景中的实体、灯光、相机等,并进行相应的渲染和更新。 在实现这些基本功能后,我们可以进一步添加地形生成、粒子系统、动画等高级特性。 在构建3D游戏引擎的过程中,我们需要遵循良好的软件工程原则,如模块化设计、面向对象编程和代码重用,以便使源码具有可维护性和扩展性。 最后,我们需要进行测试和调试,确保游戏引擎能够正确地渲染和模拟3D场景,并具有良好的性能。 总结起来,构建一个3D游戏引擎的源码需要深入了解图形渲染、物理模拟、碰撞检测等原理,并遵循一系列软件工程原则。这是一个庞大且复杂的项目,需要耐心和持续的努力才能完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI看世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值