QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3052|回复: 1

Fifteen 游戏代码及分析

[复制链接]
发表于 2006-4-7 11:00:47 | 显示全部楼层 |阅读模式
基于EGui的fifteen游戏代码及其文档

1. 什么是fifteen游戏?
  它是一个如图所示的16个格子,其中有0-14个带符号的格子和一个空格子。
  空格子可以用来交换,只有在空格子周围的带符号的格子才能和他交换。
  当玩家将按照行排列由0123,4567,89 10 11,12 13 14 空格。这样的4行。即游戏过关。

2. 做这个游戏的关键点。
  1:需要 15个带字的按钮。
  2:按钮可以移动。
  3:确定安钮的位置。
  4:查找安钮现在的位置,判断是否过关。

3. 按照上述思路开始看代码。
  3.1
    /* init position */
    init_pos ();
    这就是按钮的存放位置。将16个格子的位置初始化好。

    /* get random pos */
    random_pos ();
    开始新游戏时每个带数字的按钮,应该随机放哪里?,目前我的游戏没有做,
    指定了一个位置。并没有产生随机位置,如果谁愿意可以帮我补上。

    create_buttons (form);
    建立15个带数字的按钮,按照随机位置安排好。

    主程序的概要就这些。

  3.2
    按钮的移动和过关判断都在单击事件里。
    我们看单击事件:
   
   button_click ( EGui_Widget     *widget)

     /* find widget  */
  for (i=0;i<15;i++)
    {
      if (widget == button)
        {
          id = i;
          break;
        }
    }
  这段程序是获取单击了那个按钮。

  pos = find_array_by_id (id);
  can_move = find_empty (pos);
  这段是获取这个按钮的位置,判断是否可以移动。

  widget_move (widget,array_16[can_move].x,array_16[can_move].y);
  如果可以移动,就移动它,

  array_16[pos].id      = 15;
  array_16[can_move].id = id;

  更新移动后的数组表。
  winid = find_winid ();
  判断是否过关。

4. 完毕,程序主要的就分析这些。
   [email protected] www.egui.org

本帖子中包含更多资源

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

×
 楼主| 发表于 2006-4-7 11:04:13 | 显示全部楼层
有个朋友问,有没有具体的项目,其实EGui有很多需要大家参与做的.请看下一个游戏的设想.

并且有很多我做了一个框架,没有时间去优化.还多请大家帮忙.

本帖子中包含更多资源

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

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 18:33 , Processed in 0.062739 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表