deepseek写程序了 - block puzzle game

STEM版,合并数学,物理,化学,科学,工程,机械。不包括生物、医学相关,和计算机相关内容。

版主: verdeliteTheMatrix

wdong(万事休)
见习作家
见习作家
帖子互动: 92
帖子: 410
注册时间: 2023年 11月 13日 15:13

#21 Re: deepseek写程序了 - block puzzle game

帖子 wdong(万事休) »

Caravel 写了: 2025年 2月 13日 14:52 incremental的训练非常重要

应该从一个原始的github开始,人是怎么计划的,写一个prompt,然后加一部分code

然后再进来一个ticket,加一段code

用这种history 记录训练模型

每一个单步难度远不如ioi
Cursor我觉得就是这么训练的。 但是没用。我觉得目前的训练技术离大局观还很远。AI目前还没法操盘。

目前的训练技术里没有跨越不同逻辑层次的内容。以小学生的方式去训练AI,就是数据再大,我觉得也训练不出来大学生。 Reasoning是这方面努力的开始,但还差得远。

我不会说AI这么就没用。怎么发挥AI的作用是我们的责任。咱的盘子目前还很稳。

标签/Tags:
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#22 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

Caravel 写了: 2025年 2月 13日 14:52 incremental的训练非常重要

应该从一个原始的github开始,人是怎么计划的,写一个prompt,然后加一部分code

然后再进来一个ticket,加一段code

用这种history 记录训练模型

每一个单步难度远不如ioi
AI要加一个外部存储。

或者说AI要区分“知识”和“事实”。知识比事实高级,但是事实必须准确,比如program code。

神经网络中存储的是知识,都是高级的东西,也都是灵活的东西。你问同样的问题问两次,得到的答案不一样,但是大意一样。这对于知识可以,但是对于事实比如program code不行。

人也是这么工作的。
Caravel
论坛元老
论坛元老
Caravel 的博客
帖子互动: 583
帖子: 25178
注册时间: 2022年 7月 24日 17:21

#23 Re: deepseek写程序了 - block puzzle game

帖子 Caravel »

:evil:
wdong 写了: 2025年 2月 13日 15:52 Cursor我觉得就是这么训练的。 但是没用。我觉得目前的训练技术离大局观还很远。AI目前还没法操盘。

目前的训练技术里没有跨越不同逻辑层次的内容。以小学生的方式去训练AI,就是数据再大,我觉得也训练不出来大学生。 Reasoning是这方面努力的开始,但还差得远。

我不会说AI这么就没用。怎么发挥AI的作用是我们的责任。咱的盘子目前还很稳。
推理模型已经涌现了复杂推理的pattern,比如分支尝试,回滚,验证。

如果把编程任务分解的很细,应该可以写出来。

我觉得大公司可以雇佣一些程序员,自己不写code,就是做分解,分解完了,写prompt,指导AI完成。

high level planning需要学习的

目前的训练数据里面没有这样的东西

思维链据说也是人类先掺了一些进预训练模型,才能出来。
上次由 Caravel 在 2025年 2月 13日 16:07 修改。
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#24 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

wdong 写了: 2025年 2月 12日 20:47 这就是HCI说的落不了地。 开始一个事情容易,但是能把起了头的事情干完是一种能力。这种能力就是人也不是个个都有的。靠AI没戏,还是得有人掌控全局。人掌控全局就不能让A。我看好的也仅仅是人+AI能落地。

你这个400行,就是我上次说的碎片化。其实400行都多。 如果每个文件不超过40行,或者每次定位要改的部分在40行之内,那改起来就容易了。怎么碎片化我还没搞定。

我下一步还不是用agent写程序。我打算先让agent做literature survey。
嗯。对。关键是怎么解耦。AI做40行的程序是可以信赖的。

AI可以做任何层面的设计,关键是不能长。

顶层方面,让AI出几个方案,AI的见闻广,对人会有帮助的。

确定一个方案,再让AI出一个步骤计划。

一步一步层次往下走。关键是得让它记下来。不能每次问都不一样。
webdriver(不折腾不舒服斯基)
见习点评
见习点评
帖子互动: 66
帖子: 1242
注册时间: 2022年 11月 11日 12:30
来自: 火星

#25 Re: deepseek写程序了 - block puzzle game

帖子 webdriver(不折腾不舒服斯基) »

看看有博主做的游戏
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#26 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

webdriver 写了: 2025年 2月 13日 16:10 看看有博主做的游戏
这个是AI打游戏,不是AI写游戏。

不过视频最后说Github CEO演示了一个AI写的贪吃蛇游戏。说用了18分钟。看起来是没有人机交互的。

AI能力可能会越来越强,但是我们要的是人机交互,不能黑匣子。
Caravel
论坛元老
论坛元老
Caravel 的博客
帖子互动: 583
帖子: 25178
注册时间: 2022年 7月 24日 17:21

#27 Re: deepseek写程序了 - block puzzle game

帖子 Caravel »

TheMatrix 写了: 2025年 2月 13日 16:24 这个是AI打游戏,不是AI写游戏。

不过视频最后说Github CEO演示了一个AI写的贪吃蛇游戏。说用了18分钟。看起来是没有人机交互的。

AI能力可能会越来越强,但是我们要的是人机交互,不能黑匣子。
个人觉得这种一句话prompt的意义不大,大概率就是记住的。应该和人类那样些,先讨论plan,然后一步步实现,code review修改,通过。
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#28 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

400行的程序。这怎么改啊?

图片
webdriver(不折腾不舒服斯基)
见习点评
见习点评
帖子互动: 66
帖子: 1242
注册时间: 2022年 11月 11日 12:30
来自: 火星

#29 Re: deepseek写程序了 - block puzzle game

帖子 webdriver(不折腾不舒服斯基) »

TheMatrix 写了: 2025年 2月 14日 17:59 400行的程序。这怎么改啊?

图片
运行呗,然后告诉AI哪里出问题,让它改进
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#30 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

我这个已经能玩了。

手撸的:

图片
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#31 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

GAME OVER!

全手撸大概也是400行程序。不过比较dense。加点注释,写松一点,应该1000行左右吧。

图片
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#32 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

game design我感觉一般来讲思路是有限状态自动机,FSA,核心是状态(图),事件来了进行状态转移。

但是我更喜欢BNF (Backus–Naur form)。这两个是等价的,我认为。而且BNF可能比FSA强一些,因为BNF可以命名和递归。

BNF的一大优势是自顶向下设计。非常适合手撸。同时也适合机器生成,yacc就是这种形式。

这两个的区别,我认为,是着眼点不同。FSA着眼于状态,状态图,状态转换。而BNF的着眼点是事件流,相当于符号流,可以有语法。

下面是我把这个game写成一个BNF:

game: game_init, game_going+

game_init: game_static_init, generate_preview_blocks

game_going: null_mouse_event
game_going: click_drag_release

click_drag_release: click_a_preview_block, drag_a_block*, release_a_block

click_a_preview_block: MOUSE_CLICK, mouse_click_effect

drag_a_block: MOUSE_MOVE, mouse_drag_effect
mouse_drag_effect: not_fit_in_board, drag_block
mouse_drag_effect: fit_in_board, show_fit_in, drag_block

release_a_block: MOUSE_RELEASE, mouse_release_effect
mouse_release_effect: not_fit_in_board, go_back_to_preview
mouse_release_effect: fit_in_board, update_board, update_preview
update_preview: update_preview_blocks, update_game_over
update_preview_blocks: no_preview_blocks, generate_preview_blocks
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#33 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

TheMatrix 写了: 2025年 3月 2日 12:45 game: game_init, game_going+

game_init: game_static_init, generate_preview_blocks

game_going: null_mouse_event
game_going: click_drag_release

click_drag_release: click_a_preview_block, drag_a_block*, release_a_block

click_a_preview_block: MOUSE_CLICK, mouse_click_effect

drag_a_block: MOUSE_MOVE, mouse_drag_effect
mouse_drag_effect: not_fit_in_board, drag_block
mouse_drag_effect: fit_in_board, show_fit_in, drag_block

release_a_block: MOUSE_RELEASE, mouse_release_effect
mouse_release_effect: not_fit_in_board, go_back_to_preview
mouse_release_effect: fit_in_board, update_board, update_preview
update_preview: update_preview_blocks, update_game_over
update_preview_blocks: no_preview_blocks, generate_preview_blocks
BNF遵照regular expression的格式写。有?,*,+,代表zero or one,zero or more,one or more。

BNF直接翻译成程序。这里因为事件流是被python tk截获的,所以和自己截获事件流写法稍微有点区别。

代码: 全选


import tkinter as tk
import random

class BlockPuzzle:
    def __init__(self):
        pass
 
game = BlockPuzzle()

def game_init():
    game_static_init()
    generate_preview_blocks()
    
def game_static_init():
    game_init_layout()
    game_init_canvas()

def generate_preview_blocks():
    pass

def game_going(event):
    game.event = event
    if null_mouse_event(): return
    if click_drag_release(): return

def null_mouse_event():
    #game over
    #not click on a preview block
    #clicked on a preview block but the block is empty
    #clicked on a preview block but the block is dead
    #mouse move but not in a dragging state
    #mouse release but not in a dragging state
    return False

def click_drag_release():
    if click_on_a_preview_block():
        while drag_a_block(): pass
        release_a_block()

def click_on_a_preview_block():
    return True

def drag_a_block():
    event_type = tk.EventType(game.event.type).name
    if event_type == "Motion":
        mouse_drag_effect()
        return True
    return False

def mouse_drag_effect():
    pass

def release_a_block():
    event_type = tk.EventType(game.event.type).name
    if event_type == "ButtonRelease":
        mouse_release_effect()

def mouse_release_effect():
    if not fit_in_board():
        go_back_to_preview()
    else:
        update_board()
        update_preview()

def go_back_to_preview():
    pass

def update_board():
    pass

def update_preview():
    update_preview_blocks()
    update_game_over()

def update_preview_blocks():
    if no_preview_blocks():
        generate_preview_blocks()

if __name__ == "__main__":
    root = tk.Tk()
    game = BlockPuzzle()
    game_init()
    root.mainloop()

头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#34 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

TheMatrix 写了: 2025年 3月 2日 12:51 BNF遵照regular expression的格式写。有?,*,+,代表zero or one,zero or more,one or more。

BNF直接翻译成程序。这里因为事件流是被python tk截获的,所以和自己截获事件流写法稍微有点区别。
自顶向下设计完毕,接下来就简单了。一个函数一个函数的填,相当于localized了。我估计叫deepseek也能出来。这个我要回头试一下。

先填两个函数。这是之前写过的。

代码: 全选

def game_init_layout():
    game.game_bg_color = "#1A2B3C"
    game.cell_color = game.game_bg_color
    game.grid_color = "#708090"

    game.padx = 100
    game.top_section_pady = 20
    game.board_pady = 20
    game.preview_pady = 20
    game.bottom_pady = 20

    game.cell_size = 50
    game.preview_cell_size = 24
    game.grid_border = 1
    game.board_n_cell = 8
    game.board_size = game.cell_size * game.board_n_cell

    game.top_section_x = game.padx
    game.top_section_y = game.top_section_pady
    game.top_section_height = 100
    game.top_section_width = game.board_size

    game.board_x = game.padx
    game.board_y = game.top_section_y + game.top_section_height + game.board_pady

    game.preview_x = game.padx
    game.preview_y = game.board_y + game.board_size + game.preview_pady
    game.preview_width = game.board_size
    game.preview_height = game.board_size // 2

    game.canvas_width = 2 * game.padx + game.board_size
    game.canvas_height = game.preview_y + game.preview_height + game.bottom_pady
    
    game.preview_one_size = 5* game.preview_cell_size
    game.preview_padx = 10
    xx = game.preview_width - 3* game.preview_one_size - 2* game.preview_padx
    assert(xx % 2 == 0)
    game.preview_lr_padx = xx // 2
    game.preview_one_x = [
        game.preview_x + game.preview_lr_padx +
        i* (game.preview_one_size + game.preview_padx) 
        for i in range(3)]
    game.preview_one_y = game.preview_y

def game_init_canvas():
    root.title("Block Puzzle")
    root.resizable(False, False)
    game.canvas = tk.Canvas(
        root, 
        bg=game.game_bg_color, 
        highlightthickness=0, 
        width=game.canvas_width, 
        height=game.canvas_height,
        )
    game.canvas.pack()
    game.canvas.bind("<Button-1>", game_going)
    game.canvas.bind("<B1-Motion>", game_going)
    game.canvas.bind("<ButtonRelease-1>", game_going)
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#35 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

这里加个函数。

代码: 全选

def game_static_init():
    game_init_layout()
    game_init_canvas()
    set_game_blocks()
定义在这里。

代码: 全选

def variation_blocks():
    def rotate(p):
        x,y = p
        return -y,x

    def normalize(block):
        min_x = min(dx for dx,dy in block)
        min_y = min(dy for dx,dy in block)
        nblock = [(dx-min_x, dy-min_y) for dx,dy in block]
        return nblock

    def variation_block(block):
        nblocks = []
        nb = block
        for i in range(4):
            nb = sorted(nb)
            nblocks.append(tuple(nb))
            nb = [game.rotate(c) for c in nb]
            nb = game.normalize(nb)
        nblocks = list(set(nblocks))
        return nblocks

    game.tetris_blocks = []
    for block in game.base_tetris_blocks:
        nblocks = game.variation_block(block["shape"])
        game.tetris_blocks += [{"shape": b, "color": block["color"]} for b in nblocks]

def set_game_blocks():
    game.base_tetris_blocks = [
        {"shape": [(0, 0), (0, 1), (0, 2), (0, 3)], "color": "#6DB3AC"},  # I (4-square)
        {"shape": [(0, 0), (0, 1), (1, 0), (1, 1)], "color": "#F0F000"},  # O
        {"shape": [(0, 0), (1, 0), (1, 1), (2, 0)], "color": "#BD4DF5"},  # T
        {"shape": [(0, 1), (0, 2), (1, 0), (1, 1)], "color": "#00F000"},  # S
        {"shape": [(0, 0), (0, 1), (1, 1), (1, 2)], "color": "#F00000"},  # Z
        {"shape": [(0, 0), (1, 0), (2, 0), (2, 1)], "color": "#699EEB"},  # J
        {"shape": [(0, 1), (1, 1), (2, 0), (2, 1)], "color": "#F0A000"},  # L
        
        # Custom blocks
        {"shape": [(0, 0)], "color": "#F09050"},  # 1-square
        {"shape": [(0, 0), (0, 1)], "color": "#6FEA85"},  # 2-square
        {"shape": [(0, 0), (0, 1), (0, 2)], "color": "#B34DB3"},  # 3-line
        {"shape": [(0, 0), (0, 1), (1, 1)], "color": "#A5B350"},  # L-3
        
        # 5-square blocks
        {"shape": [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)], "color": "#D0603C"},  # 5-line (Dark Turquoise)
        {"shape": [(0, 0), (0, 1), (0, 2), (1, 2), (2, 2)], "color": "#C8BA4A"},  # Right-angle (Red)
        
        # 9-square block
        {"shape": [
            (0, 0), (0, 1), (0, 2),
            (1, 0), (1, 1), (1, 2),
            (2, 0), (2, 1), (2, 2)
            ], "color": "#FFD700"}  # 3x3 (Gold)
        
        ]
    variation_blocks()
    
头像
mmking(上水)
论坛支柱
论坛支柱
帖子互动: 1330
帖子: 9656
注册时间: 2023年 1月 25日 05:10

#36 Re: deepseek写程序了 - block puzzle game

帖子 mmking(上水) »

以后程序员可以做labeler
Caravel 写了: 2025年 2月 12日 22:06 他们可以ioi拿金牌,说明只要套路训练好了就可以

目前推理模型跟coding结合时间还不长,
这个煎饼多少钱? :D viewtopic.php?t=833307

凡所有相,皆是虚妄

图片
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#37 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

init又加一个函数:

代码: 全选

def game_static_init():
    game_init_layout()
    game_init_canvas()
    set_game_blocks()
    game_init_board()

代码: 全选

def game_init_board():
    #board grids
    for row in range(8):
        for col in range(8):
            x1 = col * game.cell_size + game.board_x
            y1 = row * game.cell_size + game.board_y
            x2 = x1+ game.cell_size -1
            y2 = y1+ game.cell_size -1
            game.canvas.create_rectangle(
            x1,y1,x2,y2, 
            fill=game.cell_color,
            outline=game.grid_color,
            width=game.grid_border,
                )

    #board outer border
    game.canvas.create_rectangle(
        game.board_x-1,
        game.board_y-1,
        game.board_x+game.board_size,
        game.board_y+game.board_size,
        #fill=game.cell_color,
        outline=game.grid_color,
        width=game.grid_border,
        )
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#38 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

preview的部分填充一下。这样game_init的部分就完成了。接下来是game_going,也就是mouse event的处理。

game: game_init, game_going+
game_init: game_static_init, generate_preview_blocks

代码: 全选

def generate_preview_blocks():
    nblock = len(game.tetris_blocks)
    game.preview_blocks = [random.choice(range(nblock)) for i in range(3)]
    game.preview_blocks_present = [True for i in range(3)]
    game.preview_blocks_dead = [False for i in range(3)]
    game.preview_blocks_rect = [[] for i in range(3)]
    for i in range(3):
        put_preview_block(i)

代码: 全选

def put_preview_block(i, color=None):
    block = game.tetris_blocks[game.preview_blocks[i]]
    if color is None:
        color = block["color"]
    nx = max(dx for dx,dy in block["shape"])+1
    ny = max(dy for dx,dy in block["shape"])+1
    xx = game.preview_one_size - nx*game.preview_cell_size
    assert(xx % 2 == 0)
    yy = game.preview_one_size - ny*game.preview_cell_size
    assert(yy % 2 == 0)
    for dx,dy in block["shape"]:
        x1 = dx* game.preview_cell_size + game.preview_one_x[i] + xx//2
        y1 = dy* game.preview_cell_size + game.preview_one_y + yy//2
        x2 = x1+ game.preview_cell_size -1
        y2 = y1+ game.preview_cell_size -1
        game.preview_blocks_rect[i].append(
            game.canvas.create_rectangle(
                x1,y1,x2,y2,
                fill=color,
                outline=game.game_bg_color,
                width=game.grid_border,
                ))
头像
TheMatrix楼主
论坛支柱
论坛支柱
2024年度优秀版主
TheMatrix 的博客
帖子互动: 264
帖子: 13327
注册时间: 2022年 7月 26日 00:35

#39 Re: deepseek写程序了 - block puzzle game

帖子 TheMatrix楼主 »

TheMatrix 写了: 2025年 3月 2日 14:37 preview的部分填充一下。这样game_init的部分就完成了。接下来是game_going,也就是mouse event的处理。

game: game_init, game_going+
game_init: game_static_init, generate_preview_blocks
现在是这样的。已经能看了!

图片
rtyu
见习写手
见习写手
帖子互动: 9
帖子: 95
注册时间: 2022年 9月 9日 01:24

#40 Re: deepseek写程序了 - block puzzle game

帖子 rtyu »

Caravel 写了: 2025年 2月 13日 14:52 incremental的训练非常重要

应该从一个原始的github开始,人是怎么计划的,写一个prompt,然后加一部分code

然后再进来一个ticket,加一段code

用这种history 记录训练模型

每一个单步难度远不如ioi
AI网页版的是不是每次要把以前所有对话内容全部发给AI?用git history可以省略一大部分对话记录。
可以写个command line下文字输入和输出的编程工具。
先输入prompt,AI用Python写输出code(含Unit test)。
Python在terminal下运行code和unit test,输出错误信息和Unit test结果,把输出结果和对话记录反馈给AI,直到都没错了在让AI存到local git。
现在上面的对话可以不需要了,用git 里的code和commit history开始下一个循环(添加修改功能)
回复

回到 “STEM”