65.9K
CodeProject 正在变化。 阅读更多。
Home

使用适用于 .NET 2.0 的 AllegNet 库创建游戏

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.32/5 (9投票s)

2005年12月9日

2分钟阅读

viewsIcon

53818

downloadIcon

1745

一篇关于如何使用 AllegNet 库以 .NET 2.0 框架的托管语言编写游戏的文章。

目录

引言

AllegNet 是一个基于著名的 C++ Allegro 库的游戏编程库。 最初,AllegNet 只是一个包装器,但由于需要在托管环境中处理大量对象,我通过重新创建一组类、结构和函数来更改它,以便拥有完全托管的对象来使用。

使用 AllegNet,您可以创建游戏和多媒体应用程序,并在用户的 PC 上支持 DirectX。 AllegNet 提供与 Allegro 库 4.2.0 相同的功能,但进行了一些修改,以带来 .NET Framework 2.0 的强大功能。

AllegNet 是一个完全托管的库,因此您可以使用 C#、VB.NET、C++.NET 和 J#。 Examples 部分中的所有示例都提供 C#、VB.NET,有时也提供 J#。

本文将介绍如何开始使用 AllegNet 库创建支持 DirectX 的多媒体应用程序。

必备组件

为了安装和运行一些代码,您必须检查两点

  • 文件msvcr80.dll 必须存在于 %windir%\system32 目录中。
  • 文件 alleg42.dll 必须存在于 %windir%\system32 目录中。

这两个文件可以在这里找到。

创建您的第一个 AllegNet 兼容程序

打开 Visual Studio Express,并创建一个新的控制台应用程序项目。 接下来,添加对 AllegNet 库的引用。 您可以在这里下载一个版本。

为了轻松完全访问该库,您可以从 AllegNet.API 类继承主类。

//C# version
//Don't forget to add
using using AllegNet;
class MainClass : API
{
    //Code here... 
}
'VB version

'Don't forget to add imports
imports AllegNet

Public Class MainClass inherits API

    'Code here... 

End Class

您必须在使用库之前对其进行初始化。 Allegro_Init 函数可以做到这一点。 您还需要添加键盘事件。

//C# Version

if (Allegro_init() != 0)
  return 1;

Install_keyboard();
'VB version

If Allegro_init() <> 0 Then
    Return 1
End If
Install_keyboard()

使用代码

现在,您将创建一个函数,该函数将显示一种渐变条,显示屏幕的颜色深度。

//C# Version
public static void TestColor(COLOR_DEPTH colordepth)
{
  int x;
  //You need a PALETTE object to deal with 8bits color depth
  PALETTE pal = new PALETTE();
 
            
 
  /* set the screen mode */
  API.Set_color_depth(colordepth);
'VB Version
Public Shared Sub TestColor(ByVal colordepth As COLOR_DEPTH)
    Dim x As Integer Dim pal As PALETTE = New PALETTE()

    'set the screen mode  API.Set_color_depth(colordepth)

接下来,您将创建一个伪 332 调色板来模拟 8 位深度的渐变调色板。 您将创建一个 640*480 BITMAP 缓冲区并将屏幕设置为 640*480 分辨率,并将颜色深度设置为颜色深度变量。

//C# Version

BITMAP Buffer = API.Create_bitmap(SCREEN_RESOLUTIONS.SIZE_640_480);
 
if (API.Set_gfx_mode(GFX_MODES.GFX_DIRECTX_WIN, 
        SCREEN_RESOLUTIONS.SIZE_640_480) != 0)
    return;

Generate_332_palette(ref pal); Set_palette(pal);
 
API.Clear_to_color(Buffer,API.Makecol(0,0,0));
'VB Version
Dim Buffer As BITMAP = _
   API.Create_bitmap(SCREEN_RESOLUTIONS.SIZE_640_480)
 
If API.Set_gfx_mode(GFX_MODES.GFX_AUTODETECT_FULLSCREEN, _
       SCREEN_RESOLUTIONS.SIZE_640_480) <> 0 Then
    Return
End If
 
Generate_332_palette(pal)
Set_palette(pal)
 
API.Clear_to_color(Buffer, API.Makecol(0, 0, 0))

现在您可以在屏幕的左侧绘制一些彩色字符串。 您可以使用 Textout_ex 函数和缓冲区,以及默认字体对象。

//C# Version

Textout_ex(Buffer, Font, ((int)colordepth).ToString() + 
           " bit color...", 0, 0,
            Makecol(255, 255, 255), -1);
 
Textout_ex(Buffer, Font, "Red", 32, 80, 
                   Makecol(255, 0, 0), -1);
Textout_ex(Buffer, Font, "Green", 32, 100, 
                   Makecol(0, 255, 0), -1);
Textout_ex(Buffer, Font, "Blue", 32, 120, 
                   Makecol(0, 0, 255), -1);
Textout_ex(Buffer, Font, "Yellow", 32, 140, 
                   Makecol(255, 255, 0), -1);
Textout_ex(Buffer, Font, "Cyan", 32, 160, 
                   Makecol(0, 255, 255), -1);
Textout_ex(Buffer, Font, "Magenta", 32, 180, 
                   Makecol(255, 0, 255), -1);
Textout_ex(Buffer, Font, "Grey", 32, 200, 
                   Makecol(128, 128, 128), -1);
'VB Version
Textout_ex(Buffer, Font, _
          (CType(colordepth, Integer)).ToString() + _
          " bit color...", 0, 0, 
Makecol(255, 255, 255), -1)
 
Textout_ex(Buffer, Font, "Red", 32, 80, Makecol(255, 0, 0), -1)
Textout_ex(Buffer, Font, "Green", 32, 100, Makecol(0, 255, 0), -1)
Textout_ex(Buffer, Font, "Blue", 32, 120, Makecol(0, 0, 255), -1)
Textout_ex(Buffer, Font, "Yellow", 32, 140, Makecol(255, 255, 0), -1)
Textout_ex(Buffer, Font, "Cyan", 32, 160, _
                         Makecol(0, 255, 255), -1)
Textout_ex(Buffer, Font, "Magenta", 32, _
                         180, Makecol(255, 0, 255), -1)
Textout_ex(Buffer, Font, "Grey", 32, 200, _
                         Makecol(128, 128, 128), -1)

现在您可以将渐变色条绘制到缓冲区中。

//C# Version
/* or we could draw some nice smooth color gradients... */

for (x = 0; x < 256; x++)
{
  Vline(Buffer, 192 + x, 112, 176, Makecol(x, 0, 0));
  Vline(Buffer, 192 + x, 208, 272, Makecol(0, x, 0));
  Vline(Buffer, 192 + x, 304, 368, Makecol(0, 0, x));
}

Textout_centre_ex(Buffer, Font, "<press a key>", 
                      Buffer.w / 2, Buffer.h - 16,
                      Makecol(255, 255, 255), -1);
'VB Version
'or we could draw some nice smooth color gradients...
For x = 0 To 256 - 1 Step x + 1
    Vline(Buffer, 192 + x, 112, 176, Makecol(x, 0, 0))
    Vline(Buffer, 192 + x, 208, 272, Makecol(0, x, 0))
    Vline(Buffer, 192 + x, 304, 368, Makecol(0, 0, x))
Next

Textout_centre_ex(Buffer, Font, 
       "<press a key>", 
       Buffer.w / 2, Buffer.h - 16, Makecol(255, 255, 255), -1)

现在,要完成,您将在屏幕上绘制结果并等待用户按下一个键。 在主函数中,您只需为您要测试的每个深度调用该函数。

//C# Version
Blit(Buffer,Screen,0,0,0,0,Screen.w,Screen.h);
 
Readkey();

//And in the main function public static int Main()
{
  if (Allegro_init() != 0)
    return 1;
  Install_keyboard();
 
  /* try each of the possible possible color depths... */
  TestColor(COLOR_DEPTH.BITS_8);
  TestColor(COLOR_DEPTH.BITS_15);
  TestColor(COLOR_DEPTH.BITS_16);
  TestColor(COLOR_DEPTH.BITS_24);
  TestColor(COLOR_DEPTH.BITS_32);

  return 0;
}
'VB Version
Blit(Buffer, Screen, 0, 0, 0, 0, Screen.w, Screen.h)
Readkey()

'And in the main function
Public Shared Function Main() As Integer

    If Allegro_init() <> 0 Then
        Return 1
    End If
    Install_keyboard()
  
      'Try each of the possible possible color depths...
      TestColor(COLOR_DEPTH.BITS_8)
      TestColor(COLOR_DEPTH.BITS_15)
      TestColor(COLOR_DEPTH.BITS_16)
      TestColor(COLOR_DEPTH.BITS_24)
      TestColor(COLOR_DEPTH.BITS_32)
  
    Return 0
End Function

历史

  • 2005 年 12 月 1 日 - 第一个在线版本。
© . All rights reserved.