load_script がnot declaredになる。
cppにLuaを組み込んで下記、エラーで困っています。
教本「スクリプト言語によるゲーム開発」を参照しながら、下記コードを記述したのですが、
下記エラーが出て、困っています。
アドバイスの程、よろしくお願いいたします。
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
int GetSelection(const char *title){
char input[100];
printf("%s >",title);
fgets(input, sizeof(input), stdin);
printf("\n");
if(strlen(input)==0 || !isdigit(input[0])){
return -1;
}
return atoi(input);
}
struct SItemInfo{
char name[100];
int price;
};
typedef struct SItemInfo ItemInfo;
#define MAX_SHOP_ITEMS 5
ItemInfo shop_items[MAX_SHOP_ITEMS] = {
{"薬草",100},
{"こん棒",1000},
{"布の服",2000},
{"",-1},
{"",-1},
};
const char* GetItemName( int index){
if(( index < 0 ) || (index>= MAX_SHOP_ITEMS)){
return NULL;
}
return shop_items[index].name;
};
const int GetItemPrice( int index){
if(( index < 0 ) || (index>= MAX_SHOP_ITEMS)){
return -1;
}
return shop_items[index].price;
};
void PrintStackItem(lua_State *L, int idx){
int type = lua_type(L,idx);
switch(type){
case LUA_TSTRING:
//
printf("index %2d : type=%s : %s \n",idx, lua_typename(L,type),lua_tostring(L,idx));
break;
case LUA_TNUMBER:
//
printf("index %2d : type=%s : %f\n",idx, lua_typename(L,type),lua_tonumber(L,idx));
break;
case LUA_TBOOLEAN:
//
printf("index %2d : type=%s : %s \n",idx, lua_typename(L,type),lua_toboolean(L,idx) ? "true" :"false");
break;
defalut:
printf("index %2d : type=%s \n",idx, lua_typename(L,type));
break;
}
}
void PrintStack(lua_State *L){
printf("----- stack -------\n");
int top = lua_gettop(L);
//
for(int i=top; i>=1; i--){
PrintStackItem(L,i);
}
printf("----- ----- -------\n");
//
for(int i=-1; i>=-top; i--){
PrintStackItem(L,i);
}
printf("----- ----- -------\n");
}
int GetItemNameGlue(lua_State *L){
// printf("GetItemName() 関数実行\n");
//スタックを表示
//PrintStack(L);
//
int index = (int)lua_tonumber(L,1);
//
const char *name =GetItemName(index);
//
lua_settop(L, 0);
//
lua_pushstring(L, name);
//
//PrintStack(L);
return 1;
}
int GetItemPriceGlue(lua_State *L){
// printf("GetItemName() 関数実行\n");
//スタックを表示
// PrintStack(L);
//
int index = (int)lua_tonumber(L,1);
//
int price =GetItemPrice(index);
//
lua_settop(L, 0);
//
lua_pushnumber(L, price);
//
// PrintStack(L);
return 1;
}
int s_money = 0;
int GetSelectionGlue(lua_State *L){
//
const char *title = lua_tostring(L,1);
//
int index = GetSelection(title);
//
lua_settop(L, 0);
//
lua_pushnumber(L, index);
return 1;
}
int GetMoney(){
return s_money;
}
void SetMoney(int money){
s_money = money;
}
int GetMoneyGlue(lua_State *L){
//
int money = GetMoney();
//
lua_settop(L,0);
//
lua_pushnumber(L,money);
return 1;
}
int SetMoneyGlue(lua_State *L){
//
int index = (int)lua_tonumber(L,1);
//
SetMoney(index);
//
lua_settop(L,0);
return 0;
}
int main(int argc, char* argv[]){
//乱数初期化
srand((unsigned int)time(NULL));
for(int i=0; i<100; i++) rand();
//LuaのVMを生成する。
lua_State *L = lua_open();
//LUaの標準ライブラリを開く
luaL_openlibs(L);
//
lua_pushnumber(L, MAX_SHOP_ITEMS);
lua_setglobal(L, "MAX_SHOP_ITEMS" );
//
lua_register(L, "GetItemName", GetItemNameGlue);
lua_register(L, "GetItemPrice", GetItemPriceGlue);
lua_register(L, "GetSelection", GetSelectionGlue);
lua_register(L, "GetMoney", GetMoneyGlue);
lua_register(L, "SetMoney", SetMoneyGlue);
//所持金決定
// s_money = (rand()*10000 / RAND_MAX) + 500;
s_money = 1500;
//debug.tracebreack関数の実装へのポインタ
lua_CFunction stack_trace_func = NULL;
//debug.tracebreackの実装であるC関数を取得する
lua_getglobal(L,"debug");
if(!lua_isnil(L,-1)){
lua_getfield(L,-1,"traceback");
stack_trace_func = lua_tocfunction(L,-1);
lua_pop(L,1);
}
lua_pop(L,1);
//スタックのサイズを覚えておく
int top = lua_gettop(L);
// int ret1 = luaL_dofile(L,"douguya3.lua");
int ret1 = luaL_loadfile(L,"douguya3.lua");
//エラー処理関数を積み、その上にグローバル関数shopを積む
lua_pushcfunction(L,stack_trace_func);
lua_getglobal(L,"Shop");
ret1 = lua_pcall(L,0,0,-2);
if(ret1!=0){
//実行時エラー
printf("error: %s\n", lua_tostring(L,-1));
//スタックを戻す
lua_settop(L,top);
printf("<エンターキーを押すとスクリプトを読み直します。>\n");
getchar();
//douguya.luaをロードし直す
load_script(L);
// ret1=load_script(name='douguya3.lua',path='./');
}
else{
//スタックを戻す
lua_settop(L,top);
break;
}
if(s_money<0){
s_money=s_money*-1;
}
lua_close(L);
return 0;
}
エラー:test2_1.cpp: In function ‘int main(int, char**)’:
test2_1.cpp:247:16: error: ‘load_script’ was not declared in this scope
load_script(L);
^
test2_1.cpp:253:3: error: break statement not within loop or switch
break;
^