自定义高分系统无法正确写入ini

时间:2017-06-27 17:42:17

标签: multidimensional-array ini game-maker-language

这是我显示自定义高分系统的完整代码:

// 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)导致问题。 以下是我击败高分时所做的事情:

High Score Broken

有趣的是,如果我注释掉对ini行的写入,一切都按预期完美运行(显然不会将信息保存到ini中)

Working Fine Now!

所以,我所有的循环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"

(旁注:我知道这里和那里的代码中有一些草率的东西,一旦运行就会清理它。)

1 个答案:

答案 0 :(得分:0)

相当简单,我完全忽略了一些东西。只需在关闭ini后设置global.score = 0

背后的逻辑:在游戏制作者语言中,每一帧都会出现一个绘制事件。所以它不断打开新创建的保存文件并通过高分检查。