Home 介绍一门神奇的课
Post
Cancel

介绍一门神奇的课

img

本文写得比较散,主要以本人为中心来叙述,请勿介意。

这是一门课程耗费时间与学分成反比的课。

课程为期四周,每周两节大课,平均每人课后花费时间大于20个小时,总学分一分。

我要说的神奇并不在这一点。四周时间完成完全自主学习与游戏开发,所谓上课并没有真正的教学,而是老师的规则讲解、指引、和团队报告及展示。整个课程更像是一次公司团队的产品研发与发布。课程内容不仅仅是编程(可以说只是占了一小部分),更多的是开发过程中组内各种进度的跟进和事务的汇报以及每个阶段的展示。

直至现在课程已经结束一个多月,推送也在一个月前就写好。至于为什么现在才发……就是程序还没完全做好。这一个月拖拖拉拉,有事没事想起来就改改程序,除此之外还有一些不可说明的原因,拖到了现在才做好。不久后会发布游戏及完整代码,敬请关注。

Beginning


赵丰年在计算机技术与编程-2016-国际班: 新闻讨论区: 有关下学期《C语言编程实践》课程的基本信息发帖

基本安排如下:

(1)3-5人一组,以小组为单位开发一个大程序,程序主题自定(按往年情况,几乎100%是开发游戏),但需要在教师处认定。分组时要确保多样性,比如不能都是大神一组。具体分组规则会在上课前确定(往年的基本规则是:(1)尽量男女混搭;(2)C语言高分人数不能太多)。

(2)开发语言以C语言为主(可以用到少量C++等的特性),具体开发工具不限。往年常见的图形开发工具包括:EasyX、EGE和DirectX。近年也有开始用Unity 3D的。

(3)最常见的是3类工作:编程、写技术文档、做视频。可根据兴趣和特长确定自己在组中的主要工作。当然,编程是最主要的,原则上要求所有人参与。

教学班级由自动化,电子和机械三个国际班还有一群住在中关村校区的法国人组成。

个人日志

Day 1 2.28

早上8点钟赶到理教上课。直到坐下才发现教室右上方和中间坐着一排外国人。这是这学期的第二天课,还是由赵丰年老师授课。教室里弥漫着外国人身上浓浓的香水味。后来才发现他们似乎都是以法语为母语,有体格粗犷的黑妹子,有带着黑色头巾的中东人,有东亚人,更多的是来自欧洲的白人。

上课开始,老师先跟我们讲解了这门课程的主要内容。课程为期4周,总共有8节大课,前3周进行程序制作,最后一周进行成果展示。

这个课程最大的挑战性在于,用上学期所学的C语言知识,在短短3周内利用课余时间完成从未接触过的游戏制作,并且老师几乎不会教给你任何技术上的东西。作游戏跟一般的编程有很大的不同。每个人的起点都是一样的,没有任何做界面的知识,所有东西都要自学。这极大地考验了小组的协调工作和个人的自学能力。 ……

回到课堂,老师又放了几个往届小组的完成视频。视频里面有雷电,flappy bird等等。都是加了一些功能的改进而已。我个人觉得这样还是有些差。不是说他们做得不够好,而是缺少了一些东西。在中国(对就是在中国)我们创新能力远远不如其他国家的同龄人。绝大部分东西都严重地缺少个人的创意,而是大部分摘抄现成的材料,在此之上做点毛皮的改进而已。这的确和教育方式有很大的关系。可是多少人会去改变?我是想要重新构思一个游戏,不用做得多精美,但是一定要有自己的创意。创意是当今世界最缺少的东西。这话一点也没错。

在介绍完了课程设置之后,老师让我们自由组队。 组队有三个条件:

1、组内(上学期考试)96分及以上者不能超过2人;组内(上学期考试)80分及以上者不能低于2人;

2、小组必须男女混搭;

3、组内至少要有一个留学生。 ……

下课后那些外国人也就回中关村了。

下午3点我们良乡这边的5个人开了个小会,确定了工作日程,小组大概的分工和游戏创意。最终游戏还是没能像我想的那样完全自己创新。毕竟是民主的讨论,每个人都有自己的想法,而且我也暂时想不到很好的点子。但是我们的计划是在原有游戏的基础上做出大幅度的改变。算是令人欣慰的一点吧。关于分工,Adam是Team leader兼CIO(communicator差不多就是负责团队与课程任务的对接),我是Tech leader,其他3个人是programmer,两个外国女生由于不会编程,就担任接architect(主要负责图形设计)。下来的任务看起来都不轻松。

img

img

img

img

img

小组的分工其实颇为重要。分工时应该注意到每一个人的长处,每个人各司其职,互相配合才能把整个过程经营好(后来也证实了这一点)。第一周主要是学习,还有完成在网络教室乐学上的任务。

乐学是所有新闻发布和任务提交的地方(是个强大的bbs)。里面包括新闻讨论区,training center,materials,warzone,和quests(其实是任务)。新闻讨论区用于老师发布通知,training center用于技术交流,materials就是教学课件,War Zone是三个以原班级为区分的帖子发布区,下面会有介绍。而quests就是任务了,每周都有许多任务,每个任务都有一定的分值和提交期限。CIO就是负责任务的传达以及汇总提交。

img

img

以第一周为例,主线任务有四个:提交团队计划,介绍视频,项目规划文件与对其他团队的评分(“as if you were the teacher”)。支线任务是个人工作日志和关于帮助的分数回报与团队总评。主线任务分值要比支线高不少。

纵观整个课程分值设置,总分479分,真正的程序部分(主要包括提交代码40xp与最终产品发布100xp)大概只占了三分之一的分值。“整个课程就是仿照现实中团队产品开发的流程来设置的,实际上真正的产品价值也只占了一半不到,另外的一半多是产品之外的宣传和附加产品带来的。”

第一周


Day 2 3.1

没有什么进展。一开始需要学习,就得四处找资料来学。一开始我们对图形库的定义还完全搞错了。本来决定用DerictX,后来发现教程特别少,于是就改用EasyX。EasyX是国人自编的图形库,网上的实例也是特别多,于是就决定用它了。EasyX的官网里面就有浅显易懂的教程。

Day 3 3.2

今天是第二次C语言实践课程,我们小组7人进行了第二次会面。Aston和Celine好像都不是很active。下课后去一起北湖拍了照片,以后做小组视频可能会用到。

Day 4 3.3

昨天弄得比较晚,导致今天上课特别困。高数讲得特别慢所以还好听得懂。

事实告诉我们电脑平时的清理是很重要的。Kevin的电脑是Acer,大学刚买的,安装的软件特别多,里面的许多文件也几乎没有管理。整个电脑杂乱无章,速度也比刚买来的时候慢了许多。昨晚帮他安装VC,结果单单解压一个500M文件就解压了30分钟。VC怎么安装都安不上之外,效率还特别低。给人一种10年前的电脑配置的体验。

刚刚吃完饭回来又继续装,各种问题搞得心力憔悴。

总之今天没有什么进展。看组内其他成员的样子,估计今天也没法布置练习任务了。就这样吧。

第一周就是在小组随意散漫的状态中结束了。具体的就不详细介绍了。我还是蛮积极的,看教程学习并布置学习任务。真正把学习任务做好的也没有一两个。

我们用VC作为IDE。看了教程后发现EasyX并不是一个软件而是几个图形库。大概了解如何创建窗口进行各种绘图命令。入门还是特别简单的。十几篇入门教程一个多小时就能看完。后来更深入的学习其实是在编程中完成的。就是一边编一边学(哪里不会学哪里)。整个程序中也完全没有什么高级算法(低级也没有)和复杂的数据结构。

编程前先整理了思路,把整个程序的算法和数据结构都罗列出来,然后就开始干(结果后来程序越写越乱)。

第二周


Day 10 3.9

好久没写日志了。。。最近任务都挺重的,除了这门编程课之外还有车队CVT建模的任务。CVT要求下个星期三前交,前几天都在赶这个CVT,光是CVT就花了30多个小时。真是到了废寝忘食的地步。衣服也是越积越多,作业也是慢慢地堆积着。这几天小组也是放着没怎么给他们安排任务,自己工作安排得不好吧。现在CVT赶完了终于可以来做编程了。

一个晚上,根据之前的游戏构思和框架开始编写主体程序。一个晚上编了300多行,一开始写时先看了EasyX贴吧上一个《黄金矿工》代码。不得不说,在还没有任何经验时看别人的代码能够学习到很多东西。看他里面一些函数的运用,学习他的数据处理和程序结构,能够给接下来的程序编写提供更清晰的思路。这不属于抄袭,毕竟这是两个完全不同的程序。看完之后根据程序框图开始码…… 程序的风格也清晰了一些,尽量将各个功能模块化,互不干扰。现在最基本的功能还没写全,还完全没法调试。在写的时候也是边学边写,看看其他代码,去网上搜一搜等等。

Day 12 3.11

今天我们借了一个阅览室,我一大早就起床,7点半就赶到图书馆签到。昨晚很晚睡,可今天要早起签到,喉咙有点发痛。昨天告诉组员8点到,结果最早到的都也都已经8点多了。昨晚还去他们宿舍提醒了他们,嘴上口口声声说好可还是迟到。 等到他们到齐的时候已经9点了。今天的主要任务是给他们讲解已经编写的程序,让他们有个基本的了解,然后再分配两个小任务。

我先让他们抄了昨晚写的程序算法和数据结构框架,接着对着程序和笔记一一讲解每一部分的内容,通过这样让他们了解程序每一部分的功能。接着让他们写了小船投弹和发射炮弹的初始化。他们在编写过程中遇到许多问题。我发现他们编写程序和解决问题的思路不太对。他们在写程序之前没有先想好要怎么做而是直接上去乱打一气,思维条理不清晰,导致出现许多逻辑上的问题。然后出现问题后也没有去寻找问题的根源,而是在停留问题的表面,解决方法也是没有根据的乱打乱撞。也不知道从网上去寻找解决方法。其实这些能力都是要一定的训练来形成的。代码打多了自然解决问题的思路也就清晰了。

两个小函数回来发现了挺多问题。虽然说能够独立运行,但是我要的并不是它能自己运行,而是符合我的要求能够移植到我的程序里面去。初始化时结构体里面的数据也没有初始化完全,回来还得自己一个一个加。只求他们能够尽力提高能力吧。要不然接下来的程序就只有我去做完了。。。

Day 14 3.13

昨天和今天一直坐在电脑前调程序,一开始编译出现一大串错误,一个一个解决后又有许多bug,不停修修补补。衣服也没洗作业也搁着,过得人模狗样。从昨天一开始运行出现的只有一艘船和背景图,到现在控制船移动攻击还有敌机和潜艇的攻击,中间调了许许多多的东西。许多细节在编写时忘了写然后又回去补。自己的效率真的挺慢的,花了两天遇到各种各样的错误,然后才调到能按基本预想的那样运行。现在还存在一些bug,比如潜艇和敌机判断错误自动消失,或者速度突然猛增,数据出现错误等等。接下来打算把程序交给他们,好让他们参与一下程序的编写,同时我自己也来补补作业。

img

img

img

img

img

关于程序,自己还是没法很好地管理好文件。不会创建自己的库和头文件,不知道怎么让其他人的代码很好地兼容到自己的工程中(就是关于实现程序功能任务的分配与整合)。后来参观了自国的一个小组,在工程管理方面就做得特别好。他们组用DirectX作游戏界面库,组内两个程序员,一个人(Tech Leader)负责创建程序模板与游戏界面的搭建,另一个人则用那个模板完成游戏(战斗)的功能。模板的功能是让战斗的代码能够独立运行,在那个人完成一个战斗场景之后,Tech Leader就把他的代码整合到整个工程中,保证了程序的兼容。 个人觉得两个人是一个挺不错的技术搭配(前提是都是真正有能力的)。人少了所有程序的担子都压在一个人身上(吐血中),人多了手又杂,并不能高效地工作,而且能力参差不齐,还不如不要。不比其他组用的游戏引擎,游戏引擎(可视化编程)除了功能实现容易很多之外,整个编写过程更像搭积木一般,很少会发生不兼容的情况,通常是程序员越多越好,并且技术门槛不高。

不久前,我和一个久未见面的朋友共进午餐。他最近参加了游戏行业的一个会议,在会议上他看到了一个用于统一引擎的可视化编程工具。(我不能100%确定,但是我猜测它可能是PlayMarker)

同样的效果,使用可视化编程工具操作,你只需在工作区里面简单地拖动几个控件,并且在它们之间做一些选项和绘画箭头即可。而在非可视化编程工具里,你得思考如何输入各种命令,与可视化编程工具比起来,真是让人煞费苦心。我朋友看到的那个工具使用起来非常像用于编程的图解工具:FPGAs。

表面上,这种编程方式非常了不起并且演示起来会让人印象深刻。你无需记住语法和方法名称,你只需简单地浏览一个列表,从中找到你想要的即可。但是,我对这样的东西并不信任。

正如FrederickBrooks在其书中提到的,流程图是一个非常抽象的软件结构表达方法,它们可以很好地处理那些简单的、琐碎的程序,比如像我朋友看到的那个演示。换句话说就好比像电子表格那样的工具操作起来确实很简单。

摘自《为什么可视化编程会那么差劲?》

作者 张红月

http://www.csdn.net/article/2012-09-11/2809825-Why-Visual-Programming-Sucks

第二周结束时,这个时候游戏已经能够基本运行并实现基本功能了。下个周二要进行Midterm report。这个report基本上是由Tech Leader上去讲。Kevin帮忙做了PPT,我做了些许改动就在课上展示了。大概上去就是讲游戏特点,讲一些编程工作上遇到的问题。由于游戏已经能运行,我就把Demo的视频放上去。

Ocean Crisis 正常运行第一版

对了,现在看到的游戏画面还是比较简陋的,是前期Andy画的临时版本,到后期美工组完成后将会把图片全部替换掉。游戏画面打算采用贴近现实的风格,贴图计划都用现实的图片。 这个时候我想放松放松搞搞作业,把程序丢给组员们。

第三周(后半周)


Day 17 3.16 今天是第三周周四,本课程的第六节课。我们组出现了比较大的问题。美工组迟迟等不到消息,乐学上小组报告本来需要早交并给其他组评分结果等到今天快到了dead line才交。看了以往提交的作业发现平均分数连及格分数都不到。果然还是出现了当初预想到并想避免的问题。

在这门课中我的职务是tech leader,主要负责的就是程序编写这一块。说实话,很多时候我看别人做事会看不下去。但我这次告诉自己尽量不要越位职权。身为tech leader要做的就是完成程序以及队长分配的任务,协调好其他程序员的工作。而超出了程序的范围例如督促队长和美工组此类的就不是我负责的东西了。可是最终看来整体的效果并不好。虽然我也协调不好组内的工作,没法让其他程序员有效地学习并投入到实际编程中,导致程序绝大部分都是我自己完成的。这里面有其他人的原因但我也是要负主要责任的,毕竟这块是由我来调控的。

从小的时候我的假期作业都是在最后几天还在赶着完成,到现在看见车队到了最后临阵上场时还在没日没夜地调车,我开始想:这是不是一个解不开的魔咒?不管任务多少都要等到最后用20%的时间来完成80%的任务? 我觉得并不是。现在反思一下。在第一个星期里面,我们制定好了计划……

……

直到今天,我把程序交给他们过去了3天,三个程序员并没有对程序进行注释。然而发现今天要交程序源代码并有详细清楚的注释。。。结果就只能自己做了。他们现在也发现问题,开始着急了。换了CIO,要把不及格的作业重新提交等等……

纵观过去的3个星期,真的是一团糟。第一个星期做好规划我想带其他程序员学习考试他们积极性不高。第二个星期我由于个人原因没有带动程序员们导致这几天几乎无所作为。第三个星期我把程序基本功能写完然后发现小组存在很多问题,CIO以前提交的作业分数都特别低。 这一整段时间管理极差,小组没有按照计划定时开会,没有经常接到队长的指示和引导反而是一些作业快到deadline了我们才去提醒他或者是他来告诉我们有这么一件事情。我个人做不好的地方主要是没有带动整个技术组,在第二周的工作中忙于车队任务而没有及时跟进小组任务。

所以,现在所有的东西都要在接下来不到5天里面完成。事情终于达到了十分糟糕的地步。

今天看了其他组的工作进度。他们完成的游戏的层次性比我们要好不少,坦克大战的或小人闯关的都设置了好几个关卡而我们只有唯一的一个场景。虽然说他们用游戏引擎做可能会简单些但我们还是比他们逊色许多。现在美工组拖得比较厉害。我们也只能先自己开始做要不然也来不及了。

其实我心里只有一个目标,就是把这个程序做好,分数什么的……不挂就行了。事实上,接下来的一个多星期整个小组确实做得不错。把以前一些没做好的重新交了(“You can always resubmit assignment if the grade is below a passinggrade.That is, below 60%.”),然后接下来的作业分数基本都不错。只能说,前半部分做得不好除了任务分配出现失误之外,还有整个小组的不作为。这也是这门课的神奇之一,讲究合作。

接下来的时间里,我没有继续写日志了(没时间……而且懒),不断完善程序,在每个细节处把它做好(每个细节都要花费挺多时间)。我在做这些活(比如做视频和写游戏)的时候,其实懂的很少,没有很高级的方法,但我会把我掌握的知识尽量发挥,用少的技术做出不错的效果。在整个游戏中除了游戏主体外,我也同时注重游戏的人性化,美观及其他细节(炮弹的抛物线和落到水里的效果、剩余炮弹的图片显示、bgm的过度效果、游戏模式的设计、游戏暂停效果、情节的图片过场方式等等)。做好这些,就算没有高级的技巧同样可以做到让人玩得舒服。

第四周


基本上每周都有的任务是Project documents,Source code,Personal log,Grade other teams和Video make。接下来的重要的任务有Tech detail video,Release video(发布视频),Final presentation(发布会)和Final Product。

Final presentation 在第四周,也是本课程的最后两节课完成。一部分作为“early bird”在周二先展示(有更多展示时间),更多的则是在最后周四展示(每组只有7分钟)。

我们的期末展示

总共16个组,我只拍了周四展示的4个

我们组展示时有点着急,忘了自己计时导致视频放到一半就跳过下去后才发现只用了6分钟。配置文件(用来存放游戏记录)也忘了放进去(排行榜的内容也是一个亮点)。然后,在结束了左右的展示之后,我们的课算是上完了。

你以为这就完了?还有最终程序没交呢。展示时用的程序并不完整,有些过场缺少字幕,并且没有背景音乐和音效。

我开始添加背景音乐并调整音乐的细节(很蛋疼),添加后还发现又多了更加让人绝望的bug。整个程序在Debug版本下能够正常运行(运行效果不如Release版本),但是在Release版本下运行游戏会。。。不定时崩溃(大概就是整个崩溃或者程序还在运行但是图像画不出来了Orz)。在网上找了解决方法,解决方法也是各种各样(大致是野指针这些容易造成访问无效内存的错误)。找了好久都没有找到错误,简直崩溃。跑到贴吧上问也没有什么收获。但是到后来。。。它不知怎的就自己好了(我猜是配置文件的问题)。至此,提交完了final product和打印版的所有小组文件,这整门课程就算是结束了。

KARABAC小组成员:

Kevin、Andy、Rex、Adam、Bill、Astou、Celine

png

后记:很多人在事后骂这门课设置很不合理。对于我嘛,我倒是觉得这更有点像是国外的课程。需要的是个人的综合能力和团队的合作能力(还有大量的时间Orz)。算是一次体验吧,体验一下完全自学以及团队配合失败的感觉。就课程本身设置来说一门一学分的课花这么多时间(我花了50h+)的确很不合理,但这也能让我们大致了解一个团队的运营结构,也大概让我看清了哪些人在哪些方面能够合作。能够很好合作的人还是很少的。

如果这门课能给个10学分我还是很支持它办下去的(手动狗头)。

png

CHECK –> Product Release Video of Ocean Crisis

This post is licensed under CC BY 4.0 by the author.

秋季第一天良乡校景

Autumn Leaves

如果你觉得我的文章对你有帮助的话,欢迎赞助一些服务器费用!

¥ 点击赞助