SHU智科大二夏季学期游戏开发

SHU智科大二夏季学期大作业

免费帮Wilson老师宣传一下他写的歌,开了自动播放

关于课程

课程基本情况

课程时间:2021.6.21~2021.7.16,共 4 周。

课程对象:以计算机工程与科学学院智能科学与技术专业 2019 级学生为主,学生共 82 人。

教学方式:课堂教学,上机实验。

指导教师:沈俊。

课程目的

《智能系统联合大作业》安排在夏季学期进行,是理论联系实际的重要实践性教学环节。通过课程学习

和实践,学生了解利用人工智能解决实际问题的过程。树立良好的设计方法,巩固有关深度学习的知识,加深专业知识的了解,扩大专业知识面,培养和提高发现问题、认识问题、分析问题及解决问题的能力以及表达能力和协作工作能力,为后续有关专业课程的学习奠定基础。

课程内容与要求

《智能系统联合大作业》课程总共有 82 个学生,进行游戏开发理论与实践内容的学习、项目实训和比赛。最后完成大作业报告。

大作业的实施安排和考核办法

《智能系统联合大作业》动员时间安排在 6 月 21 日上午 10:30-11:00,在计 J101 阶梯教室介绍《智能系统联合大作业》的主要目的、要求和内容。前三周的课程安排:

满满四周到军训

日程

6.21

账号获取,密码:v9raYAJyL0

游戏引擎

1s做一个游戏,还要压缩大小命名不重复图片才能上传

视角qweasd,shift加速移动

快捷键,f查找对象,CTRL固定位置移动,布尔值(右上角蓝色图标)

Play,注意play状态下所做更改不保存

编辑栏,最上方,

物体属性

World Hierarchy,儿子跟着爸爸走

Coordinate 一个相对于爸爸一个相对于世界

Architype游戏原型库,你的背包,怪物们

6.22

休息一天,下午去听Intel宣讲会,后续怎么上课拿那个学分还是没说。怕是被骗了。

6.23

LUA基础

举几个游戏逻辑的例子:被攻击掉血,拾取装备,获得buff等

一句话总结:当某个情况发生时,某个对象的某个属性发生了某种变化

  • 找到某个对象
--
--[[
注释
]]
local B=script.Parent
local UItext= script.Parent.SurfaceGUI.Text

print(B)
方法 具体代码 注意事项
从外到内获取 local Object = world.cube 虽然在层级管理其中 World 的 W 是大写的,但是在脚本应用时,需要使用小写 w
从内到外获取 local Object = Script.Parent 如果物体之间没有层级关系,也可以用此方法获取。例如 Script.Parent.Parent.Sky 即可获取 Sky 节点
  • 改变属性
类型 属性例子 具体代码案例
三维向量 Position/Size/LinearVelocity 等 节点.Position = Vector3(1,1,1)
二维向量 UI 组件的 Size/Pivot/Offset 等 节点.Offset = Vector2(1,1)
欧拉角度 Rotation 节点.Rotation = EulerDegree(1,1,1)
bool 开关 Visible/IsStatic/Block 等 节点.Visible = false
颜色 Color 节点.Color = Color(255,255,255,255)
String 字符串 Text 节点.Text = ‘Click Here’
列表枚举 HealthDisplayMode 等有下拉选项的属性 节点.HealthDisplayMode = Enum.HealthDisplayMode.Always
B.Position=Vector3(0,0,0)
B.Rotation=EulerDegree(90,90,90)

B.IsStatic = false

B.Shape = Enum.ShapeType.Cone

B.Color = Color(0,255,0,100)

UIText.Text='shanghaidaxue'
  • 检测某个情况发生
local Exp = 0

if Exp>100 then
    print("shenji")
elseif Exp>=200 then --逻辑bug
    print ("boss战斗")
else

end

local a=10
while a>0 do
    print (a)
    a=a-1
end

for i=1,10,1 do
    print (i)
end

local Tab = {Attack=10,Defence = 25}
for k,v in pairs(Tab) do
    --print(k,v)
    print(k.."is"..v)
end

--function
function Double(Arg1)
   print("Double",Arg1,"=")
   return Arg1 *2 
end
local result=Double(3)
print(result)

--匿名函数
function testfun(tab,fun)
    for k,v in pairs(tab) do
        print(fun(k,v))
    end
end

tab={key1="val1",key2="val2"}

testfun(tab,
function(key,val)
    return key.."="..val)
end)       

如何使用API

Obj.OnCollisionBegin:Connect
--记录跟不上了,还是自己看文档吧

api文档

模板地图

一个素材库,之后会发给我们

答疑

成功才是成功之母。

——吴军(yyds)

ps:《蚁》,Wilson老师写的歌,下课走的太快的可能没听到(笑)。

6.24

老师:橙汁

游戏引擎

早期:只能制作单个游戏,缺点:硬编码数据,大量特例代码,逻辑耦合,可拓展性弱。

中期:mod形式开发,街机游戏

后期:商业游戏引擎(复用性)

游戏工程结构

DCC,digital computer creation,模型动画图片音频等。

文本资产,代码配置表等。

工程结构,场景结构icon其他文件等。

游戏脚本

两种脚本,数据定义语言,组件事件。运行时脚本语言。

达芬奇引擎

Bomberman工程解析

玩法调研:炸弹堂,平面地图,炸弹,可破坏方块,倒计时,周围玩家数据,有局的概念,缩圈

增加死亡计数

--Player下增加了LifeWatcher
local lifeRemain = script.Parent.lifeRemain

local curLife = lifeRemain.Value
--增加屏幕UI,左上角UI组件,加一个figure和text,双击加入视角,导入了一张外部资源图片,直接用pic替换figure,lifevalue设成Archetype,加到screenGUI

world.LifeBoard.P4.life.Text=localPlayer.Name --记得有点快

function ValueChangeEvent(old,new)
    if new < 0 or new > 3 then
        return
    end
    world.LifeBoard.P4.life.Text=new
end    

lifeRemain.OnValueChanged:Connect(ValueChangeEvent)--写错成OnValueChange

function onHit()
   lifeRemain.Value=ligeRemain.Value-1
end

localPlayer.OnDead:Connect(onHit)

--作业:
--1、修改这个功能,使其可用
--2、实现镜头抖动
-- Tween:ShakeProperty()
-- local MainCamera = world.CurrentCamera 官网了解

达芬奇比赛报名(7.10截止,7.20开发,8.19提交)

报名链接

6.25

Lua语言

lua驱动c语言执行,小巧。

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存

在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始。

--数组
array = {"Lua", "Tutorial"}

for i= 0, 2 do
   print(array[i])
end

--迭代器
array = {"Google", "Runoob"}

for key,value in ipairs(array)
do
   print(key, value)
end
--[[
下面我们看看泛型 for 的执行过程:

首先,初始化,计算 in 后面表达式的值,表达式应该返回泛型 for 需要的三个值:迭代函数、状态常量、控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个会自动用 nil 补足,多出部分会被忽略。
第二,将状态常量和控制变量作为参数调用迭代函数(注意:对于 for 结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数)。
第三,将迭代函数返回的值赋给变量列表。
第四,如果返回的第一个值为nil循环结束,否则执行循环体。
第五,回到第二步再次调用迭代函数
]]
-- 简单的 table
mytable = {}
print("mytable 的类型是 ",type(mytable))

mytable[1]= "Lua"
mytable["wow"] = "修改前"
print("mytable 索引为 1 的元素是 ", mytable[1])
print("mytable 索引为 wow 的元素是 ", mytable["wow"])

-- alternatetable和mytable的是指同一个 table
alternatetable = mytable

print("alternatetable 索引为 1 的元素是 ", alternatetable[1])
print("mytable 索引为 wow 的元素是 ", alternatetable["wow"])

alternatetable["wow"] = "修改后"

print("mytable 索引为 wow 的元素是 ", mytable["wow"])

-- 释放变量
alternatetable = nil
print("alternatetable 是 ", alternatetable)

-- mytable 仍然可以访问
print("mytable 索引为 wow 的元素是 ", mytable["wow"])

mytable = nil
print("mytable 是 ", mytable)

序号 方法 & 用途
1 table.concat (table [, sep [, start [, end]]]):concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
2 table.insert (table, [pos,] value):在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
3 table.maxn (table)指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)
4 table.remove (table [, pos])返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
5 table.sort (table [, comp])对给定的table进行升序排序。
table.sort (table,function(a,b)
    return a.i>b,i 
    end
)

table.unpack()--拆包
--Modelscript,在script中调用
local module = {}
--function module:foo()
--    print('foo in module')
--end
return module

--Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单地调用就可以了。例如:
require("<模块名>")
--require "<模块名>"

--执行 require 后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。

两个script去require,model相当于是单例,全局唯一。

事件系统

本地事件系统

游戏开始玩家进入。。。反正就是游戏流程

CollisionEvent

KeyBoardEvent,Booster

ps:test下local多玩家测试

物理检测,碰撞事件,射线检测

world.OnRenderStepped:Connect(Update),按帧数检测,fps=60,16.67ms。

游戏系统和框架

脚本间通信,require(“MyAsset/ModuleAsset”):foo()

Global:相当于library,全局

第一周作业:炸弹人2.0

镜头抖动

之前那个小作业别忘了。

直接在world下的script里写。

print("Hello world!")
wait(4)--服务器脚本,等它几秒构建好world之后加入角色(这时才加入相机,否则会print出nil,后面函数报错,不信可以试试)
local MainCamera = world.CurrentCamera
--print(MainCamera)
--local Obj=MainCamera

local ObjTweener = Tween:ShakeProperty(MainCamera, {"Distance"}, 10, 0.7) --看api文档和教程,相机有很多参数
--构造一个值插值器
--local Middle = ObjTweener:GetValue(5)  
--获得插值器在一个周期中,第5秒    PropertyDictionary的取值
ObjTweener:Play()  --播放这个动画

– Tween:ShakeProperty()
– local MainCamera = world.CurrentCamera 官网了解

看了也不会系列。。。。还是得问。。。。


Davinci编辑器为开发者提供了6种摄像机类型,不同的摄像机会以不同的视角观察游戏场景。

ps:摄像机通用属性

以下列表为所有类型的摄像机都拥有的属性:

属性名称 说明
Order 数字越大的越在上层
Rotation 相机的旋转角度
ViewPortHeight 视角高度(只读)
ViewPortWidth 视角宽度(只读)
NearClip 最小视距,可视的最近距离
FarClip 最大视距,可视的最远距离
FieldofView 可视范围的角度大小
CameraMode 镜头的类型(总共有6种类型,下文章会细说)
CursorLock 是否锁定鼠标光标
Paues 打开后,此镜头下听到的音效将会全部停止播放
Volume 此镜头听到的音效大小
CollisionGroup 摄像机盒子的碰撞组
完成玩家生命与淘汰系统

Player加一个lifeRemain的intvalue,初始值设为3。

world下建立一个LifeBoard的文件夹,放一个screenUI,先命名为P4,在P4下再加一张底图,底图下加两个Text,一个叫name1放名字,一个叫life接收生命值lifeRemain。最后改Player的script。

--Player的script下,只能改变自己的lifeboard,别人的还要多人测试,这个P4就有点难办,不懂玩家加入的原理,没想法,先留着
local lifeRemain = script.Parent.lifeRemain

local curLife = lifeRemain.Value


world.LifeBoard.P4.Image.name1.Text=localPlayer.Name
world.LifeBoard.P4.Image.life.Text=curLife


function ValueChangeEvent(old,new)
    if new < 0 or new > 3 then
        --localPlayer.bombRemain.Value=-1
        --不知道怎么设计淘汰,设定炸弹数为负,三条命死完,进入观战模式,不能放炸弹
        return
    end
    world.LifeBoard.P4.Image.life.Text=new
end    

print(lifeRemain.Value)

lifeRemain.OnValueChanged:Connect(ValueChangeEvent)

function onHit()
   lifeRemain.Value=lifeRemain.Value-1
end

localPlayer.OnDead:Connect(onHit)
解决玩家重复扔炸弹的问题
--LocalScript
function PressFire()
    --设置一个叫bombRemain的value值限制player放炸弹数目
    local Bomb_num=script.Parent.Parent.Parent.Parent.bombRemain

    --print (Bomb_num)
    if Bomb_num.Value > 0 then
        DropBomb(localPlayer.Position)
        Bomb_num.Value=Bomb_num.Value-1
        --print (Bomb_num.Value)
        if Bomb_num.Value == 0 then
            wait(3)
            Bomb_num.Value=Bomb_num.Value+1
        end
    end
    --强行等3s后恢复
end
--4:玩家不能无限放炸弹,所以要限制一下DropBomb函数的调用
--放炸弹还要检测是否那个位置已经有炸弹了,但是不知道根据位置检测对象的函数是什么?
--也许可以先往一个方向偏移一下,再往反方向Raycast检测

Raycast API

实现炸弹攻击距离

每个箱子增加可能掉落道具物品。

1、在Architect的Box下新建一个NodeObject,叫BoxBuff,再加一个model(cube或者胶囊体,随便什么都行),model下加一个CollisionEvent。

---------------------------------------------------------------
-- Collisionevent is triggered when script.Parent interact with a collision(enter, continue, leave)
-- CollisionType : collision type
--   Enum.CollisionEventType.Enter
--   Enum.CollisionEventType.Leave
-- HitObject : the other object that contact with script.Parent
-- HitPoint : collision point 
-- HitNormal : collision normal
---------------------------------------------------------------
if CollisionType == Enum.CollisionEventType.Enter and HitObject:IsA("PlayerInstance") then
    script.Parent:Destroy()
    if localPlayer.AttackDistance.Value < 8 then
        -- 炸弹攻击距离有上限
        localPlayer.AttackDistance.Value=localPlayer.AttackDistance.Value+1
    end
end

2、在世界中创建folder: BoxBuff,存放待会加入的道具

3、修改木箱爆炸程序:Box-Box-Collider-BomHit

--[BombHit]
--加一句在同一位置创建一个buff
local number=math.random(250)
-- 通过随机数设置是否爆道具
if number <150 then 
    wait(0.5)
    local BB = world:CreateInstance("BoxBuff","BoxBuff", world.BoxBuff, Root.Position)
end
--删除木箱
Root:Destroy()

4、Player下新建数值AttackDistance,初始值设成1,修改炸弹的一生,让它从人物身上获取攻击值。

在Player-Local-BomberGameGUI-DropBomb-Localscript中修改对应部分为以下:

--是谁放的炸弹
local Owner = BombRoot.Owner.Value
--炸弹的攻击距离
--local AttackDistance = BombRoot.AttackDistance.Value
local AttackDistance = localPlayer.AttackDistance.Value
--延迟时间
local SafetyTime = BombRoot.SafetyTime.Value
--这样炸弹攻击值就只能从人物身上获取

报错:原因是world.staticspace这个节点下对象是静态的,运行时不能移动或调用函数,一般放场景用,不知道我写在box里关checkboard什么事了。反正不影响功能实现,但是还有个小问题,就是人物在吃边缘道具的时候容易跳出地图,然后就跳不回来了。。。。懒得设计属性值了,就这样吧。


限制玩家扔炸弹数量,实现道具:炸弹仓扩容,炸弹和特效使用对象池优化,设计自己的技能系统(可选)

”今天的作业哦!!!!周日前同学们发到邮箱:irislan@lilith.com“——莉莉丝·喵莉丝

“建议大家全部做完”——莉莉丝·雪花

烦,没时间做啊,哪个好心人能拉我一把?

哦,原来还是我自己拉自己,那没事了。

6.28

游戏原型

6.29

游戏策划

6.30

组队

7.1

张圣林,游戏策划,如何做游戏反拆

游戏反拆目标,首先游戏是可拆的。

怎么反拆,错误反拆

系统维度

系统,体验和功能结合。

为什么背包有大小?为什么排行榜?

描述系统的具体要素,参与对象,游戏历程,成本,行为,评价规则,产出内容,反馈。

数值维度

数值本身就是一种体验。

一切电子游戏都可以拆解成桌面游戏。

基本数值,不可成为原因。塑造事实,机制加上基本数值。平衡事实,

经济数值,经验,货币,成长、创造。

WOW注册?

游戏货币没有使用价值。

商业化

用户付费购买

同类产品对比,演化。

策划文案写作技巧

7.2

编辑器,美院上课

7.5

美术设计

地形

7.6

游戏美术的发展

游戏美术风格

原画定义,插画师和原画师(概念设计师)

场景策划

7.7

摄像机,视锥体,透视/正交,FOV,旋转镜头抖动效果,

后处理,color,vignette,bloom,ambientOcclusion环境光遮蔽,

Tween

GUI,anchors工具设定位置,不同设备分辨率

7.8

游戏角色

魔神的呓语,坐在嘴皮子底下也听不清讲台上在说什么。

7.9

原型的验证。

7.10-7.26

延迟一周时间,但是那周在军训。天气确实很热,但人都见不到,不是每个人都可以线上合作的。

后期体验很糟糕,只能说这种安排不太适合我吧。

课程资料

Davici编辑器教程

论坛

api文档

LUA菜鸟教程

达芬奇游戏比赛报名链接

关于项目

《生命3.0》,可能包含玄幻、科幻、哲学等元素。在Intel那个无聊的宣讲会上看那本《游戏改变世界》,突然来的灵感。欢迎头脑风暴。

“回到现在,找寻过去,拯救未来。”

时间太紧,美院同学说想做一个类似于Superhot的射击游戏,然后小组合作属实没弄好,有时间上的问题也有我的问题。几个人都不怎么玩游戏,最后拖到军训还在做,最后一天截止交了个差。

关于游戏

知乎问题:为什么越来越多的大学生沉溺于游戏?

推荐看一下赞同数最高2.4w的回答,这里我也截取过来了。

作者:迷踪
链接:https://www.zhihu.com/question/20957940/answer/21415083
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

因为所有游戏的设计都是冲着“人性的弱点”来的。

1、即时反馈
你在游戏中的任何操作,都会立马视觉化数据化地显示出来。

不要小看每次砍怪物头上飚出的数字,不要小看出招的音效,不要小看伤血的红字和加魔的蓝字,它们都给玩家提供了最最直观即时的反馈。
为什么即时反馈是有效的?因为,即时反馈提供给玩家一种可控感。(有个段子说:电梯里的关门键其实根本无效,但光是这个装饰用的按键却实实在在可以增加乘客的可控感,进而产生心理上的安抚效应,不易烦躁。——感谢

@地铁风

提供的信息:美国的电梯门规定必须是那样的,见Placebo button 但中国的大部分电梯门按钮是实际有效的。)

对比现实生活中的学习——听课并不能让你直观看到经验值增长,看书也听不到书本被砍翻的惨叫,被游戏吊高胃口的学生自然觉得无聊、没劲。

2、多重系统,多样玩法,小目标渐进
相信你一定有这样的体验:哎呀,今天先玩到这样吧。但只差7%就升级了,要不就想打到升级吧!啊呀,打到稀有宝石,可以镶嵌武器了,赶紧去收集一下需要的素材。好朋友上线了,约了去打副本……打完了正好零点,又有新任务!……

无穷循环。

为了将玩家牢牢栓在游戏里,游戏不止提供升级体验,还提供各种全方位多角度的玩法。总能让你找到一个10分钟左右的小目标,不断去完成它,获得完成时的成就感。一旦得到这个成就感,为了维持这种欣快的感觉,玩家又迫不及待地投入了下一个小目标。

如此算来,平均10分钟一个小高潮,学习又怎么比得过它?

3、成就感

  • 内在激励

内在激励简单来说,就是一种自我能力的确认——这件事我喜欢,我做了,我克服了困难,我完成,我开心。
为什么简单的小游戏,比如扫雷、连连看会让人上瘾一般一盘又一盘玩下去?
因为它设置了恰到好处的困难让你证明你有能力破解它。感受到这种力量,你就想一再体验。(还记得刚才那个电梯按钮的例子么?对,这也是一种可控感的体现。)

  • 称号

完成了某种成就就会被记录。除了网游,现在还有谁会拼命找理由就为了给你发小红花?

  • 展示

可能生活中一个普通小职员在游戏里就是一呼百应的公会老大。
这种权力和万众仰慕的感觉也是现实生活中的“稀缺资源”。
举个栗子:史玉柱在《我的营销心得》中提到,《征途》在情人节推出1元的虚拟玫瑰花,最后卖了可能有5000万。为什么?因为他提供了“展示”——只要送99朵以上,就上公告。

4、协作和献身
俗话说:人生有四铁——一起同过窗,一起扛过枪,一起嫖过娼,一起分过赃。说的就是,当人和人一起经历过情绪的大起伏,就会产生更亲密的关系

但大学生活能提供的供人情绪起伏的活动太少,导致同窗关系质量严重下降。取而代之的,变成“一起上过网”,在游戏里组队、团战、城战、洗白、pvp……虽然所有活动都建立在虚拟的网络游戏上,但产生的情感联系却是真实的。
甚至,游戏还能提供现代社会稀缺的“庄严”和“意义”感。呵呵,为自己公会牺牲过的童鞋都懂的。

一边是活色生香的鲜活情感,一边按部就班的麻木生活,大学又怎么跟剑三或者魔兽比呢?

===============================================
另外再补充一点:

5、简化世界,路径清晰
据说现代的关键词是“迷茫”,游戏的设计就是为了解除“迷茫”

游戏体系在不断的研究和发展演进中,已经形成一套将现实生活总结简化的图谱、话语体系
你要做什么,怎么做,做到后有什么结果,全部都清楚地向你敞开。只需照着地图、攻略,就能达到你所期望的目标。

往大里说,所有人都追求“对世界的理解”,而这种欲望,在游戏中能得到最大限度的满足。甚至已经反过来影响现实。
请看下图,这是一张微博上流传滴现实职业进阶图,or技能树。

imgimg

有木有突然觉得“一切尽在掌握”?^++++^

=================================
以上,是我的粗浅分析。

如果对这个问题有兴趣,强烈推荐一本神书!
游戏改变世界 (豆瓣)

img

本书前言就提出:

游戏满足了现实世界无法满足的真实人类需求,带来了现实世界提供不了的奖励,它们以现实世界做不到的方式教育我们,鼓励我们,打动我们,以现实世界实现不了的方式把我们联系在一起,我们很“饥渴”,游戏填饱了我们,对更满意工作的饥渴,对强烈族群感的饥渴以及对更有意义的人生的饥渴。

书中的分析和例子都十分精彩,推荐阅读。

=====================================
本来看到

@吴遇安

的答案,觉得已经不再需要回答了。

不过感觉对于提主提出的“心理学角度”有欠缺,斗胆补充了这篇答案。

十分感谢大家的点赞。

作为知乎新人能得到接近三位数的赞,实在是……太赞了!(≧▽≦)/

下面是更新

一开始我读《游戏改变世界》,完全只是想了解一下游戏设计中针对人类心理机制的原理,没想到,读完后,发现这本书,其实是一本谈“如何用游戏设计中的珍贵经验改造现实生活”的未来学著作。

也就是说,当我们分析完游戏针对“人性弱点”的设计原理后,并不是要唾弃一口“万恶的游戏”,然后就能认清它的“丑恶”面目从此幡然醒悟天天向上了。

我们应该从中学习,学习游戏设计的精神、精髓,将它应用在我们的生活、学习上,让生活、学习也借此变得让人上瘾——这才是我们做此长篇大论分析的原因所在!(下面这部分特别想写给评论中的

@贺Cancy

童鞋,让我们一起奔向让人上瘾的学习生活吧!(≧▽≦)/

书中作者举了个很有趣的栗子,我尽量用最简单的话描述一下:

作者在一次演讲中说:“要是在这场演讲中我每次冒出一个聪明设想,都能加1点智力就好了,或者至少在当众演讲方面能多加几点。哪怕我喜欢喜欢演讲,演讲本身还是一件让人精疲力竭的活动。要是能在这个时候,看到PPT上弹出一些“+1”的提示框,一定能带给我不少激励。”

几天后,作者收到了一份电子邮件。你猜上面写着什么?

“你的一位朋友XX,承认你的一些强项,并为之+1点。具体来说,他们认可的是以下这些属性:
+1智力
+1公众演讲
+1启发
恭喜!日安。”

原来是一位听众,受了作者的启发,在网上做了一个小程序,让每个人都可以为别人送上“+1”,还可以附上理由。你可以在网站上内建的37种不同的个人强项中选择一项或者几项“+1”,网站就会自动给对方发一封电子邮件。如果对方在网站上注册,别人赠送的分数就会累加。

看到这里我突然想到,如果腾讯把“朋友标签”改成这个“+1”系统该多么好玩?每个人都可以给自己的QQ好友打分。这样,当你听一个失恋的朋友打电话跟你哭诉1小时后,你就可以期待她会记得送你一个“爱心”的“+1”。

如此一来,在游戏之外,在现实之中,我们也可以通过游戏规则的设定和帮助来将我们的行动、成绩、效果可视化、数值化,建立即时反馈,形成一系列能满足成就感的小任务,建立联系……也就是说,能让现实变得跟游戏一样一样的!

事实上,知乎不已经成功地应用了“+1”这个系统吗?

如果没有知乎系统中提供的“+1赞同”,我想,我恐怕是无法静下心来花两三个小时梳理我对这个问题的看法,并将之系统表述出来的吧?
正是由于每个人点点鼠标,花时间阅读、评论,知乎才有游戏上瘾般的魔力,吸引大家来分享知识和见解,产生高质量的回答啊:)

但,我认为这还不是现实游戏化的最终形态。

还记得我一直在强调游戏提供给人“控制感”这一条吗?

是的,最终形态,就是:你来设计游戏,你来设计目标,你来设计进程、系统、称号、奖励,你来给自己发小红花,你来给自己“+1”。

下面是我的一个尝试的企图,抛砖引玉一下哈:

——————

【成为写作之神 游戏设计】

目标:攒够10000分,成为写作之神!

计分方式:

  • 写作书1000字5分
  • 小说1000字5分
  • 回答知乎问题2分
  • 读书半个小时写笔记2分,光读书要一个小时1分
  • 观影笔记,3分
  • 一条原创微博1分
  • 把最近总结的理论说给一个人听 2分
  • 其他特殊任务,特殊计分(比如突然要写个书评、写个歌词什么的)
  • 看电影看休闲小说要用分数来购买时间,1分半小时。

每天基本分数是10分,达到就可以解锁成就。

每累计到100分,可抽奖一次,用两个骰子,抽到数字就是粉丝数,粉丝数代表地位称号。

——————

在给自己设计游戏的时候,关键并不在于设计的系统有多完美,最关键的是,给自己另一种看待现实、掌握现实的方式。

写到这里,突然想起了一个故事:幼儿园老师发现一个小朋友在厕所门口憋着不肯进,老师很奇怪,就问小朋友怎么回事。小朋友脸涨得通红,委屈地说“在家里上完厕所,妈妈都会给我鼓掌。”老师怎么劝小朋友,都木有用,最后老师突然灵机一动说:“这里没有妈妈给你鼓掌,那你自己给自己鼓掌好吗?”小朋友一听,就高高兴兴进去了。出来后,自豪地给自己用力鼓了三下掌。

你是那个等着妈妈给你鼓掌,别人给你点赞的人呢?还是那个,学会用力给自己鼓掌的小朋友?
结果如何先不去管,做了就先给自己点个赞如何?

以上。
希望能带给大家一点启发。

===================

ps:哪怕只是改变一下词语系统,都可以让我们转换思维、调整心态——

我会告诉你,自从我们公司把去办公室请老板签字叫做“去刷boss”后,整个气氛都欢乐了很多、积极了很多吗?哈哈~

2014-1-6 修改

【增加一个课堂运用游戏化思维的案例,from《游戏化思维》p172-173,略有改写】
受到《魔兽世界》的启发,印第安纳大学的经济学教授爱德华·卡斯特纳瓦开始改革课程。
他宣布,所有来上课的学生都可以获得“经验值”,课堂陈述被称为“游戏任务”,考试被称为“打怪”,而家庭作业则变成了“锻造”。学生被分为不同的合作小组,简称“游戏公会”。

结果,这门课称为学校的明星课程,学生的出勤率和学习效果都得到了显著的提高。

学校的课程协调官员感慨道:“这门课程所包含的元素是学生们熟悉、喜爱并且更加容易接受的,它给平常的过程换上了崭新的面貌,可以说真正地做到了寓教于乐。作为教育工作者,你必须时刻提醒自己,你的学生是游戏的一代、社交媒体的一代。”

2014-7-25 修改

【2015-03-10 感谢知乎日报推荐,再补充一点】

6、随机性
为什么卡牌游戏风靡日本,抽卡已经变成了“氪金”?因为它运用了随机性。

关于随机性的强大魔力,有个实验是这样的,具体资料恕我暂时没找到,全凭记忆写下,欢迎大家给我提供:
科学家给鸟一个按钮,只要它按下就能吃到饲料,而另外一只鸟得到的按钮,产生的结果是随机性的,也就是说,可能有饲料,也可能没饲料。结果,比起前者的淡定,后者完全对按钮上瘾了,不断去按按钮,甚至都不为了吃饲料。
仔细想想,从进化角度来说,对随机性上瘾也是符合逻辑的——对于生物延续来说,食物是非常重要的资源,一旦得到就意味着生命可以延续,因此,生命机制本身的首要命令就是要最大限度保证食物来源。随机性,就好比草原上的花豹去追羚羊,可能追得到也可能追不到,也好比猴子去果树上找果子,可能找得到也可能找不到,于是,就需要生命体付出更多努力,来确保最终获得食物。为了防止生物体太容易放弃努力,生物基因中直接刻印了对随机性的偏好,也就是上瘾机制,让生物对此乐此不疲——也成了现在游戏性中的一大杀手锏。
抽卡让人上瘾的原因中,隐藏着随机性这个杀手,同样的,在“开宝箱”“抽奖”“牌类”游戏中,无不隐藏着随机性的惊喜。
这也是游戏让人上瘾的重要原因之一。

ps:在这里推荐一下《创造力》这本书。本书中提到的创造过程中的“心流”概念,也很适合用在游戏上瘾的迷狂状态上。

img

下面是书中提到的“心流”状态9个特征,也回答了“创造性为什么产生愉悦”这个问题,和我上面提出的5条游戏上瘾机制基本都能对应上,也附在这里,给大家做个参考。更具体的内容,欢迎大家自主阅读:

  1. 每一步都有明确的目标。
  2. 对行动有迅速的反馈。
  3. 在挑战和技巧之间有一种平衡。
  4. 行动和意识相融合。即全神贯注,意识和行动都只有一个共同目标。
  5. 摒除杂念,只有当下,使我们摆脱了在日常生活中导致压抑和焦虑的害怕。
  6. 根本不担心失败。
  7. 自我意识消失。自我通过创造这种全神贯注进而遗忘自我的活动得到扩展。
  8. 时间感被歪曲。
  9. 行为具有自身的目的。做一件事最大的报酬就是做它时获得的体验。

======这里是补充结束的分割线======

《游戏改变世界》这本书我去年看了两三章英文版的,后来实在没有动力看下去,这次正好可以趁这个机会快速看完中文版,对游戏进行一次自己的思考。

关于开源

关于这次学校夏季大作业我有一个大胆的开源想法。。。。

还是算了,没什么意思,编辑器打开一下卡起码半分钟。


   转载规则


《SHU智科大二夏季学期游戏开发》 Henry-Avery 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录