在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 423|回复: 5

[原创] innovus 可以玩贪吃蛇了,快来玩啊!!!!!!!

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
静态效果如下,可以自己按键盘上下左右方向键去调整蛇头前进方向


图片1.png    图片2.png    

贪吃蛇代码图示

贪吃蛇代码图示
发表于 前天 15:50 | 显示全部楼层
不对啊  innovus   根本没有create_gui_* 的command
 楼主| 发表于 前天 16:34 | 显示全部楼层


songzhihe66 发表于 2025-7-31 15:50
不对啊  innovus   根本没有create_gui_* 的command


请用common ui启动,即innovus -stylus
发表于 昨天 09:42 | 显示全部楼层
哈哈哈 可以试着玩一下
发表于 昨天 11:06 | 显示全部楼层
好歹整个能复制粘贴的代码啊




  1. set ::grid_size 20
  2. set ::cell_size 10
  3. set ::snake { {5 5} {5 6} {5 7} }
  4. set ::food [list [expr int(rand()*15)] [expr int(rand()*15)]]
  5. set ::direction RIGHT
  6. set ::game_over 0

  7. catch {delete_obj [get_db gui_shapes]}
  8. catch {delete_obj [get_db gui_texts]}

  9. proc create_game_area {} {
  10.   create_gui_shape -name boundary -layer M1 \
  11.    -rect [list 0 0 \
  12.     [expr $::grid_size * $::cell_size] \
  13.     [expr $::grid_size * $::cell_size]]
  14.   foreach segment $::snake {
  15.     lassign $segment x y
  16.         create_snake_segment $x $y
  17.   }
  18.   create_food [lindex $::food 0] [lindex $::food 1]
  19. }

  20. proc delete_game_element name {
  21.   if {[get_db gui_shapes $name] ne ""} {
  22.     delete_obj [get_db gui_shapes $name]
  23.   }
  24. }

  25. proc create_snake_segment {x y} {
  26.   set x1 [expr $x * $::cell_size]
  27.   set y1 [expr $y * $::cell_size]
  28.   set x2 [expr $x1 + $::cell_size - 1]
  29.   set y2 [expr $y1 + $::cell_size - 1]
  30.   create_gui_shape -name snake_${x}_${y} -layer M2 \
  31.    -rect [list $x1 $y1 $x2 $y2]
  32. }

  33. proc create_food {x y} {
  34.   set x1 [expr $x * $::cell_size]
  35.   set y1 [expr $y * $::cell_size]
  36.   set x2 [expr $x1 + $::cell_size - 1]
  37.   set y2 [expr $y1 + $::cell_size - 1]
  38.   create_gui_shape -name food -layer M3 \
  39.    -rect [list $x1 $y1 $x2 $y2]
  40. }

  41. proc move_snake {} {
  42.   if {$::game_over} return
  43.   set head [lindex $::snake end]
  44.   lassign $head x y
  45.   switch $::direction {
  46.     UP    { set new_head [list $x [expr $y+1]] }
  47.         DOWN  { set new_head [list $x [expr $y-1]] }
  48.         LEFT  { set new_head [list [expr $x-1] $y] }
  49.         RIGHT { set new_head [list [expr $x+1] $y] }
  50.   }
  51.   if {[check_collision $new_head]} {
  52.     create_gui_text -height 10 -label "Game Over! Score [expr [llength $::snake] - 3]" \
  53.          -pt "[expr $::grid_size * $::cell_size / 2] [expr $::grid_size * $::cell_size / 2]" \
  54.          -layer LB
  55.         set ::game_over 1
  56.         gui_redraw
  57.         puts "Game Over! Score [expr [llength $::snake] - 3]"
  58.         return
  59.   }
  60.   lappend ::snake $new_head
  61.   lassign $new_head nx ny
  62.   create_snake_segment $nx $ny
  63.   if {$x == [lindex $::food 0] && $ny == [lindex $::food 1]} {
  64.     delete_obj [get_db gui_shapes food]
  65.         set valid_food 0
  66.         while {!$valid_food} {
  67.           set new_food_x [expr int(rand()*$::grid_size)]
  68.           set new_food_y [expr int(rand()*$::grid_size)]
  69.           set valid_food 1
  70.           foreach segment $::snake {
  71.             if {$new_food_x == [lindex $segment 0] && $new_food_y == [lindex $segment 1]} {
  72.                   set valid_food 0
  73.                   break
  74.                 }
  75.           }
  76.         }
  77.         set ::food [list $new_food_x $new_food_y]
  78.         create_food [lindex $::food 0] [lindex $::food 1]
  79.   } else {
  80.     set tail [lindex $::snake 0]
  81.         set ::snake [lrange $::snake 1 end]
  82.         lassign $tail tx ty
  83.         delete_obj [get_db gui_shapes snake_${tx}_${ty}]
  84.   }
  85.   after 300 move_snake
  86. }

  87. proc check_collision pos {
  88.   lassign $pos x y
  89.   if {$x < 0 || $x >= $::grid_size || $y < 0 || $y >= $::grid_size} {
  90.     return 1
  91.   }
  92.   foreach segment [lrange $::snake 0 end-1] {
  93.     if {$segment == $pos} {
  94.           return 1
  95.         }
  96.   }
  97.   return 0
  98. }

  99. proc key_control key {
  100.   switch $key {
  101.     Up    { if {$::direction ne "DOWN"}  { set ::direction UP } }
  102.     Down  { if {$::direction ne "UP"}    { set ::direction DOWN } }
  103.     Left  { if {$::direction ne "RIGHT"} { set ::direction LEFT } }
  104.     Right { if {$::direction ne "LEFT"}  { set ::direction RIGHT } }
  105.   }
  106. }

  107. bindKey Up    {key_control Up}
  108. bindKey Down  {key_control Down}
  109. bindKey Left  {key_control Left}
  110. bindKey Right {key_control Right}

  111. create_game_area
  112. after 200 move_snake


复制代码
 楼主| 发表于 昨天 12:22 | 显示全部楼层


Challensys 发表于 2025-8-1 11:06
好歹整个能复制粘贴的代码啊


公司电脑,无法文件交互。敬请见谅!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-2 06:51 , Processed in 0.021752 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表