这是我显示自定义高分系统的完整代码:
// instance vars
var buffer = 0
var trigger = 0
// display setup
draw_set_font(fnt_highscores)
draw_set_color(c_white)
draw_set_halign(fa_left)
draw_set_valign(fa_middle)
// open save
ini_open("highscores.sav")
// reads file into 2d array
for (var i=0; i<10; i++)
{
scores[0,i] = ini_read_string(string(i+1), "place", 0)
scores[1,i] = ini_read_string(string(i+1), "name", 0)
scores[2,i] = ini_read_string(string(i+1), "score", 0)
}
// cycles through array to look for new high score
for (var i=0; i<10; i++)
{
// found one, run once.
if (global.points >= int64(scores[2,i]) && trigger == 0)
{
// starting from bottom, move value from number above to current
for (var j=9; j>i; j--)
{
scores[0,j] = scores[0,j-1]
scores[1,j] = scores[1,j-1]
scores[2,j] = scores[2,j-1]
}
// new high score
var initials = "beef"
scores[0,i] = string(i+1)
scores[1,i] = initials
scores[2,i] = global.points
trigger++
}
// display score
var j = i + 1
draw_text(global.centerw - 150, global.centerh - 220 + buffer, string(j) + ".")
draw_text(global.centerw - 100, global.centerh - 220 + buffer, scores[1,i])
draw_text(global.centerw + 20, global.centerh - 220 + buffer, scores[2,i])
buffer += 40
}
// write to file - NOT WORKING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for (var i=0; i<10; i++)
{
ini_write_string(string(i+1), "place", scores[0,i])
ini_write_string(string(i+1), "name", scores[1,i])
ini_write_string(string(i+1), "score", string(scores[2,i]))
}
// close save
ini_close()
// draws flashing text
scr_flash_alpha(300)
draw_text(50,room_height - 50, "Start or R Key to Restart. Q to quit")
draw_set_alpha(1)
“写入文件”行(靠近buttom)导致问题。 以下是我击败高分时所做的事情:
有趣的是,如果我注释掉对ini行的写入,一切都按预期完美运行(显然不会将信息保存到ini中)
所以,我所有的循环IS工作,只是当它写入ini时,它没有正确地写入值。 任何提示?我已经重写了几个小时并且没有笑
提前非常感谢!!!
(编辑:这是我的highscores.sav - 请注意,条目10和9完全相同,直到“地点”值。同样有趣的是它从10开始并以1的方式工作。当我写默认值时保存,我编号为1-10。)
[10]
score="2500"
name="beef"
place="9"
[9]
score="2500"
name="beef"
place="9"
[8]
score="3000"
name="ASS"
place="8"
[7]
score="3800"
name="MAL"
place="7"
[6]
score="4600"
name="ADO"
place="6"
[5]
score="5500"
name="DSK"
place="5"
[4]
score="5500"
name="DIS"
place="4"
[3]
score="5900"
name="PPS"
place="3"
[2]
score="6100"
name="DSK"
place="2"
[1]
score="6800"
name="PSF"
place="1"
(旁注:我知道这里和那里的代码中有一些草率的东西,一旦运行就会清理它。)
答案 0 :(得分:0)
相当简单,我完全忽略了一些东西。只需在关闭ini后设置global.score = 0
。
背后的逻辑:在游戏制作者语言中,每一帧都会出现一个绘制事件。所以它不断打开新创建的保存文件并通过高分检查。