エラーが発生しています。

HSPで継承例

by YOS G-spec, at 2018年9月20日 01:54:23

powered by hsp3dish.js / OpenHSP

コメント
説明

HSPの継承に正式な方法が用意はされていないのですが、ラベルを使用することで、疑似的に継承させることができます。配列にAnimalモジュールを継承したDog,Cat,Chickオブジェクトを持っていますが、foreachで回してbark命令を使用すると全て別の処理を呼び出すことができます。

#include "hsp3dish.as"
 
screen 0,640,480
redraw 0
color 0,0,0
boxf
color 187,187,187
font "monospace",14
pos 10,5
 
;#runtime "hsp3cl"
#cmpopt varinit 1

#module Animal _name,virtualBark,isGrow
	#define super(%1) \
		_name=%1 :\
		virtualBark=*overrideBark

	#modcfunc name
		return _name
	#modfunc bark
		gosub virtualBark
	return refstr
#global

#module Dog _name,virtualBark
	#modinit str __name
		super@Animal __name
	return

	*overrideBark
		return "ワオーン"
#global

#module Cat _name,virtualBark
	#modinit str __name
		super@Animal __name
	return

	*overrideBark
		return "ニャーン"
#global

#module Chick _name,virtualBark,isGrow
	#modinit str __name
		super@Animal __name
		isGrow=0
	return

	#modfunc growing
		isGrow=1
	return

	*overrideBark
		if isGrow@Animal: return "コケコッコー": else: return "ピヨピヨ"
#global

#module Program
	#deffunc main
		dimtype animals,5
		newmod animals,Dog,"ポチ"
		newmod animals,Chick,"しゃくれ"
		growing animals(length(animals)-1)
		newmod animals,Dog,"ジョン"
		newmod animals,Cat,"タマ"
		newmod animals,Chick,"コッコ"
		newmod animals,Cat,"チビ"

		foreach animals
			bark animals.cnt: b=refstr
			mes strf("%s > %s",name(animals.cnt),b)
		loop
	return
#global
main

redraw 1

作成者
icon

YOS G-spec

ここはユーザの紹介文

詳しく...


関連プログラム