星虎论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 11622|回复: 15

怀念太阁,萌生悲哀

[复制链接]

该用户从未签到

发表于 2009-5-14 12:16:01 | 显示全部楼层 |阅读模式
  《太阁1》确实是一部经典之作。《太阁1》之所以成为经典,不是因为游戏的精美画面;也不是因为动听的音乐;更不是因为复杂的技术。用现在的眼光看,《太阁1》的画面可以说是粗糙不堪,即使是在当时,也绝谈不上是什么精美之作;《太阁1》的音乐音效更是平淡无奇;也没有什么恢宏大气的战斗场面,甚至于游戏中的单挑和战争可以说是有点简陋;而且《太阁1》的操作也并不完美,一些游戏的控制还是比较麻烦,但这些都不能妨碍《太阁1》成为经典。
  我觉得,一个游戏之所以成为经典,往往不是因为繁杂的技术和华丽的外表,而是因为游戏的丰富内涵和创新精神。角色培养、角色扮演和历史战略的完美结合,厚重的历史背景,简约的游戏风格,开放的任务体系,自由的操作模式,适当地配合上重要的历史游戏事件,铸就了不朽的辉煌。因为它,对中国历史都不太了解的我,知道了日本的丰臣秀吉、织田信长、德川家康、……,了解了日本的战国历史。
  我一直在想,编写这样一个游戏需要很高的技术水平吗?需要很庞大的工作团队吗?需要很雄厚的资金吗?然而,日本做到了,而中国却没有,甚至于中国三国时期的历史题材被光荣公司做得如此有声有色,而守着这么丰富的历史文化宝藏的中国人自己却一事无成。有多少中国孩子正是通过三国系列的游戏而了解了三国时期历史的啊。大家想想,普及中国历史知识的游戏,不是由中国人自己开发的,而竟然是日本人的产品,那是何等的悲哀啊?我想,不止是悲哀,还很可怕。假如日本故意开发一个歪曲中日历史的“精品游戏”,那我们又将如何应对啊?
  中国人一向以勤劳智慧自居,然而为什么在电脑游戏开发上却始终难有建树呢?创新不会,经验不足,难道连模仿都不会吗?在《太阁1》如火如荼的辉煌时期,为什么就没有人以中国的历史为题材模仿开发出类似的游戏呢?我最近一直有一种想法,以朱元璋为题材,开发一个模仿《太阁1》的游戏,我觉得朱元璋的经历和丰臣秀吉很像,具备这样的条件。先模仿,完完全全的模仿,然后在模仿的基础上进行改进,逐渐形成自己的风格。只是我对于软件的开发一无所知,不知这样的路还有多长要走?不知有没有志同道合的朋友携手同行?

评分

参与人数 1威望 +10 收起 理由
化不肥 + 10

查看全部评分

该用户从未签到

发表于 2009-5-14 17:51:13 | 显示全部楼层
写的很好,契合主题!
  • TA的每日心情
    开心
    2024-3-23 16:40
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2009-5-14 18:57:15 | 显示全部楼层
    感谢 czy7812 兄的好文。


    我觉得有三个原因:

    1。中国游戏业起步晚,而现在又都在做网游

    2。盗版严重,开发这样的游戏投资会比一般的游戏大,看看光荣游戏在日本的售价就知道了

    3。玩家喜好不同,中国玩家爱好这类游戏的群体较小
  • TA的每日心情
    开心
    2023-3-29 21:57
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-5-15 14:44:44 | 显示全部楼层
    其实类似曹操传已经有人改成岳飞传了
    太阁一比较大的问题是 地图很难修改

    该用户从未签到

     楼主| 发表于 2009-5-17 10:43:50 | 显示全部楼层
      最近,我一直在学C++,用的是一个叫DEV-C++ 5.0的开发环境,希望能自己编写简单的游戏软件,但是学习的过程举步维艰啊。
      我花了两天才搞懂了一点点的windows编程基本常识。比如windows程序的基本结构,主函数的参数及意义,一些常用的变量类型,如何在程序中创建一个窗口等等很简单的知识点。学windows编程的一个感觉就是烦啊,里面的一些数据类型、函数的参数长得要死,动不动就10几个英文字母,有时候其实很简单的一件事,被搞得非常复杂,比如窗口句柄,其实就是窗口的身份证号码,是一个用来标识窗口唯一性的长整型数据,比如你在是电脑里开很多个窗口,为了把各个窗口区分开来,必须把每个窗口都编上一个编号:001、 002、003、……,以后要对某个窗口进行操作,就引用该窗口的编号,就是这么简单的事情,你叫个窗口标识码什么的不是很容易理解吗?可这里偏偏要叫什么窗口句柄,还要单独定义成HWND数据类型,搞得像我这种初次接触windows编程的人云里雾里的。而且还有太多的预定义的数据类型,搞得头都大了。不过还好,经过两天的学习,基本算是搞懂了。
      但接下来的学习让我头都大了。比如我想让窗口一出来就最大化显示,我想这应该是简单得不能再简单的事情,肯定就是在指定一下窗口风格就行了。结果我上网一查,傻眼了,所有网上介绍的方法都很复杂,动不动就贴上一段几十行甚至上百行的源代码天书,看到最多的一种方法是:先创建一个窗口,然后把窗口隐藏,然后把窗口最大化,然后再显示窗口。后来我又在网上查了一个晚上,看得眼睛都痛了,才找到一个介绍常用窗口风格常量的网页,想让窗口一出来就最大化,就是在用CreateWindowEx()函数创建一个窗口的时候,指定窗口风格为WS_MAXIMIZE就OK了,我就不懂这些发贴的人脑子里在想什么。
      可是除了让窗口最大化还不够,我想不但让窗口一出来就最大化,还要让窗口不能改变大小,没有最大化按钮,窗口被其他程序覆盖后会自动重画等,所以我就想去网上查所有的窗口风格常量,可是查来查去,查了两个晚上了,也没查到啊。我想我现在最需要一本好的参考书,一个好的网站,一群好的老师。可我一个都没有,大多数编程的书华而不实,一些很出名的编程网站要么就是太深奥难懂,要么就是介绍的知识和我想要的不着边际,我也不认识编程的前辈。没点基础,想学编程,确实很累啊,人累,心更累啊。有谁拉我一把啊。呵

    [ 本帖最后由 czy7812 于 2009-5-17 10:45 编辑 ]
  • TA的每日心情
    开心
    2024-3-23 16:40
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2009-5-17 18:23:34 | 显示全部楼层
    编写太阁1修改器的 kkt_zzz 兄弟可能懂编程吧,你们二位有空交流下

    该用户从未签到

     楼主| 发表于 2009-5-20 10:09:53 | 显示全部楼层

    C++中如何实现窗口重绘并避免闪烁现象

      C++中如何实现窗口重绘并避免闪烁现象
      学习了才知道编程远非想像的那么简单,比如我们平时在电脑里看到的窗口被遮住或最小化之后,窗口里的内容是不会丢失的,这是一件最普通平常的事情了,但就是么这一件看似很简单自然的窗口重绘事情,实现起来却是很麻烦的,非可视化的编程软件似乎没有提供这种现成的设置,只能由程序员自己来实现。比如你在窗口里写上字,画上图,然后当你的窗口被其他窗口覆盖后,你窗口里的内容就会被抹掉,系统是不会帮你重画的,这时为了保证窗口里内容的完整性,你必须对窗口里的内容进行重画,而这个重画的工作只能由程序员自己来做。
      最简单的做法是在程序收到系统发送过来的WM_PAINT窗口重绘消息时,把窗口里原来的内容再画一遍,这对于简单的文字和图画是比较简便可行的办法,但假如你显示的是一张地图,甚至是动态的图片,那就很麻烦了。而且重画期间,窗口还会出现闪烁现象,重画的频率越高,闪烁就越厉害,如果用这种方法来写游戏,无疑是很难行得通的。为此,我请教了很多高手,在很多QQ群里问了很多前辈,也在很多编程论坛上发过很多求教的贴子,都没有得到满意的答案。于是我决定自己来实现这一功能,终于经过两天的研究,我自己实现了不论在什么情况下,都能使窗口的内容保持原样,即使窗口被频繁的改变大小、移动或遮盖,也能使窗口里的内容保持原样并不会出现闪烁现象的功能。
      我的设计思路是这样的:①在填充窗口类的时候,把窗口的背景刷设为空(可以避免出现闪烁现象,但不会自动擦除窗口内容);②在内存中开辟一块虚拟的后台显示区,把要显示在窗口中的内容先写到这个后台中;③用BitBlt()函数把内存后台显示区中的内容整块传送给窗口显示出来,然后在每次收到系统发送过来的WM_PAINT窗口重绘消息时,都使用一次BitBlt()函数把内存后台显示区中的内容整块传送给窗口,这样的效果就非常好了。
      思路看起来并不复杂,但实现起来也不轻松,下面是源代码及注释:

    HDC hdcmem;                         //定义后台内存显示设备句柄,这个要在主函数WinMain()外定义成全局变量,用以始终保持窗口内容。
                                                                
    //下面是显示完窗口以后的程序   
    HDC hdc;                                          //定义窗口设备句柄变量
    HBITMAP hBitmap;                             //定义一个位图句柄变量
    hdc=GetDC(hwnd);                             //获得窗口客户区显示设备句柄
    hdcmem=CreateCompatibleDC(hdc);      //建立一个与实际设备兼容的内存设备
    hBitmap = CreateCompatibleBitmap(hdc,600,800);
                                                          //创建与指定的设备环境相关的兼容位图,第一个参数是设备环境句柄;
                                                          //第二个参数是位图的宽度,第三个参数是位置的高度。

    SelectObject(hdcmem,hBitmap);           //该函数选择一对象到指定的设备环境中,第
                                                          //一个参数是指定设备的句柄,第二个参数是
                                                          //被选对象的句柄。只有先对内存显示设备句
                                                          //柄选入位图对象,才能对其进行画图操作。
    TextOut(hdcmem,100,100,"很好!",strlen("很好!"));   //往后台进行写操作或画图,想显示什么内容自己决定。
    BitBlt(hdc,0,0,600,800,hdcmem,0,0,SRCCOPY);            //把后台的内容整块复制显示到窗口中
    ReleaseDC(hwnd,hdc);                                             //释放显示器句柄

    //下面是收到系统发送过来的WM_PAINT窗口重绘消息时的处理程序。
    case WM_PAINT:
           hdc=BeginPaint(hwnd,&ps);                               //BeginPaint()和下面的EndPaint()是处理WM_PAINT消息的典型做法,这里不详细介绍。
                                                                              //PS和HDC必须在回调函数里的前面重新定义,其中PS要定义成PAINTSTRUCT类型。
           BitBlt(hdc,0,0,600,800,hdcmem,0,0,SRCCOPY);    //重新把内存中的内容显示到窗口
           EndPaint(hwnd,&ps);
           break;

      上面程序还不太完善,但已经能实现想要的功能了。这里不是编程交流区,可能大家对编程不是很熟悉,我就当学习日记一样的写出来,希望编程高手指导,太希望有一个好的老师了。

    [ 本帖最后由 czy7812 于 2009-5-20 10:28 编辑 ]
  • TA的每日心情
    开心
    2024-3-23 16:40
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2009-5-21 22:36:39 | 显示全部楼层
    唉,我是一点也不懂,czy7812 兄能推荐些编程的书吗?

    该用户从未签到

    发表于 2009-5-21 22:53:18 | 显示全部楼层
    = -! 一头雾水你们在干嘛!好多OOXX

    该用户从未签到

     楼主| 发表于 2009-5-22 23:26:35 | 显示全部楼层
    我没有书,全是一点点网上找的。我觉得我基础太不扎实了,知识太不系统了,经常为了一点小问题过不去一弄好久。今天为了给程序做个自己的图标,又忙了一天才搞定,哎。
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上注册

    本版积分规则



    qq群及公众号二维码

    QQ|小黑屋|手机版|Archiver|星虎 ( 黔ICP备05004538号 )

    GMT+8, 2024-4-20 14:27

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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