#include "pcbnet2.as" #include "hspda.as" #include "hspext.as" #define ADDR "************" ;接続先アドレス #define PORT 21 ;port番号 #define men 16 ;登録数 #define tipx 32                      ;チップX #define tipy 32       ;チップY #define komax 12 ;背景コマ数X #define komay 12 ;背景コマ数Y buffer 1,32*9,32*4,1 picload "****.bmp"       ;キャラ1 buffer 4,0,0,32*17,32*34,1 picload "*****.bmp" ;背景画像 sdim map,145*4,145 ;町1map sdim map1,145*4,145 ;町1map sdim map3,145*4,145 ;町map sdim heya,145*4,145 ;heyamap sdim heya1,145*4,145 ;heyamap sdim heya2,145*4,145 ;heyamap sdim heya3,145*4,145 ;heyamap sdim heya4,145*4,145 ;heyamap sdim map2,1000,3 ;マップ配列(x座標,y座標,通行コード) dim kban,3 ;キャラ変数 dim kkban,3 ;自キャラ変数 dim xx,men ;キャラX座標(確定) dim yy,men ;キャラY座標(確定) dim n_xx,men ;キャラX座標(現在) dim n_yy,men ;キャラY座標(確定) dim kyra,men ;キャラコード sdim name,100,men ;キャラ名 sdim s,1042,8 ;data2送信配列変数 sdim getdata,1042,8 ;csv配列変数 sdim mese,1042,men ;メッセージ変数 dim maa,men ;MAP移動コード title "チャット" tcpopen soc,ADDR,PORT ;接続 if stat!0 : dialog "ソケットのopenに失敗",1 : end repeat tcpiscon soc if stat : break wait 1 loop if stat!1 : dialog "サーバーが落ちてます",1 : end repeat tcpfail soc ;サーバー監視 if stat : dialog "いっぱいです。" : end tcprecv data,0,100,soc ;MYdata 所得 if stat ! 0 :break wait 1 loop ma=0 int dd int data int yy int xx xx.data = tipx*6 yy.data = tipy*6 dd= 0 na ="" notesel map noteload "a.txt" notemax m repeat m noteget map1.cnt,cnt noteget map3.cnt,cnt loop notesel heya noteload "x.txt" notemax m repeat m noteget heya1.cnt,cnt noteget heya2.cnt,cnt noteget heya3.cnt,cnt noteget heya4.cnt,cnt loop heya2.97 ="6,15,0"             ;部屋の模様と通行コード書き換え heya2.125="5,28,10" heya3.97 ="6,15,0" heya3.125="5,28,11" heya4.97 ="6,15,0" heya4.125="5,28,12" *top ;ハンドルネーム登録 screen 0,400,400,1 pos 10,30 mes "ハンドルネームを入力:" pos 200,30 input na,100,30 pos 10,80 mes "キャラを選択:" objsize 10,10 pos 10,100 chkbox "",kban.0 gmode 2 gcopy 1,tipx*1,tipy*2,tipx,tipy pos 100,100 chkbox "",kban.1 gmode 2 gcopy 1,tipx*4,tipy*2,tipx,tipy pos 200,100 chkbox "",kban.2 gmode 2 gcopy 1,tipx*7,tipy*2,tipx,tipy pos 200,150 objsize 100,30 button "登録",*tou stop *tou if (kban.0+kban.1+kban.2)=0:pos 0,0:cls:color 240,0,0:mes "※キャラ選択してね":goto*top if (kban.0+kban.1+kban.2)>1:pos 0,0:cls:color 240,0,0:mes "※キャラは1つだけ選択してね":goto*top repeat 3 if kban.cnt = 1 :kkban = cnt loop if na = "" :pos 0,0:cls:color 240,0,0:mes "※登録名書いてね":goto *top ;初期座標送信(座標番号,MYID,キャラコード,mapコード,キャラ名,x座標,y座標) data2 = ""+dd+","+data+","+kkban+","+ma+","+na+","+xx.data+","+yy.data+"\n" tcpput data2,soc screen 0,600,540,1,0,0 title ""+na str kkk kkk = "" pos 0,390 mes "メッセージ入力" input kkk,300,30 ;チャットメッセージ入力 pos 0,440 mesbox mese,400,100,0 ;チャットメッセージ表示mesbox pos 320,410 button "送信",*mmm ;メインループ *main wait 1 redraw 0 gosub *get ;座標ルーチン gosub *allmap ;map表示ルーチン gosub *ke ;キー入力ルーチン redraw 1 goto *main *get str s tcpfail soc ;サーバー監視 if stat : dialog "接続が切断されました。" : end repeat tcpgetl s,1000,soc ;サーバーからのdata受信 if stat ! 0 :break wait 1 loop csvsel s csvstr getdata,s han = getdata.0 ;文字(1)か座標(0)か判断 int han if han=0:goto *get2:else: if han= 1:goto *mess ;文字(1)か座標(0)か判断 stop *get2 dd = 0 ss = getdata.1 ;myID kkban = getdata.2 ;キャラコード mapp = getdata.3 ;mapコード nname = getdata.4 ;キャラ名 ssx = getdata.5 ;キャラX座標 ssy = getdata.6 ;キャラY座標 int ss int kkban int ssx int ssy int mapp xx.ss = ssx yy.ss = ssy name.ss = nname kyra.ss = kkban maa.ss = mapp return *allmap csvsel map1 repeat m cntt = cnt csvstr map2,map1.cnt repeat komax if (cntt>((komax*cnt)-1))&(cntt <(komax*(cnt+1))) :pos 32*(cntt-(komax*cnt)),32*cnt:gmode 0,32,32:gcopy 4,32*map2.0,32*map2.1,32,32:else: loop loop await 1 color 255,255,255 boxf 32*12,0,500,500 repeat men if name.cnt = "":continue if maa.cnt ! maa.data :continue if (xx.data= 0)&(yy.data=0):end if kyra.cnt = 0 : kk = 1 if kyra.cnt = 1 : kk = 4 if kyra.cnt = 2 : kk = 7 pos xx.cnt,yy.cnt gmode 2,32,32 gcopy 1,32*kk,32*2,32,32 pos xx.cnt,yy.cnt-10 color 234,0,0 mes name.cnt pos 32*12,0 font "msゴシック",14 mes "★参加者★" pos 32*12,14*cnt color 0,0,0 mes "☆"+name.cnt wait 1 loop return ;キー入力処理 *ke int xxp int yyp int pp xxp = xx.data/32 yyp = (yy.data/32)*12 pp = xxp+yyp repeat onexit *ee stick key,,1 if key &128 :na = "":xx.data = 0:yy.data = 0 : gosub *ck:break if (key & 1):pp-=1:csvstr map2,map1.pp:if map2.2 = 1 :pp+=1:xx.data=xx.data: gosub *ck:break:else:xx.data = xx.data - 32: gosub *ck:break if (key & 2):if yyp<= 0 : pp = 0:else:pp-=12:csvstr map2,map1.pp:if map2.2 = 1 :pp+=12:yy.data=yy.data: gosub *ck:break:else:yy.data = yy.data - 32: gosub *ck:break if (key & 4):pp+=1:csvstr map2,map1.pp:if map2.2 = 1 :pp-=1:xx.data=xx.data: gosub *ck:break:else:xx.data = xx.data + 32: gosub *ck:break if (key & 8):pp+=12:csvstr map2,map1.pp:if map2.2 = 1 :pp-=12:yy.data=yy.data: gosub *ck:break:else:yy.data = yy.data + 32: gosub *ck:break if (cnt = 50) & ( key = 0) :gosub *ck:break tcpcount a,soc if a :break wait 1 loop return ;画面端チェック&通行コードチェック *ck csvstr map2,map1.pp:if map2.2 = 2 :dup map1,heya1 :xx.data = 32*5:yy.data = 32*9:ma = 1 csvstr map2,map1.pp:if map2.2 = 3 :dup map1,heya2 :xx.data = 32*5:yy.data = 32*9:ma = 2 csvstr map2,map1.pp:if map2.2 = 4 :dup map1,heya3 :xx.data = 32*5:yy.data = 32*9:ma = 3 csvstr map2,map1.pp:if map2.2 = 5 :dup map1,heya4 :xx.data = 32*5:yy.data = 32*9:ma = 4 csvstr map2,map1.pp:if map2.2 = 9 :dup map1,map3 :xx.data = 32*4:yy.data = 32*5:ma = 0 csvstr map2,map1.pp:if map2.2 = 10:dup map1,map3 :xx.data = 32*8:yy.data = 32*5:ma = 0 csvstr map2,map1.pp:if map2.2 = 11:dup map1,map3 :xx.data = 32*4:yy.data = 32*10:ma = 0 csvstr map2,map1.pp:if map2.2 = 12:dup map1,map3 :xx.data = 32*8:yy.data = 32*10:ma = 0 if xx.data < 0 : xx.data = 0 :else:xx.data = xx.data if yy.data < 0 : yy.data = 0 :else:yy.data = yy.data if xx.data > (32*11) : xx.data = 32*11 :else:xx.data = xx.data if yy.data > (32*11) : yy.data = 32*11 :else:yy.data = yy.data tcpfail soc ;サーバー監視 if stat : dialog "接続が切断されました。" : end data2 = ""+dd+","+data+","+kyra.data+","+ma+","+na+","+xx.data+","+yy.data+"\n" repeat tcpput data2,soc if stat = 0 :break wait 1 loop return ;文字送信(座標番号,MYID,キャラコード,mapコード,キャラ名,メッセージ) *mmm dd = "1" data2 = ""+dd+","+data+","+kyra.data+","+ma+","+na+","+kkk+"\n" repeat tcpput data2,soc if stat = 0 :break wait 1 loop objprm 0,"" goto *main ;チャットメッセージ受信 *mess mapy =getdata.3 id = getdata.4 ;キャラ名 me = getdata.5 ;キャラX座標 ;キャラY座標 if maa.data!mapy:goto *mess1 mese = ""+id+":"+me+"\n"+mese objprm 1,mese             ;ここら辺がわかりません(文字を送信した後、キャラを動かすとすべてのキャラがうごいてしまう) objsel 0 *mess1 dd = 0 wait 1 gosub *ck goto *get ;終了処理 *ee na = "" xx.data = 0 yy.data = 0 gosub *ck await 100 end