忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[48] [47] [46] [45] [44] [43] [42] [41] [40] [39] [38]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ひどい話です。
ぼく悪くないもん。

って言っても、公開した時点でバグ出した責任は引き受けないといけないと思う。


原因は、DXライブラリのGetRand() 関数。
けっこうみんな通る道みたい。
知ってたけどすっかり忘れてた。

C言語的にはというか、プログラマの常識的に、GetRand(10) と書けば、
0~9の10通り返すのがスジ。
気をまわして1~10までの10通り返す」ように作ることはあっても、
「0~10までの11通り返す」という作りは、どう考えてもありえない。

これが原因で player[10] の範囲外参照が発生し、連続領域にあった他の変数が
レイプされたというわけ。
ついついカラフルに強調してしまうほどの不満・怒りが出てしまったぜな。


そろそろマジックナンバー山盛りの糞プログラムになる兆候が見えつつあるが、
GetRand(9); の9がどこから来たのか自分でもわからなくなる。
GetRand(PLAYER_MAX - 1); とか書けるけど美しくないよなあ。

main.cpp

void GamePlay()
{



    // もし誰も動いてなければ、誰かひとりランダムで決めてボールに走らせる
    if(m>=10){
        player[GetRand(9)].GoLocate(CHASE_BALL,ball.getBx(),ball.getBy());
    }



プログラムは1行数字いっこ変更しただけなので、今回のアップロードは無しよん。


PR


忍者ブログ [PR]
カレンダー
11 2024/12 01
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター