E-prime編寫仿真氣球冒險任務(BART)

前一段時間有很多朋友咨詢仿真氣球爆破范式該如何做,今天終于有時間能夠整理成教程發(fā)出來,希望能夠對大家有所幫助。

本教程是基于官方的示例文件,網(wǎng)友的實例分享和Ryan自己的整理撰寫,應該能夠滿足大家制作BART程序的需要了。

BART范式相信大家應該不是特別陌生,但還是簡單介紹一下吧。在該任務中,屏幕上會呈現(xiàn)一個仿真氣球,被試需要按鍵逐漸吹大這個氣球,每一次吹氣球都會有一定的收益,同時也有氣球爆破的風險,氣球越大,可能獲得的收益越大,但氣球被吹爆的風險也越高,如果氣球被吹爆,該氣球的收益就為零或負值。被試可以選擇隨時停止吹氣球來接受目前的收益。該任務需要被試連續(xù)地決策是選擇繼續(xù)冒險還是停止冒險以獲得當前的收益。? 接下來我們就看看在E-prime中一個基礎的BART范式需要如何進行設置。

帖子里僅列出關鍵步驟和語句,完整示例文件請戳文末“閱讀原文”下載~

首先需要在主時間軸上放好開始和結束,實驗的主要部分list,以及一個初始化變量的InLine:

關于本例中的變量,需要先在user里定義,在InLine中賦值:

這里的a1用作記錄每一輪的收益,a2用作累積所有輪的收益,b2是用作記錄該輪最終的結果是獲得收益(1)或是氣球爆炸(0)兩種情況,所以初始設置為-1避免干擾。其它變量在后面會講到。

在PList中,設置好實驗的輪數(shù)30,子時間軸qq,和氣球圖片存儲的路徑PM。這里嵌套的MList是用于放置每一輪氣球爆炸臨界點數(shù)據(jù)的:

對于MList來說,可以人為設定每一輪的爆炸臨界值,也可以使用一定的概率取隨機值。本例中選用的是后者。

之后要進行的是主要的子時間軸上的設置。這里刺激呈現(xiàn)控件S前后的兩個InLine即是設定和處理氣球充氣和爆炸的關鍵語句所在:

在第一個InLine中需要寫下如下語句:

1DimtheResponseObjectAsRteRunnableInputObject

2SettheResponseObject?=?CRteRunnableInputObject(Rte.GetObject("S"))

3DimtheStateasSlideState

4SettheState?=?S.States("Default")

5DimKDAsKeyBoardResponseData

6

7b1?=?c.GetAttrib("PM")

8DimSDasSlideImage

9SetSD?=?CSlideImage(S.States.Item("Default").Objects("Image1"))

10SD.filename?=?b1?&"1.bmp"

11SD.load

12

13DimSTasSlideText

14SetST?=?CSlideText(S.States.Item("Default").Objects("Text3"))

15ST.Text="永久銀行:?"&?a2

16

17'Set?ST?=?CSlideText(S4.States.Item("Default").Objects("Text1"))

18'ST.Text="前一氣球收益:?"&?a1

19

20SetST?=?CSlideText(S.States.Item("Default").Objects("Text2"))

21ST.Text="臨時銀行:?0"

22

23i=1

24'j=val(c.GetAttrib("A"))

25

26k?=?random(1,128)

27c.SetAttrib"A",?str(k)

這里的代碼意思是將SD設為圖片控件,并且加載初始狀態(tài)時候的氣球圖片,設置ST第一次為永久銀行的標簽和數(shù)值,第二次為臨時銀行的標簽和數(shù)值。最后是在1到128之間隨機一個數(shù)值,作為氣球爆破的臨界值(這里相當于是每個trial的爆破概率為1/128)。

之后,在第一二個InLine中需要寫下如下語句:

1Do

2d1=Val(nIndex1)

3nIndex1=Val(theResponseObject.InputMasks.Responses.Count)

4

5ifnIndex1>d1then

6SetKD?=?CKeyBoardResponseData(theResponseObject.InputMasks.Responses(nIndex1))

7

8selectcaseKD.RESP

9case"f"

10i=i+1

11SD.filename=b1?&?i?&".bmp"

12SD.load

13SD.draw

14

15ST.Text="臨時銀行:?"&?(i-1)*0.01

16ST.draw

17

18ifi=kthen

19SD.filename=b1?&?i?&"b.bmp"

20SD.load

21SD.draw

22

23ST.Text="臨時銀行:?0"

24ST.draw

25

26sleep500

27exitdo

28endif

29case"j"

30sleep500

31exitdo

32endselect

33endif

34loop

35

36'b3=b2

37ifi

38a1=(i-1)*0.01

39b2=1

40c.SetAttrib"N1",1

41FB.text="本次氣球收益:"&?a1

42else

43a1=0

44b2=0

45c.SetAttrib"N1",0

46FB.text="本次氣球爆炸,您未獲得收益"

47endif

48

49a2=a2+a1

50c.SetAttrib"A1",i-1

51c.SetAttrib"A3",a1

52c.SetAttrib"A4",a2

53'c.SetAttrib"N2",b3

這里的代碼意思是隨著每一次S控件記錄的按鍵次數(shù)增加,SD調用的圖片相應變大,并且ST臨時銀行的數(shù)值相應增加,直到收集到的按鍵為“J”為止。隨后就是將信息寫入list和設置反饋界面的語句了。

S界面的樣式如圖所示,Image1是氣球圖片,Text2和Text3分別是臨時銀行和永久銀行:

這里需要注意的是,需要將設置中的按鍵次數(shù)調到一個大于或至少等于128的值,如圖:

如上設置之后,就算是一個可以有基礎功能的仿真氣球爆破實驗程序了。

點擊“閱讀原文”下載示例文件。供大家參考。

不知不覺距上次更新又過了一個月……實在是罪過……

歡迎有疑問的朋友繼續(xù)在公眾號后臺或者微信上給Ryan留言提問~

祝好!

—Ryan的后記

如果覺得好看還請點擊右下角的“好看”哈,讓更多朋友看到~↓↓↓↓

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容