2010年8月29日日曜日

2010年7月25日日曜日

HSPでGLUTを使わないでOpenGLを使ってみた。




Glutを使わずOpenGLを直叩きしました。


うまいこといきました。


ソース
http://begriff.zxq.net/TEST3.ZIP

2010年7月6日火曜日

あぁ 勘違い。

strlen() は \0 も計算に入れるものだと思ってコードを組んでた。アホや。。。

2010年6月28日月曜日

HSPでOpenGL その2



いろいろといじってたら
影ができた模様。タイマーとかも使って回転するアニメーションを作れた。
ダブルバッファリングはまだ実装していない
HSPとglutとの組み合わせは難しい終了処理がよくわからない。
OpenGLは一筋縄ではいかないようである

2010年6月27日日曜日

HSPでOpenGL その1


HSPでOpenGLというかglutを動かしてみた。


影とか 光源とか 設定の仕方がわからなかったので真っ白な物体が表示された。

2010年4月11日日曜日

repeat~loop foreach~loop をマクロで実装

repeat~loop foreach~loopをマクロで実装しました。

gotoでループを脱出してもスタックオーバーフローになりません

ちゃんと システム変数cnt もオリジナルと同じ挙動をします。

foreachも対応しました。拡張機能として
配列変数の各次元にも対応しました。

foreach
foreach2
foreach3
foreach4

といったように

foreachをモジュール型変数で使うときもオリジナルと同じ挙動するようになりました。

詳しくは それとなくHSPで

ケン○ッキーフライドチキン作ってみた その2

また挑戦してみました。

今回は大成功です!!!(自分なりには)

レシピのほうは私のホムペ“それとなくHSP”で公開しました。

たぶん私が初の試みでしょう。揚げ粉にコーヒーの粉ミルク(?)を配合したのは!

2010年3月29日月曜日

IRCボット改良版


; Character Codepage Encode module

#ifndef __ENCODE_AS__
#define global __ENCODE_AS__

#module "mod_encode"

#const global CODEPAGE_S_JIS 932 ; Shift-JIS
#const global CODEPAGE_EUC_JP 51932 ; EUC-JP
#const global CODEPAGE_JIS 50220 ; iso-2022-jp(JIS)
#const global CODEPAGE_UTF_7 65000 ; utf-7
#const global CODEPAGE_UTF_8 65001 ; utf-8
#const global CODEPAGE_UNICODE 1200 ; Unicode
#const global CODEPAGE_UNICODE_BE 1201 ; Unicode(Big-Endian)
#const global CODEPAGE_AUTODET_ALL 50001 ; auto detect all
#const global CODEPAGE_AUTODET 50932 ; auto detect

#usecom IMultiLanguage@mod_encode "{275c23e1-3747-11d0-9fea-00aa003f8646}" \
"{275c23e2-3747-11d0-9fea-00aa003f8646}"
#comfunc MuLang_ConvertString 9 var, int, int, var, var, var, var

#deffunc _encode_init
newcom ml, IMultiLanguage
return

#deffunc _encode_term onexit
delcom ml
return

#deffunc __FromSJIS@mod_encode str _src, int srcCodepage, var dest, int destCodepage, local src, local srcSize, local destSize, local pdwMode
pdwMode = 0
srcSize = -1
destSize= 0
src = _src
sdim dest
MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize
sdim dest, destSize + 1
MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize
return destSize

#defcfunc _ToSJIS@mod_encode var src, int srcCodepage, int destCodepage, local dest
__FromSJIS src, srcCodepage, dest, destCodepage
return dest

#define _FromSJIS __FromSJIS@mod_encode

#global


_encode_init


; SJIS -> other char code
#define sjis2eucjp(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_EUC_JP
#define sjis2jis(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_JIS
#define sjis2utf7n(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_7
#define sjis2utf8n(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_8

; other char code -> SJIS
#define ctype eucjp2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_EUC_JP, CODEPAGE_S_JIS)
#define ctype jis2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_JIS, CODEPAGE_S_JIS)
#define ctype utf7n2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_UTF_7, CODEPAGE_S_JIS)
#define ctype utf8n2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_UTF_8, CODEPAGE_S_JIS)

////////////////////////////////match
#uselib"kernel32.dll"

#cfunc global IsDBCSLeadByteEx "IsDBCSLeadByteEx" int,int
#define global ctype MB1(%1) IsDBCSLeadByteEx(0,%1)
#module
#defcfunc match str buf1_,str buf2_
buf1=buf1_
buf2=buf2_
buf3=""
hyoka=0
index=0
count=0
data_(3)=0
data_(2)=0
data_(1)=0
data_(0)=0
while(1)
while(1)
data=peek(buf1,index)
if(MB1(data)){
pre_index=index
data_(count)=peek(buf1,index)
index+
count+
data_(count)=peek(buf1,index)
index+
count+
}else{
pre_index=index
data_(count)=peek(buf1,index)
index+
count+
}
if(count>=3||data=0){
buf3=strf("%c",data_(0))+strf("%c",data_(1))+strf("%c",data_(2))+strf("%c",data_(3))
data_(3)=0
data_(2)=0
data_(1)=0
data_(0)=0
count=0
_break
}
wend
index=pre_index
// mes buf3
if(instr(buf2,0,buf3)>=0){

hyoka+


}
if peek(buf1,index)=0:_break

wend
return hyoka
#global
//////////////////////////match



#include "hspsock.as"

onexit *exit
goto *hi
*exit
sockclose SockId
end
*hi

/////定数/////////////////////////////

ServerName="irc.freenode.net"
Port=6667
NickName=""
ChannelName="#hspDwiki_TEST"
CloseMessage="Leaving..."
MainWindowSize=400+6+21

/////変数初期化///////////////////////

Command=""
InputData=""
Message=""
SockId=0
sdim StringsData,65536
sdim GetData,1024
sdim send_data,1024
sdim aidata_,1024*1024*16
sdim aidata,1024*1024*16
sdim aidata_load,1024*1024*16
sdim nowgetdata,1024
sdim gyodata,1024
savefile="aigakushu.txt"
loadfile="aigakushu_load.txt"


/////ウィンドウ・オブジェクト配置/////

screen 3,300,12+21+19+6+21+12,2
syscolor 15
boxf
color
sysfont 17

pos 12,12
mes "チャンネル名"

pos ,12+21
objsize 300-24,19
input ChannelName

pos 300-12-88,12+21+19+6
objsize 88,21
button gosub "OK",*join


screen 4,300,12+21+19+6+21+12,2
syscolor 15
boxf
color
sysfont 17

pos 12,12
mes "切断メッセージ"

pos ,12+21
objsize 300-24,19
input CloseMessage

pos 300-12-88,12+21+19+6
objsize 88,21
button gosub "OK",*part

screen 5,300,12+21+19+6+21+19+6+21+21+6+21+12+21+6,2
syscolor 15
boxf
color
sysfont 17

pos 12,12
mes "接続サーバ"

pos ,12+21
objsize 300-24,19
input ServerName

pos ,12+21+19+6
mes "ポート"

pos ,12+21+19+6+21
objsize 300-24,19
input Port

pos ,12+21+19+6+21+19+6
mes "ユーザー名"

pos ,12+21+19+6+21+19+6+21
objsize 300-24,19
input NickName

pos 300-12-88,12+21+19+6+21+19+6+21+21+6
objsize 88,21
button "OK",*session


screen 0,640,MainWindowSize+6+21+6+21
syscolor 15
boxf
color
sysfont 17

pos 12,12
objsize 88,21
button gosub "LOGIN",*session_req

pos 12+88+6,12
objsize 88,21
button gosub "JOIN",*join_req

pos 12+88+6+88+6,12
objsize 88,21
button gosub "PART",*part_req

pos 12,12+21+6
objsize 640-24,MainWindowSize-12-21-6-6-21-12
mesbox StringsData,,,4
Hmesbox=stat

pos 12,MainWindowSize-12-21
objsize 640-88-24-6,21
input InputData
Hinput=stat

pos 640-88-12,MainWindowSize-12-21
objsize 88,21
button gosub "OK",*talk

pos 640-88-12,MainWindowSize-12-21+6+21
objsize 88,21
button gosub "学習OFF",*gaku
gakuid=stat

pos 640-88-12-6-88,MainWindowSize-12-21+6+21
objsize 88,21
button gosub "発言OFF",*hatu
hatuid=stat

pos 12,MainWindowSize-12-21+6+21+3
color
mes "読書込ファイル"

pos 12+6+88,MainWindowSize-12-21+6+21
objsize 88,21
input savefile

pos 12+88+6+88+6,MainWindowSize-12-21+6+21+3
color
mes "読込ファイル"

pos 12+88+6+88+6+6+88,MainWindowSize-12-21+6+21
objsize 88,21
input loadfile

pos 640-88-12-6-88,MainWindowSize-12-21+6+21+6+21
objsize 88,21
button gosub "UTF-8",*moji
mojiid=stat

stop

*moji
mojic xor 1
if mojic :objprm mojiid,"JIS":else:objprm mojiid,"UTF-8"
return

*gaku
ai xor 1
if ai:objprm gakuid,"学習ON":else:objprm gakuid,"学習OFF"
return
*hatu
ht xor 1
if ht:objprm hatuid,"発言ON":else:objprm hatuid,"発言OFF"
return
/////データチェック///////////////////

*main
repeat
sockcheck SockID
stat_=stat
if stat_=0{
gsel 0
sockget GetData,1024,SockID

if(mojic==0){
get_data=utf8n2sjis(GetData)
}else{
get_data=jis2sjis(GetData)
}

StringsData+=get_data+"\n"
objprm Hmesbox,StringsData
sendmsg objinfo(Hmesbox,2),0xb6,0,65536
if(instr(get_data,0,"PRIVMSG")>=0){
if(ai){
notesel aidata_load
noteload loadfile
if(1){
nowgetdata=strmid(get_data,instr(get_data,instr(get_data,0,"PRIVMSG"),":")+instr(get_data,0,"PRIVMSG")+1,strlen(get_data)-instr(get_data,instr(get_data,0,"PRIVMSG"),":")-instr(get_data,0,"PRIVMSG")-1)
if(ht){
aidata_=aidata_load+aidata
notesel aidata_
count=0
maxmatch=0
countmax=notemax*5/6-1
while(1)
if(count>=countmax):_break
noteget gyodata,count
// dialog "1: "+gyodata
// dialog "2: "+nowgetdata
// dialog "3: "+match(gyodata,nowgetdata)
if match(gyodata,nowgetdata)>=maxmatch{
maxmatch=match(gyodata,nowgetdata)

maxmatchgyo=count
}
count+
wend
// dialog "4: "+maxmatch
if (1.0*maxmatch/strlen(nowgetdata)>=0.13||(strlen(nowgetdata)>=8&&maxmatch>=4)) && strlen(nowgetdata)>=4:noteget gyodata,maxmatchgyo+1:{
if(rnd(100)>82){
gosub *aitalk
}
}
}
aidata+=nowgetdata
notesel aidata
notesave savefile
}
}
}
if(instr(get_data,0,"PING")=0)||(instr(get_data,0,"ping")=0){
gosub *pong
}
}

wait 1
loop

/////コマンド送信////////////////////

*enter
send_buf=""+Message+""+Command+"\n"



if(mojic==0){
sjis2utf8n send_data,send_buf
}else{
sjis2jis send_data,send_buf
}

sockput send_data,SockId
StringsData+=""+Message+""+Command+"\n\n"
objprm Hmesbox,StringsData
sendmsg objinfo(Hmesbox,2),0xb6,0,65536
Message=""
return

*talk
Message="PRIVMSG "+ChannelName+" :"
Command=InputData
gosub *enter
objprm Hinput,""
return

*aitalk
Message="PRIVMSG "+ChannelName+" :"
Command=gyodata
gosub *enter
return
*pong
Message="PONG"
Command=""
gosub *enter
return

*join_req
gsel 3,1
return

*join
gsel 3,-1
gsel 0
Message="JOIN "+ChannelName
Command=""
gosub *enter
objprm Hinput,""
return

*part_req
gsel 4,1
return

*part
gsel 4,-1
gsel 0
Message="PART "+ChannelName+" :"
Command=CloseMessage
gosub *enter
objprm Hinput,""
return

*session_req
gsel 5,1
return

*session
gsel 5,-1
gsel 0
if once:sockclose SockId
sockopen SockId,ServerName,Port
sockput "USER username host server real\n",SockId
sockput "NICK "+NickName+"\n",SockId
once=1

notesel aidata
exist savefile
if strsize=-1{
notesave savefile
}
noteload savefile

notesel aidata_load
exist loadfile
if strsize=-1{
notesave loadfile
}
noteload loadfile

goto *main

2010年3月28日日曜日

IRC 人工無能

糞アルゴリズムによるボット

; Character Codepage Encode module

#ifndef __ENCODE_AS__
#define global __ENCODE_AS__

#module "mod_encode"

#const global CODEPAGE_S_JIS 932 ; Shift-JIS
#const global CODEPAGE_EUC_JP 51932 ; EUC-JP
#const global CODEPAGE_JIS 50220 ; iso-2022-jp(JIS)
#const global CODEPAGE_UTF_7 65000 ; utf-7
#const global CODEPAGE_UTF_8 65001 ; utf-8
#const global CODEPAGE_UNICODE 1200 ; Unicode
#const global CODEPAGE_UNICODE_BE 1201 ; Unicode(Big-Endian)
#const global CODEPAGE_AUTODET_ALL 50001 ; auto detect all
#const global CODEPAGE_AUTODET 50932 ; auto detect

#usecom IMultiLanguage@mod_encode "{275c23e1-3747-11d0-9fea-00aa003f8646}" \
"{275c23e2-3747-11d0-9fea-00aa003f8646}"
#comfunc MuLang_ConvertString 9 var, int, int, var, var, var, var

#deffunc _encode_init
newcom ml, IMultiLanguage
return

#deffunc _encode_term onexit
delcom ml
return

#deffunc __FromSJIS@mod_encode str _src, int srcCodepage, var dest, int destCodepage, local src, local srcSize, local destSize, local pdwMode
pdwMode = 0
srcSize = -1
destSize= 0
src = _src
sdim dest
MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize
sdim dest, destSize + 1
MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize
return destSize

#defcfunc _ToSJIS@mod_encode var src, int srcCodepage, int destCodepage, local dest
__FromSJIS src, srcCodepage, dest, destCodepage
return dest

#define _FromSJIS __FromSJIS@mod_encode

#global


_encode_init


; SJIS -> other char code
#define sjis2eucjp(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_EUC_JP
#define sjis2jis(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_JIS
#define sjis2utf7n(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_7
#define sjis2utf8n(%1, %2) _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_8

; other char code -> SJIS
#define ctype eucjp2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_EUC_JP, CODEPAGE_S_JIS)
#define ctype jis2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_JIS, CODEPAGE_S_JIS)
#define ctype utf7n2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_UTF_7, CODEPAGE_S_JIS)
#define ctype utf8n2sjis(%1) _ToSJIS@mod_encode(%1, CODEPAGE_UTF_8, CODEPAGE_S_JIS)

////////////////////////////////match
#uselib"kernel32.dll"

#cfunc global IsDBCSLeadByteEx "IsDBCSLeadByteEx" int,int
#define global ctype MB1(%1) IsDBCSLeadByteEx(0,%1)
#module
#defcfunc match str buf1_,str buf2_
buf1=buf1_
buf2=buf2_
buf3=""
hyoka=0
index=0
count=0
data_(3)=0
data_(2)=0
data_(1)=0
data_(0)=0
while(1)
while(1)
data=peek(buf1,index)
if(MB1(data)){
pre_index=index
data_(count)=peek(buf1,index)
index+
count+
data_(count)=peek(buf1,index)
index+
count+
}else{
pre_index=index
data_(count)=peek(buf1,index)
index+
count+
}
if(count>=3){
buf3=strf("%c",data_(0))+strf("%c",data_(1))+strf("%c",data_(2))+strf("%c",data_(3))
data_(3)=0
data_(2)=0
data_(1)=0
data_(0)=0
count=0
_break
}
wend
index=pre_index
// mes buf3
if(instr(buf2,0,buf3)>=0){

hyoka+


}
if peek(buf1,index)=0:_break

wend
return hyoka
#global
//////////////////////////match



#include "hspsock.as"

onexit *exit
goto *hi
*exit
sockclose SockId
end
*hi

/////定数/////////////////////////////

ServerName="irc.freenode.net"
Port=6667
NickName=""
ChannelName="#hspDwiki_TEST"
CloseMessage="Leaving..."
MainWindowSize=400+6+21

/////変数初期化///////////////////////

Command=""
InputData=""
Message=""
SockId=0
sdim StringsData,65536
sdim GetData,1024
sdim send_data,1024
sdim aidata,256*256
sdim nowgetdata,1024
sdim gyodata,1024

notesel aidata
exist "aigakushu.txt"
if strsize=-1{
notesave "aigakushu.txt"
}
noteload "aigakushu.txt"

/////ウィンドウ・オブジェクト配置/////

screen 3,300,12+21+19+6+21+12,2
syscolor 15
boxf
color
sysfont 17

pos 12,12
mes "チャンネル名"

pos ,12+21
objsize 300-24,19
input ChannelName

pos 300-12-88,12+21+19+6
objsize 88,21
button gosub "OK",*join


screen 4,300,12+21+19+6+21+12,2
syscolor 15
boxf
color
sysfont 17

pos 12,12
mes "切断メッセージ"

pos ,12+21
objsize 300-24,19
input CloseMessage

pos 300-12-88,12+21+19+6
objsize 88,21
button gosub "OK",*part

screen 5,300,12+21+19+6+21+19+6+21+21+6+21+12+21+6,2
syscolor 15
boxf
color
sysfont 17

pos 12,12
mes "接続サーバ"

pos ,12+21
objsize 300-24,19
input ServerName

pos ,12+21+19+6
mes "ポート"

pos ,12+21+19+6+21
objsize 300-24,19
input Port

pos ,12+21+19+6+21+19+6
mes "ユーザー名"

pos ,12+21+19+6+21+19+6+21
objsize 300-24,19
input NickName

pos 300-12-88,12+21+19+6+21+19+6+21+21+6
objsize 88,21
button "OK",*session


screen 0,640,MainWindowSize+6+21
syscolor 15
boxf
color
sysfont 17

pos 12,12
objsize 88,21
button gosub "LOGIN",*session_req

pos 12+88+6,12
objsize 88,21
button gosub "JOIN",*join_req

pos 12+88+6+88+6,12
objsize 88,21
button gosub "PART",*part_req

pos 12,12+21+6
objsize 640-24,MainWindowSize-12-21-6-6-21-12
mesbox StringsData,,,4
Hmesbox=stat

pos 12,MainWindowSize-12-21
objsize 640-88-24-6,21
input InputData
Hinput=stat

pos 640-88-12,MainWindowSize-12-21
objsize 88,21
button gosub "OK",*talk

pos 640-88-12,MainWindowSize-12-21+6+21
objsize 88,21
button gosub "学習OFF",*gaku
gakuid=stat

pos 640-88-12-6-88,MainWindowSize-12-21+6+21
objsize 88,21
button gosub "発言OFF",*hatu
hatuid=stat
stop

*gaku
ai xor 1
if ai:objprm gakuid,"学習ON":else:objprm gakuid,"学習OFF"
return
*hatu
ht xor 1
if ht:objprm hatuid,"発言ON":else:objprm hatuid,"発言OFF"
return
/////データチェック///////////////////

*main
repeat
sockcheck SockID
stat_=stat
if stat_=0{
gsel 0
sockget GetData,1024,SockID

get_data=utf8n2sjis(GetData)

StringsData+=get_data+"\n"
objprm Hmesbox,StringsData
sendmsg objinfo(Hmesbox,2),0xb6,0,65536
if(instr(get_data,0,"PRIVMSG")>=0){
if(ai){
if(1){
nowgetdata=strmid(get_data,instr(get_data,instr(get_data,0,"PRIVMSG"),":")+instr(get_data,0,"PRIVMSG")+1,strlen(get_data)-instr(get_data,instr(get_data,0,"PRIVMSG"),":")-instr(get_data,0,"PRIVMSG")-1)
if(ht){
notesel aidata
count=0
maxmatch=0
while(1)
if(count>=notemax-1):_break
noteget gyodata,count
// dialog "1: "+gyodata
// dialog "2: "+nowgetdata
// dialog "3: "+match(gyodata,nowgetdata)
if match(gyodata,nowgetdata)>=maxmatch{
maxmatch=match(gyodata,nowgetdata)

maxmatchgyo=count
}
count+
wend
// dialog "4: "+maxmatch
if 1.0*maxmatch/strlen(nowgetdata)>=0.3:noteget gyodata,maxmatchgyo+1:{
if(rnd(100)>60){
gosub *aitalk
}
}
}
aidata+=nowgetdata
notesel aidata
notesave "aigakushu.txt"
}
}
}
}

wait 1
loop

/////コマンド送信////////////////////

*enter
send_buf=""+Message+""+Command+"\n"
sjis2utf8n send_data,send_buf
sockput send_data,SockId
StringsData+=""+Message+""+Command+"\n\n"
objprm Hmesbox,StringsData
sendmsg objinfo(Hmesbox,2),0xb6,0,65536
Message=""
return

*talk
Message="PRIVMSG "+ChannelName+" :"
Command=InputData
gosub *enter
objprm Hinput,""
return

*aitalk
Message="NOTICE "+ChannelName+" :"
Command=gyodata
gosub *enter
return

*join_req
gsel 3,1
return

*join
gsel 3,-1
gsel 0
Message="JOIN "+ChannelName
Command=""
gosub *enter
objprm Hinput,""
return

*part_req
gsel 4,1
return

*part
gsel 4,-1
gsel 0
Message="PART "+ChannelName+" :"
Command=CloseMessage
gosub *enter
objprm Hinput,""
return

*session_req
gsel 5,1
return

*session
gsel 5,-1
gsel 0
if once:sockclose SockId
sockopen SockId,ServerName,Port
sockput "USER username host server real\n",SockId
sockput "NICK "+NickName+"\n",SockId
once=1
goto *main

機械語をそのまま打ち込むプログラミング言語

uselib "user32.dll"
efunc MessageBoxA

func main{
38 A8 B2 6D
F3 C1 79 DG
[loop_start] //ラベル
5b 75 82 c1

75 05 [@loop_start]
// 75 05 ・・・ JNZ [@loop_start] loop_startにある一定の条件でジャンプ
FF 25(@MessageBoxA)
//間接絶対naerコール
E8(@kkk)
//普通のnearコール
}

func kkk{
4b cc 48 a2
}


こんな感じの言語ってどうだろうか。言語としての機能はAPIのサポート。関数。ラベル
コンパイラというよりはEXEのデータ構造に準拠したファイルを生成する訓練にはなるかなー

2010年3月27日土曜日

IRCリーバシ改良版

一気に文字列を送りつけると送信元と受信側で表示にラグが発生するので
間隔をあけて送信するようにしました。
あと色付けするとその分送る文字数が増えるので 軽くするために色はありません。



var turn=0;//0黒 1 白 ターン
var data = new Array(8*8);
var data2 = new Array(8*8);
var channel_g;
var end=0;
var timer_id;

function event::onChannelText(prefix, channel, text){
channel_g=channel;
if(text.match(/^#/i)){

cmd=""+text.match(/[a-z]+$/i);
var ddd=text.match(/(\d)/g);

if(ddd!=null){

x=ddd[0];
y=ddd[1];
if(end==1){
send(channel,"<color navy,silver><ゲームを再開してください>");
return(0);
}
if(x>8||x==0||y>8||y==0){
send(channel,"<color navy,silver><不正な入力です>");
}else{
if(putable(x-1,y-1)==0){
send(channel,"<color navy,silver><そこには打てません>");

}else{
copyArr12();
put(x-1,y-1);
turnChange()
if(numberOfPutable()==0){
turnChange()
if(numberOfPutable()==0){

if(black_n()>white_n()){
send(channel,"<color navy,silver><黒の勝ち>");
}
if(black_n()<white_n()){
send(channel,"<color navy,silver><白の勝ち>");
}
if(black_n()==white_n()){
send(channel,"<color navy,silver><引き分け>");
}
draw();
end=1;
return(0);
}else{
send(channel,"<color navy,silver><打つ手がないのでパス>");
}
}
draw();

}
}
}

if(cmd!=null){
if(cmd.search(/^new$/i)!=-1){
send(channel,"<color navy,silver><ゲームを開始します>");
newGame();
draw();
end=0;
}
if(cmd.search(/^debug$/i)!=-1){
send(channel,"<color navy,silver><デバッグを開始します>");
newGame();
debug();
draw();
end=0;
}
if(cmd.search(/^matta$/i)!=-1){
if(matta_ok==1){
send(channel,"<color navy,silver><\"待った\"しました>");
copyArr21();
turnChange()
draw();
end=0;
matta_ok=0;
}else{
send(channel,"<color navy,silver><\"待った\"できません>");
}
}
}
}
}

function newGame(){
turn=0;
for(ix=0;ix<8;ix++){
for(iy=0;iy<8;iy++){
data[(ix)*8+(iy)] = 0;
}
}
data[(3)*8+(3)]=1; //1黒?
data[(4)*8+(4)]=1; //2白
data[(4)*8+(3)]=2;
data[(3)*8+(4)]=2;
}

var strbuf = new Array(8);

function draw(){
send(channel_g,"<color>....1..2..3..4..5..6..7..8 ←X Y↓ 書式 #X Y");
for(iy=0;iy<8;iy++){
str="";
str+=""+(iy+1);
for(ix=0;ix<8;ix++){

if(data[(ix)*8+(iy)]==0){
if(putable(ix,iy)==0){
str+=""+"..・";
}else{
str+=""+"*"
}
}
if(data[(ix)*8+(iy)]==1){
str+=""+"●";
}
if(data[(ix)*8+(iy)]==2){
str+=""+"○";
}
}
if(iy==5){
str+=" balck "+black_n();
}
if(iy==6){
str+=" white "+white_n();
}
if(iy==7){
if(turn==0){
str+=" 黒の番です";
}else{
str+=" 白の番です";
}
}
//send(channel_g,str);
strbuf[iy]=str;

}

timer_id=setTimeout(myTimer,2200);

}

var ixxx=0;

function myTimer(){
send(channel_g,strbuf[ixxx]);

ixxx++;
if(ixxx==9){
ixxx=0;
}else{
timer_id=setTimeout(myTimer,2200);
}
}

function black_n(){
amount=0;
for(i=0;i<64;i++){
if(data[i]==1){
amount++;
}
}
return(amount);
}

function white_n(){
amount=0;
for(i=0;i<64;i++){
if(data[i]==2){
amount++;
}
}
return(amount);
}

function putable(x,y){
rr=0;
if(data[(x)*8+(y)]==0){
if(turn==0){
a1=2;
a2=1;
}else{
a1=1;
a2=2;
}
if(x!=0&&y!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y-m)]==a1){
a=1;
}
if(data[(x-m)*8+(y-m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x-m)*8+(y-m)]==0){
break;
}
if(x-m==0||y-m==0){
break;
}
m++;

}
}

if(y!=0){
m=1;
a=0;
while(1){
if(data[(x)*8+(y-m)]==a1){
a=1;
}
if(data[(x)*8+(y-m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x)*8+(y-m)]==0){
break;
}
if(y-m==0){
break;
}
m++;

}
}

if(x!=7&&y!=0){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y-m)]==a1){
a=1;
}
if(data[(x+m)*8+(y-m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x+m)*8+(y-m)]==0){
break;
}
if(x+m==7||y-m==0){
break;
}
m++;

}
}

if(x!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y)]==a1){
a=1;
}
if(data[(x+m)*8+(y)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x+m)*8+(y)]==0){
break;
}
if(x+m==7){
break;
}
m++;

}
}

if(x!=7&&y!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y+m)]==a1){
a=1;
}
if(data[(x+m)*8+(y+m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x+m)*8+(y+m)]==0){
break;
}
if(x+m==7||y+m==7){
break;
}
m++;

}
}

if(y!=7){
m=1;
a=0;
while(1){
if(data[(x)*8+(y+m)]==a1){
a=1;
}
if(data[(x)*8+(y+m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x)*8+(y+m)]==0){
break;
}
if(y+m==7){
break;
}
m++;

}
}
if(x!=0&&y!=7){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y+m)]==a1){
a=1;
}
if(data[(x-m)*8+(y+m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x-m)*8+(y+m)]==0){
break;
}
if(x-m==0||y+m==7){
break;
}
m++;

}
}
if(x!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y)]==a1){
a=1;
}
if(data[(x-m)*8+(y)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x-m)*8+(y)]==0){
break;
}
if(x-m==0){
break;
}
m++;

}
}
}
return(rr);
}

function put(x,y){
if(turn==0){
a1=2;
a2=1;
}else{
a1=1;
a2=2;
}
if(x!=0&&y!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y-m)]==a1){
a=1;
}
if(data[(x-m)*8+(y-m)]==a2){
if(a==1){lineChange(x,y,x-m,y-m);}
break;
}
if(data[(x-m)*8+(y-m)]==0){
break;
}
if(x-m==0||y-m==0){
break;
}
m++;

}
}

if(y!=0){
m=1;
a=0;
while(1){
if(data[(x)*8+(y-m)]==a1){
a=1;
}
if(data[(x)*8+(y-m)]==a2){
if(a==1){lineChange(x,y,x,y-m);}
break;
}
if(data[(x)*8+(y-m)]==0){
break;
}
if(y-m==0){
break;
}
m++;

}
}

if(x!=7&&y!=0){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y-m)]==a1){
a=1;
}
if(data[(x+m)*8+(y-m)]==a2){
if(a==1){lineChange(x,y,x+m,y-m);}
break;
}
if(data[(x+m)*8+(y-m)]==0){
break;
}
if(x+m==7||y-m==0){
break;
}
m++;

}
}

if(x!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y)]==a1){
a=1;
}
if(data[(x+m)*8+(y)]==a2){
if(a==1){lineChange(x,y,x+m,y);}
break;
}
if(data[(x+m)*8+(y)]==0){
break;
}
if(x+m==7){
break;
}
m++;

}
}

if(x!=7&&y!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y+m)]==a1){
a=1;
}
if(data[(x+m)*8+(y+m)]==a2){
if(a==1){lineChange(x,y,x+m,y+m);}
break;
}
if(data[(x+m)*8+(y+m)]==0){
break;
}
if(x+m==7||y+m==7){
break;
}
m++;

}
}

if(y!=7){
m=1;
a=0;
while(1){
if(data[(x)*8+(y+m)]==a1){
a=1;
}
if(data[(x)*8+(y+m)]==a2){
if(a==1){lineChange(x,y,x,y+m);}
break;
}
if(data[(x)*8+(y+m)]==0){
break;
}
if(y+m==7){
break;
}
m++;

}
}
if(x!=0&&y!=7){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y+m)]==a1){
a=1;
}
if(data[(x-m)*8+(y+m)]==a2){
if(a==1){lineChange(x,y,x-m,y+m);}
break;
}
if(data[(x-m)*8+(y+m)]==0){
break;
}
if(x-m==0||y+m==7){
break;
}
m++;

}
}
if(x!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y)]==a1){
a=1;
}
if(data[(x-m)*8+(y)]==a2){
if(a==1){lineChange(x,y,x-m,y);}
break;
}
if(data[(x-m)*8+(y)]==0){
break;
}
if(x-m==0){
break;
}
m++;

}
}
}

function lineChange(x1,y1,x2,y2){
if(turn==0){
a=1;
}else{
a=2;
}
mx=0
my=0
while(1){
data[(x1+mx)*8+(y1+my)]=a;
if(x2==x1+mx&&y2==y1+my){break;}
if(x2-x1>0){mx++;}
if(x2-x1<0){mx--;}
if(y2-y1>0){my++;}
if(y2-y1<0){my--;}
}
}

function numberOfPutable(){
amount=0;
for(ix=0;ix<8;ix++){
for(iy=0;iy<8;iy++){
if(putable(ix,iy)==1){amount++;}
}
}
//send(channel_g,""+amount);
return(amount);
}

function turnChange(){
if(turn==0){
turn=1;
}else{
turn=0;
}
}
matta_ok=0;
function copyArr12(){
matta_ok=1;
for(i=0;i<64;i++){
data2[i]=data[i];
}
}
function copyArr21(){
for(i=0;i<64;i++){
data[i]=data2[i];
}
}
function debug(){
data[0]=2;
data[1]=2;
data[2]=2;
data[3]=2;
data[4]=2;
data[5]=2;
data[6]=2;
data[7]=2;

data[8]=1;
data[9]=2;
data[10]=1;
data[11]=2;
data[12]=2;
data[13]=1;
data[14]=0;
data[15]=0;

data[16]=1;
data[17]=1;
data[18]=2;
data[19]=1;
data[20]=1;
data[21]=1;
data[22]=1;
data[23]=1;

data[24]=1;
data[25]=1;
data[26]=1;
data[27]=2;
data[28]=1;
data[29]=2;
data[30]=2;
data[31]=2;

data[32]=1;
data[33]=1;
data[34]=2;
data[35]=1;
data[36]=2;
data[37]=2;
data[38]=2;
data[39]=2;

data[40]=1;
data[41]=1;
data[42]=1;
data[43]=1;
data[44]=1;
data[45]=2;
data[46]=2;
data[47]=1;

data[48]=1;
data[49]=1;
data[50]=2;
data[51]=2;
data[52]=2;
data[53]=2;
data[54]=2;
data[55]=0;

data[56]=1;
data[57]=1;
data[58]=1;
data[59]=1;
data[60]=1;
data[61]=1;
data[62]=1;
data[63]=0;
}

2010年3月22日月曜日

ケン○ッキーフライドチキンを作ってみた。

http://blog.livedoor.jp/knjymmt/archives/14568371.html
http://2chcopipe.blog122.fc2.com/blog-entry-3752.html
http://www.lifehacker.jp/2009/07/090728kfc.html

以上のサイトを参考にしてケン○ッキーフライドチキンを作ってみました。


ショートニングは使いませんでした。油を捨てたくなかったので。

香辛料をそろえるが面倒でした。
バジル オレガノは粉末が手に入らなくてみじん切り(?)程度のと
ガーリックはあらびきでした。

香辛料は
黒コショウ
ナツメグ
オールスパイス
バジル
オレガノ
パプリカ
チリペッパー
ガーリック
ジンジャー
タイム

を使ってみました。

しかしうまくいかず。。。
ただのから揚げになってしまいました
何かしらの香辛料の匂いはするんですが ケン○ッキーとは程遠く。。。
パウダー じゃなかったのが原因でしょうか・・・?

2010年2月7日日曜日

IRCのfreenodeにおけるNickServ ChanServ について

● 登録したいニックネームでIRCに接続

● NICKへ登録
/nickserv register ログインパス 自分のメールアドレス
するとメールが送られてきてその指示に従う

● ログイン
/nickserv identify ログインパス

● チャンネルに入ります。(自分が作った 誰かが既に作ったのは無理)
そこでチャンネルを登録
/chanserv register #チャンネル名

● ChanServを常駐させたいとき
/chanserv set #チャンネル名 guard on

● ChanServを常駐を解除させたいとき
/chanserv set #チャンネル名 guard off

● 管理ユーザーを増やす(チャンネルを作った人は最初から管理ユーザー)
/chanserv access #チャンネル名 add [追加したいメンバ] [権限]

/chanserv access #aaa add takahashi +votsriRfAF
+votsriRfAFは最高権限

● 管理ユーザーから消す
/chanserv access #チャンネル名 del [追加したいメンバ] [権限]

● 管理ユーザーの一覧を表示する
/chanserv access #チャンネル名 list

● オペレータになる
/chanserv op #チャンネル名

2010年1月4日月曜日

ホームページについて

ホームページ 更新しました。。。。


といっても まぁ 

見た目だけなんですけどねぇ。。。

コマンドライン引数の取得について

実行形式には
IMAGE_SUBSYSTEM_UNKNOWN 未知のサブシステム
IMAGE_SUBSYSTEM_NATIVE デバイスドライバとからしい
IMAGE_SUBSYSTEM_WINDOWS_GUI GUI
IMAGE_SUBSYSTEM_WINDOWS_CUI CUI
IMAGE_SUBSYSTEM_POSIX_CUI PosixのCUI(?)
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI Windows CEのGUI

があるわけですが 

まぁ

EXEはコマンドライン引数を取得することができます。

C言語では

CUI

int main(int argc,char *argv[])
{
return 0;
}

GUI

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, //コマンドライン文字列
int nCmdShow
) {
return 0;
}

とまぁ なっているわけですよね

メイン関数の引数としてコマンドライン引数が取得できるわけなんですが、

ただメイン関数の引数は 普通の関数の引数とは仕組みがちょいと違うんですわな(たぶん)

普通の関数はスタックに積まれているデータを引数として使うんですが、

メインの引数はスタックにあるわけでなくてちょっと違った場所にあるらしい、、、

MS-DOS時代は PSP(program segment prefix)というとこにあったらしい。

Win32ではどのようになっているのか良くわからなかったのだが、PSPはまだ健在らしい・・・?
http://yasu.asuka.net/docs/tsr/
ここによると健在のような。。。

私が持っている書籍によると(高級言語プログラマのためのアセンブラ入門 ソフトバンククリエイティブ株式会社 http://www.amazon.co.jp/%E9%AB%98%E7%B4%9A%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9%E5%85%A5%E9%96%80-%E6%9E%97-%E6%99%B4%E6%AF%94%E5%8F%A4/dp/4797332816   p424~425)

起動直後のDSレジスタにPSPの領域の先頭アドレスがあるとかないとか。。。

GetCommandLine()という関数で取得も可能なのだが。。。

まぁ要するに アセンブラレベルで CUI GUI ともに コマンドラインとかインスタンスとか取得するにはどうすればいいのかーー!! と格闘してます っよっと

EXEの構造について

PEヘッダ の
 FileAlignmentは0x200(512B) ~ 0x10000(64KiB)ですので、それ以下それ以上だとエラーでます。

皆さんお気をつけて。。。

はぁ。。。

もう少しで冬休みも終わりです。。。宿題・課題をやらなければ。。。