2016-03-05 48 views
1

针对MHS读者的消息:请勿复制此代码。只要用它来帮助你。在GameMaker中输入检查结果不正确

我有10个单词从一个文件加载,然后9个显示在网格中。 30秒后,1被删除,文件中的第10个字被放入。然后用户被要求猜测这2个单词。他们每个人有三次机会。当我输入正确答案时,仍然说我错了。我甚至会得出正确的答案来协助测试。结果总是返回错误。

这些脚本: ReadFile的

global.DelWord = "Unknown"; 
randomize();                
Fopen = file_text_open_read(working_directory + "\Words.txt");  
global.WordList = ds_list_create(); 
global.FileLen = file_text_eof(Fopen); 
while(!file_text_eof(Fopen)){ 
    Fread = string_upper(file_text_readln(Fopen)); 
    ds_list_add(global.WordList,Fread); 
    } 
file_text_close(Fopen); 
ds_list_shuffle(global.WordList); 
global.WildCard = ds_list_find_value(global.WordList,global.FileLen); 
ds_list_delete(global.WordList,global.FileLen); 

DrawWords

z=0; 
draw_set_colour(c_black); 
draw_set_font(font0); 
draw_set_valign(fa_left); 
draw_set_halign(fa_bottom); 
draw_text(100,100,"Code by kammak743); 
draw_text(1600,900,string_lower(global.WildCard)); 
draw_text(1200,900,string_lower(global.DelWord)); 



for (x=0; x<3; x+=1){ 
    for (y=0; y<3; y+=1){ 
     draw_text((x*400)+700,(y*200)+290,ds_list_find_value(global.WordList,z)); 
     z=z+1 
     } 
    } 

NewGrid

ds_list_shuffle(global.WordList); 
global.DelWord = ds_list_find_value(global.WordList,global.FileLen); 
ds_list_delete(global.WordList,global.FileLen); 
ds_list_insert(global.WordList,global.FileLen,global.WildCard); 
ds_list_shuffle(global.WordList); 

检验字

Correct1 = 0;               
OldWordA = false;             
while (OldWordA == false) && (Correct1 <3){      
    global.OldWordQ = get_string("What word was replaced?","");   
    if string_lower(global.OldWordQ) == string_lower(global.DelWord){ 
     OldWordA= true;         
     } 
    Correct1 += 1;           
    } 


Correct2 = 0;            
NewWordA = false; 
globalvar NewWordA; 
while (NewWordA == false) && (Correct2 <3){ 
    global.NewWordQ = get_string("What word is new?",""); 
    if string_lower(global.NewWordQ) == string_lower(global.WildCard){ 
     NewWordA= true; 
     } 
    Correct2 += 1; 
    } 


global.Win=false; 
if (NewWordA == true) && (OldWordA == true){ 
    global.Win=true;        
    } 
else{ 
    global.Win=false;       
    } 

DrawCheck

if global.Win == true{ 
    draw_text(900,900,"You won!!!"); 
    } 
else{ 
    draw_text(900,900,"You failed"); 
    } 
draw_text(400,50,global.OldWordQ); 
draw_text(900,50,global.NewWordQ); 
+0

分享您的项目。我也不明白你为什么使用'global.FileLen',因为'= file_text_eof(Fopen);' - 这里总是为零('false')。 – Dmi7ry

回答

0

你以前file_text_readln()从文件中读取单词,但是这个功能也读CR/LF码($ 0D,$ 0A),所以当你比较两个字符串,如

ABOUT(ASCII代码:97,98,111,117,116)

ABOUT(ASCII代码:97,98,111,117,116,13,10)它会返回false

因此,您需要更改

Fread = string_upper(file_text_readln(Fopen)); 

Fread = string_upper(file_text_read_string(Fopen)); 
file_text_readln(Fopen); 
+0

非常感谢您的回答并对其进行了解释。 – kammak743

+0

@ kammak743顺便说一句,有些事情... 1)。不要使用'x'和'y'作为简单变量,因为它是对象的内部属性(变量)。所以,当你在'for'语句中使用'x'和'y'时,你改变当前对象的状态。例如,使用'dx'和'dy'来代替。 2)。不使用'get_string',使用'get_string_async'(尝试按'get_string'按'Cancel')。 3)。像'if aaa == true {}'这样的语句可以写成'if aaa {}',并且像'if aaa == false {}'一样写为'if!aaa {}'。 4)。 'a = a + 1'或'a + = 1' - >'a ++'。和其他许多...看到一些改进的例子http://pastebin.com/i3G6fMDY – Dmi7ry