class Board {
enum { BOARD_SIZE = 3 };
enum { BLANK, MARU, BATSU };
int array[BOARD_SIZE][BOARD_SIZE];
...
public:
bool CheckRow(int nRow, int n) { // 横判定
assert( nRow >= 0 || nRow < BOARD_SIZE );
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( array[nRow][i] != n ) return false;
}
return true;
}
bool CheckCol(int nCol, int n) { // 縦判定
assert( nCol >= 0 || nCol < BOARD_SIZE );
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( array[i][nCol] != n ) return false;
}
return true;
}
// 斜め判定:bDirがtrueなら左上→右下 そうでなければ 右上→左下
bool CheckNaname(bool bDir, int n) {
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( bDir ) {
if ( array[i][i] != n ) return false;
}
else {
if ( array[i][BOARD_SIZE - 1 - i] != n ) return false;
}
}
return true;
}
あー半角スペースだめだったかorz
class Board {
enum { BOARD_SIZE = 3 };
enum { BLANK, MARU, BATSU };
int array[BOARD_SIZE][BOARD_SIZE];
...
public:
bool CheckRow(int nRow, int n) { // 横判定
assert( nRow >= 0 || nRow < BOARD_SIZE );
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( array[nRow][i] != n ) return false;
}
return true;
}
bool CheckCol(int nCol, int n) { // 縦判定
assert( nCol >= 0 || nCol < BOARD_SIZE );
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( array[i][nCol] != n ) return false;
}
return true;
}
// 斜め判定:bDirがtrueなら左上→右下 そうでなければ 右上→左下
bool CheckNaname(bool bDir, int n) {
for ( int i=0 ; i<BOARD_SIZE ; i++ ) {
if ( bDir ) {
if ( array[i][i] != n ) return false;
}
else {
if ( array[i][BOARD_SIZE - 1 - i] != n ) return false;
}
}
return true;
}
// 全判定
bool CheckWinAll( int n ) {
int i;
for (i = 0; i < BOARD_SIZE; i++){
if ( CheckRow( i, n ) ) return true;
}
for (i = 0; i < BOARD_SIZE; i++){
if ( CheckCol( i, n ) ) return true;
}
if ( CheckNaname( true, n ) ) return true;
if ( CheckNaname( false, n ) ) return true;
return false;
}
// 判定&表示
bool Hantei( int n ) {
assert(n == MARU || n == BATSU);
if (CheckWinAll(n)) {
if (n == MARU) {
printf("「○」の勝ちです\n");
}
else {
printf("「×」の勝ちです\n");
}
return true;
}
return false;
}
};
おれだったら置いた石の左右上下斜め4方向だけ調べるようにするな
3ます3ますのこの場合はおなじ8回検査ってことになるけど
>>331 それもありやね。ま、計算量的に問題なければどっちでもいいと思う。
>>332 最後のHantei()関数は外部に書くほうが class Board が生きてくるな。
内部データクラスに出力まで混ぜて書くのは設計上まずげ。
333 :
デフォルトの名無しさん:2005/10/04(火) 13:14:21
何マスでの何目並べでも大丈夫なようにしてあげたよ
int BOARD_SIZE = 3;
int STONES_FOR_WIN = 3;
bool check_move_for_win(int x, int y, int n)
{
static int vectors[8][2] = {
{1, 0}, {1, 1}, {0, 1}, {1, -1}, {-1, 0}, {-1, -1}, {0, -1}, {-1, 1}
};
for(int i = 0; i < 8; i++)
{
int curx = x;
int cury = y;
for(int j = 2; ; j++)
{
curx += vectors[i][0];
cury += vectors[i][1];
if(curx < 0 || cury < 0) break;
if(curx >= BOARD_SIZE || cury >= BOARD_SIZE) break;
if(array[curx][cury] != n) break;
if(j >= STONES_FOR_WIN) return true; // win
}
}
return false; // continue
}
>>333 これのどこがリファクタリングなんだろうか・・・・・
>リファクタリング 【refactoring】. プログラムの振る舞いを変えることなくソースコードを変更すること。
おもいくそ違っとるがな >333
精進せえよ
void Func(void)
{
int i = 0;
while ( 1 ) {
if ( Judgement(i) > 0 ) {
Execute( i );
i++;
}
else {
break;
}
}
}
それをどうせえっちゅうねん
for(i=0; Judgement(i) > 0; ++i) Execute( i );
もうちょっと面白いネタ投下してくれ
printf("並び 1:昇順 2:降順\n");
scanf("%d", &k);
start = clock();
if(k==1){
for(i=0; i<n-1; i++){
for(j=i+1; j<n; j++){
if(z[i]>z[j]){ temp = z[j]; z[j] = z[i]; z[i] = temp; }
}
}
for(i=0; i<n; i++){ printf("%d\n", z[i]); }
}
else if(k==2){
for(i=0; i<n-1; i++){
for(j=i+1; j<n; j++){
if(z[i]<z[j]){ temp = z[j]; z[j] = z[i]; z[i] = temp; }
}
}
for(i=0; i<n; i++){ printf("%d\n", z[i]); }
}
finish = clock();
printf("処理時間→%lf\n", finish - start);
sort使えで終わるじゃんか・・・
サンプルコード
(1987年度「最悪なスタイル賞」受賞作品 by Spencer Hines)
#include <stdio.h>
#include <malloc.h>
main(togo,toog)
int togo;
char *toog[];
{char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79,
ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot:
if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott;
gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0)
goto oggt; goto ggot; ogog: if ( !ogot) goto gogo;
goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto
gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg;
goto gooo; gogo: exit( ottg); tggo: ootg= strlen(tgoo);
goto tgog; oogo: --ootg; goto togg; gooo: ++ogto; goto
oogo; gott: fclose( ogot); goto gtto; otgg: ogto= ogto +3;
goto ogtg; tgog: ootg-=4;goto togg; gtgo: ogto= tgoo;
goto tggo; ogoo: ootg-=3;goto gooo; goog: ogot= fopen(
toog[ ottg], "r"); goto ogog; ggto: ogto= tgoo; goto
ggot;}
obfuscatorかけたような感じだな
上司SEにスケジュールの遅れで怒られるのが嫌なのでとりあえず単体テストおkにしておいて
あとでこっそり修正するのもリファクタリングか?
振る舞いが変わっちゃうのはリファクタリングとは言わない
デバッキングもしくはリストラクチャリング
VS2005でVC++だけがリファクタの機能をハブられた件について
>>345 そんな言葉遊びされても現場は困ります。現実を見つめるように。
int main(int argc, char* argv[])
{
int a=10,b=7;
printf("割ってかける演算子、かけて割る演算子\n");
// 3で割ってから3でかける演算子
a/*=3;
// 5でかけてから5で割る演算子
b*/=9;
printf("a=%d b=%d\n",a,b);
getchar();
return 0;
}
コメント文にしか見えませんけど・・・
350 :
デフォルトの名無しさん:2006/02/13(月) 23:38:28
利ファクタリングしてる?
コントにしか見えませんけど・・・
もうややこしいこと言わんと全部作り直せや
#include <stdio.h>
int main(int, char *[])
{
int a=10, b=7;
printf("割ってかける演算子、かけて割る演算子\n");
// 3で割ってから3でかける演算子
a /= 3; a *= 3;
// 5でかけてから5で割る演算子
b *= 5; b /= 5;
printf("a=%d b=%d\n", a, b);
getchar();
return 0;
}
振る舞いは変わってないはずだが元のコードに意味がなさ過ぎるので
リファクタリングしようが何しようがやっぱり意味が無い。
大体コメントは5なのにコードは9ってどっちなんだよ。
いや中間全部コメントだけどさ…
アフォなコメントは悪
除去汁!
356 :
デフォルトの名無しさん:2006/06/21(水) 21:43:46
>>356 仕様が無けりゃリファクタリングなんてできないよ。
Classとか使うのも可。<358
さあどうだ?ウズウズするだろう?
暇だったら
>>358をリファクタリングしてくれ。
363 :
356:2006/06/22(木) 19:48:32
仕様は書くほどのものではないのですが、
何の変哲も無いB木です。
データの追加と削除のみができます。
俺の人生をリファクタリング
>>363 何かしらの問い合わせを持たないと、どんな実装でもテスト不能なわけだが。
B-Treeなんだし、提示されたコードが正しく動いているという前提ならリファクタリングは出来る。
ただ面白みがないので、俺はやらんが。
>358
とりあえずmain()だけ
{
//◆タイトル
title();
//◆ゲームシステム
int credit;//出力整数:所持メダル数
int game=0;//出力整数:総ゲーム回数
srand( (unsigned)time( NULL ) );
for(credit = 5; credit > 0;){// ↓ ↓ ↓ ↓ ↓ ここからループ ↓ ↓ ↓ ↓ ↓
int bet;//入力整数:賭けメダル数
if((bet = setBet(credit)) == 0) continue;
if(bet<0 && endCheck()) break;
credit -= bet;
//メダル投入完了・ゲーム開始
++game;
dispSlot(bet);
reelStop(bet);
credit += payCheck(bet);
//ゲーム終了
}// ↑ ↑ ↑ ↑ ↑ ループここまで ↑ ↑ ↑ ↑ ↑
//メダル切れもしくは任意の終了
endTitle(credit, game);
}
hos
ファウラーの「リファクタリング」を拾い読み
してふと思ったこと。「クラスの抽出」で多量のメソッド
とデータがある場合、とありますが、(定)量的な目安なんか
は議論されているのだろうか。
>>371 ナールほどね。こういう方面からのアプローチもあるね。
でもソフトウェアエンジニアリングプロパーでの議論
とかOO業界での論議とかは、ちょっと見当たらない。
知ってる人がいたら教えて。なんかベックの未邦訳
の論文でちらっと読んだ気がするんだけど。。。
記憶違いかも。
なんか、PMDっていうソースコードをチェックするツールに
「複雑すぎる、どないかせぇ!」ってよく怒られます。
>>370 なんか関係ありかなぁ
375 :
デフォルトの名無しさん:2007/04/12(木) 23:25:52