forの使い方について。。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yukemuri

forの使い方について。。

#1

投稿記事 by yukemuri » 17年前

こんにちは。
FORの基礎です。
for(i=1; i<=10;i++){
printf("*\n");
}
*を1づつ増やして表示、1づつ減らして表示、またピラミッド型にするにはどうしたら
よいでしょうか^^;

①はiの値が1づつ増える関数ですよね。。?

↓こんな感じで。


**
***


***
**



  *
 ***
*****

③は空白" "のforをつくってから、"*"のforですかね?

管理人

Re:forの使い方について。。

#2

投稿記事 by 管理人 » 17年前

↑クリックで画像が拡大します↑

こんにちは、yukemuriさん^^
プログラマーへの夢にむかってがんばっていらっしゃいますか?☆

ピラミッドを書く方法は私がパッと考えられる方法としては2通りあります。
・表示する平面をxy平面だと考えてxをyの関数として関数の不等式を作り、表示させる方法。
・星の数と空白の数は数列になっているからそれをそのままfor文に適応してやるやりかた。
まずは後者のやりかたで説明します。


ピラミッド型を作る時、星の数は
a0       ☆
a1      ☆☆☆
a2     ☆☆☆☆☆
a3    ☆☆☆☆☆☆☆ 
...
an ☆☆☆☆☆☆☆☆☆☆☆☆☆

数列
a0=1 , a1=3 , a2= 5 ,..., an=2*n+1
で表せます。一方星の左側の空白も同じく数列
a0=N-1 , a1=N-2 ,..., an=N-(n+1)
で表せます。この関数をそれぞれ利用すればよいのです。

それぞれの数の和は

空白は
N
Σ(N-(n+1))
n=0

星は
N
Σ(2*n+1)
n=0

です。

すなわち、それぞれの数列は

for(j=0;j<N-(n+1);j++)
  printf(" ");
for(j=0;j<2*n+1;j++)
  printf("*");

このようにかけますね?これは数列のそれぞれの項を表しています。
ですからこの項を0~nまで表示しようと思ったらこれをforでループさせたらいいわけです。つまり

for(n=0;n<N;n++){
  for(j=0;j<N-(n+1);j++)
    printf(" ");
  for(j=0;j<2*n+1;j++)
    printf("*");
  printf("\n");
}

このようになりますね。
これをまとめるとこのようになります。

#include <stdio.h>

void disp(int N){
  int n,j;
  for(n=0;n<N;n++){
    for(j=0;j<N-(n+1);j++)
      printf(" ");
    for(j=0;j<2*n+1;j++)
      printf("*");
    printf("\n");
  }
}

void main(void)
{
  disp(10);//表示させたい段数を入力
}

実行結果は写真をご覧下さい。例はdisp(30)で行った場合です。
プログラムはこちらです。

http://dixq.net/board/program/pira.cpp

以下続きます↓

管理人

Re:forの使い方について。。

#3

投稿記事 by 管理人 » 17年前

↑クリックで画像が拡大します↑

先ほどやりかたは2通りありますといいましたね。

・表示する平面をxy平面だと考えてxをyの関数として関数の不等式を作り、表示させる方法。
・星の数と空白の数は数列になっているからそれをそのままfor文に適応してやるやりかた。

今度は前者でやってみましょう。
この方法で行えば、表現できるのはピラミッドだけではありません。
アルファベットも表示できます。
今回は表現が簡単な「X」「K」「O」でやってみます。
実行結果は写真の通りです。
アルファベットのように見えますね。
Xという文字を見てください。
これをxy平面の2つの1次関数の組み合わせだと見る事が出来ますね。Nをy切片だとすると
y=x と
y=-x+N の
2つの関数が交差している様子がわかります。
この時を条件として星を表示してやればいいわけです。
今回はわかりやすく、xの幅N、yの幅Nの正方形で考えます。
条件は

if(y==x || y==-x+N)
  printf("*");
else
  printf(" ");

このようにかけますね。x、yそれぞれを0~Nまで考えるわけですから2重ループにして

void X(int N){
  int x,y;
  for(y=0;y<=N;y++){
    for(x=0;x<=N;x++){
      if(y==x || y==-x+N)
        printf("*");
      else
        printf(" ");
    }
    printf("\n");
  }
}

このようにかけます。
ではKは
x=0
y=1/2*x + N/2
y=-1/2*x + N/2
の直線の集まりだと考える事ができます。
すなわちKの関数は

void K(int N){
  int x,y;
  for(y=0;y<=N;y++){
    for(x=0;x<=N;x++){
      if(y==int(0.5*(double)x+(double)N*0.5) || x==0 || y==int(-0.5*(double)x+(double)N*0.5))
        printf("*");
      else
        printf(" ");
    }
    printf("\n");
  }
}

このように。途中doubleで計算しているところがあるので少しみにくいですが。
次にOは円の公式(半径r,中心(a,b))
(x-a)^2+(y-b)^2=r^2
より、x軸、y軸に接するように考えると
(x-N/2)^2+(y-N/2)^2=r^2
このようにかけますね。
これをyイコールの式に変形して条件マッチさせたらいいわけですから

void O(int N){
  int x,y; double r;
  r=0.5*(double)N;
  for(y=0;y<=N;y++){
    for(x=0;x<=N;x++){
      if(y==int(sqrt(r*r-((double)x-r)*((double)x-r))+r) || y==int(-1.0*sqrt(r*r-((double)x-r)*((double)x-r))+r))
        printf("*");
      else
        printf(" ");
    }
    printf("\n");
  }
}

このようにかけるわけです。
これらをトータルしてみてみましょう。

#include <stdio.h>
#include <math.h>

void X(int N){
  int x,y;
  for(y=0;y<=N;y++){
    for(x=0;x<=N;x++){
      if(y==x || y==-x+N)
        printf("*");
      else
        printf(" ");
    }
    printf("\n");
  }
}
void K(int N){
  int x,y;
  for(y=0;y<=N;y++){
    for(x=0;x<=N;x++){
      if(y==int(0.5*(double)x+(double)N*0.5) || x==0 || y==int(-0.5*(double)x+(double)N*0.5))
        printf("*");
      else
        printf(" ");
    }
    printf("\n");
  }
}
void O(int N){
  int x,y; double r;
  r=0.5*(double)N;
  for(y=0;y<=N;y++){
    for(x=0;x<=N;x++){
      if(y==int(sqrt(r*r-((double)x-r)*((double)x-r))+r) || y==int(-1.0*sqrt(r*r-((double)x-r)*((double)x-r))+r))
        printf("*");
      else
        printf(" ");
    }
    printf("\n");
  }
}
void main(void)
{
  X(20);//表示させたい段数を引数に
  printf("\n");
  K(20);
  printf("\n");
  O(20);
}

このプログラムをこちらに上げておきます。

http://dixq.net/board/program/char.cpp

基本的に方程式で表せる線で出来ている文字なら何でも書く事が出来ます。
定義域をつけてやれば漢字だって書けると思いますよ。

ただ「ぬ」とかを曲線も厳密に書けっていわれたら難しいですが^^;

ご自分でも色々やって考えてみてください。

ちなみに一番簡単な文字はIかLです。

以下続きます↓

管理人

Re:forの使い方について。。

#4

投稿記事 by 管理人 » 17年前

↑クリックで画像が拡大します↑

意外な例をもう一つ。
簡単そうに見えて実はとても難しいのが「☆」なんです。
☆は書くのに当時とても苦労しました。
大学1年の時、☆って書いたらどんなプログラムになるんだろう?と疑問に思ったんことがあるんで
書いてみた事があります。
☆って直線のあつまりだから簡単そうに思えますが
では実際どんな方程式の集まりか?といわれたらぱっと答えにくいですよね。

まず☆に外接する円を描きます。
その円のπ/2をθ=0°として2*π/5ずつ中心から直線を描き、その直線と円の交点をそれぞれ結んだ直線の集まりが
☆なんです。
しかも塗りつぶそうと思ったら不等式を作って定義域を作って・・、かなり複雑になります。

☆を描くプログラムを示します。
昔に書いたプログラムなんでおかしい所沢山ありますけどそこはスルーで^^;

http://dixq.net/board/program/hoshi.c
(文字化けする時はメニューの「表示」>「エンコード」>「日本語(自動選択)」を指定してください)
もし参考になれば幸いです。


#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int hantei( int y, int x, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double x5, double y5, double y8, double y9, int r ){
  if(y1 < y && y < y2)
    if( y<(y4-y2)*(x-x2)/(x4-x2)+y2 && y<(y5-y2)*(x-x2)/(x5-x2)+y2)
      return 1;
  if(y9 < y && y <= y1)
   if(y>(y4-y1)*(x-x1)/(x4-x1)+y1 && y>(y5-y3)*(x-x3)/(x5-x3)+y3)
   return 1;
  if(y8 < y && y < y9)
    if(y<(y4-y2)*(x-x2)/(x4-x2)+y2 && y<(y5-y2)*(x-x2)/(x5-x2)+y2)
    return 1;  
  if(y5 < y && y < y8)
    if(y>(y4-y1)*(x-x1)/(x4-x1)+y1 && y<(y4-y2)*(x-x2)/(x4-x2)+y2 || y < (y5-y2)*(x-x2)/(x5-x2)+y2 && y > (y5-y3)*(x-x3)/(x5-x3)+y3)
    return 1;
  if(y < y5 && y > y5-1){
    printf("表示した星型の外接円の直径は %d です。\n", r*2);
    printf("星型の外接円との交点はそれぞれ\n");
    printf("(x1,y1) = ( %.3f, %.3f)",x1,y1);printf("  (x2,y2) = ( %f.3, %.3f)\n",x2,y2);
    printf("(x3,y3) = ( %.3f, %.3f)",x3,y3);printf("  (x4,y4) = ( %.3f, %.3f)\n",x4,y4);
    printf("(x5,y5) = ( %.3f, %.3f)\n",x5,y5);
    exit (9);}
else
    return 0;
}
int keisan(int i, int j, int r){
  double pai=3.1415926;
  double x1,x2,x3,x4,x5,x6,x7,x8,x9,y1,y2,y3,y4,y5,y6,y7,y8,y9;
  double a1,b1,c1,d1,a2,b2,c2,d2;
  x1=r*cos(pai/10);
  y1=r*sin(pai/10);
  x2=0;
  y2=r;
  x3=-r*cos(pai/10);
  y3=r*sin(pai/10);
  x4=-r*cos(pai*3/10);
  y4=-r*cos(pai*3/10);
  x5=r*cos(pai*3/10);
  y5=-r*cos(pai*3/10);
  a1=(y4-y1) / (x4-x1);
  b1=(-(y4-y1)*x1 / (x4-x1)) + y1;
  c1=(y5-y2) / (x5-x2);
  d1=(-(y5-y2)*x2 / (x5-x2)) + y2;
  a2=(y4-y1) / (x4-x1);
  b2=(-(y4-y1)*x1 / (x4-x1)) + y1;
  c2=(y5-y3) / (x5-x3);
  d2=(-(y5-y3)*x3 / (x5-x3)) + y3;
  y8=(a1/(a1-c1))*(d1-c1*b1/a1);
  y9=(a2/(a2-c2))*(d2-c2*b2/a2);
  return(hantei(i,j,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,y8,y9,r));
}
int main(){
  int i, j, r;
  printf("星の大きさを入力してください。この数値は星型に外接する円の半径となります。\n");
  scanf("%d", &r);
  for( i = r ; i >= -r ; i-- ){
    for( j = r ; j >= -r ; j-- ){
      if( keisan( i, j, r ) == 1 )
        printf("#");
      else if( keisan( i, j, r ) == 0)
        printf(" ");
      else if( keisan( i, j, r ) == 2){
        exit (9);
     }
    }
  printf("\n");
  }
  return (0);
}

管理人

Re:forの使い方について。。

#5

投稿記事 by 管理人 » 17年前

なんで☆が長細いかというと半角で表現しているからで、
半角は横と縦の比率が1:2ですから縦長になります。
全角で表現すればきちんと星が表示されます。

管理人

Re:forの使い方について。。

#6

投稿記事 by 管理人 » 17年前

↑クリックで画像が拡大します↑

yukemuri

Re:forの使い方について。。

#7

投稿記事 by yukemuri » 17年前

管理人さん こんばんわ♪

うおぉ!すごいですね!
まだパッとみた感じで、なにがどうなっているか、見ていませんが
なんか凄いですネ!
管理人さんが記述したコードは答えとして保存しておきます。
forは結構、奥深いですね。やはり^^;
今週末はforを特訓しようと思ってます。。
forの基礎に戻ってみると結構勘違いしてたり、
2重ループではどのような働きをするのか等、
ジックリ私の低スペックな頭で考えてみようかなと。。^^;

今、VC++やってますが、ビジュアルで面白いですね。
中身はサラッとで、先生が書く簡単なコードを
なぞり動作させてるだけで相変わらず中身はサッパリですが、
ボタンの操作作成から、そのボタンのアクションの
関数や定義を追加で、その定義に沿った操作できるってのは
やっぱ新鮮味がありなかなかです。
ただクラスウィザード等の使用でクラスを作成する際、
当然、自動で作成されますから、中身(C++)をわかってないと
いじれませんね^^;
例えて、
DreamWeaverでビジュアルの部分を作成をして、コードは自動作成される概念と一緒ですかね。あとは、html知ってれば、カスタムできますしね。そのC++バージョンですかね。

壁が多く、私の8ビットの頭ではすぐにオーバーフロー気味な毎日ですが、年月かけてやっていこうと思ってます^^;
ご回答有難う御座いましたm(_ _)m

また、路頭に迷ったら質問させて頂きます。
ってか、路頭に迷いっぱなしですがwwね。

管理人

Re:forの使い方について。。

#8

投稿記事 by 管理人 » 17年前

あんまり回答が長すぎても読むのがだるくなりますね、ごめんなさいm(_ _)m
私が昔悩んでクリアした問題をされてらっしゃるかと思うと、なんか懐かしくなってダラダラと書きました。
8ビットの頭ですか。ビットシフトで2進数の計算が早そうですねw
for文は奥が深いですよ~、入門時、人の書いたfor文を読むのは特に苦労しました。
二重ループとか頭こんがらがりますからねぇ。
どのようにforを書くかは、色んな問題見て、人の書いたプログラムを見て
書き方覚えるしかないですよ。
プログラムっていかに自分で応用を利かすかですからね。
前の投稿の四捨五入にしてもそうですね。
「四捨五入をする」という関数はありません(と思います)。
しかし

・doubleをintに変換すると小数点がとれる

という事と、

・0.5をたして小数点を取れば四捨五入した事になる

という事を組み合わせて四捨五入のプログラムを作ります。
べつに私も誰かから四捨五入のやり方を習ったわけでも授業でやったわけでもそういう手順表をみたわけでもありません。
☆の図形を描くプログラム。そのような問題がサイトにのっていたわけでも解法をみたわけでもありません。

プログラムって自分の知識の範囲の関数をいかに組み合わせて答えにつなげるか

なんですよね。まさに数学です。25*84は何になるか、全く同じ問題は学校で習いませんけど出来ますよね。
それはアルゴリズムを理解しており、かつ沢山の問題集をしたから習得できたもの。
プログラムも色んな問題や回答を見て、人の書いたプログラムを見て習得する必要があります。
色んなプログラムに出会ってください。
頑張ってくださいね。

yukemuri

Re:forの使い方について。。

#9

投稿記事 by yukemuri » 17年前

こ、こんばんわ^^;
路頭に迷いました・・・。
#include <stdio.h>

int main(){
  for(int i=1;i<=10;i++){
          for(int j=1;j<=i;j++){
          printf("*");
          }
     printf("\n");
     }
return 0;
}
1(重)ループだと、素直にトレースできますが、
2重になると、途中でトレースが分からなくなりましたOrz..
上から順に、
(i=1)<=(i=10)→true→下へ→
(j=1)<=(i=1)→true→*1個表示→j=2→
ここでなんですが、、
*を1個表示後、jがインクリメントされjの値が2になりますよね。
で、まだjのスコープ内に居ますから
for(int j=1;………に行く(ってか、ループ中)わけですよね。。
このfor(int j=1;………に入る際、すでに先程j=2になってますが、
for(int j=1によって初期化され jは2から1になっちゃうんでしたっけ!?

もしそうだとすると、
ん~~、上のトレースからまず*が1個表示されました。
で、jが2になったけど、1に初期化されると
j=1で (j=1)<=(i=1)→true
*1個表示→jインクリメントでjは2になり、、、
でも、j=1に初期化され (j=1)<=(i=1)、、
あれ。。?^^;
分かんないです。。Orz

yukemuri

補足

#10

投稿記事 by yukemuri » 17年前

管理人さん♪

先程、アチラのコメント観ました。^^;
まず、管理人さんの立場からすると不特定多数の方を対象に
その労力たるや相当なものだと思います。

以下、あくまで私の主観的な考えをお伝えしますネ☆
演習での習得や実践での習得は、にわかに習得出来る者ではありません。(どんな事でもそうです仕事でもゲームでも学習でも)

私の現在の置かれた状況はご存知の通り、短期での習得。
とは言ってもそれは習得ではありません。
残念ながら、ただの経過に過ぎません。
限られた時間と(とりあえずその)期間で、
まず悩みが出た際は自分で考え、それでも分からない場合は
人に訊く。また考え、また聞く(私の場合∞ループかと思うくらいw)

管理人さんの回答やアドバイスは質問した事以上のお答えで
大変勉強になり、また励みにもなります♪
管理人さん自身が苦労して習得(&中)できたからこそ、
人に伝授出来るし、相手の気持ちすら把握出来るかも知れません。
普通であれば己が苦労して手に入れたものは、簡単に人には教えたくはないでしょう(あ、これは私の主観ね^^;)
↑技術者には特に多いですヨ
しかし、管理人さんの場合、この掲示版のカキコに回答するに比例して更に自分自身の再確認(常に勉強)もされている所は、例えば「常に自分本位な考え」の方だと、これはなかなか実行出来ないもんです。

私は限られた(まぁ、期間終了後もC学習ヤメル気サラサラないけどネ♪ただ仕事の束縛は出てくるカナ)時間経過の中で良い意味での利用を自己で考えてます。

言い方悪いですが、管理人さんの回答やヒントは私にとって「最終兵器」なんです☆☆
目の前に訊く人が居れば、その場で聞けますがネット上だとどうしても回答の戻りがランダムになってしまいます(当然ですね)。

なので、アチラでは相当たる不特定多数のアドバイザーがいるので、すぐ回答が誰かしらがしてくれます(とりあえずって感じの回答ばっかですがネ)

何も考えない時間が勿体無い事を前提として↓
例えば「コレわkんねぇ!」=>「管理人さんに聞こう!」と思った際、私が質問して「15分以内に回答下さい!」って言ったら、それは相手にとって相当な束縛になってしまい当然相手の状況を考えないで失礼な事ですよネ。

そんな主観的な考えで利用してる経緯なんですヨ☆

今後ともご教示ヨロシクです☆

※最後に(オチw)
いつかは同鯖で[一緒にやりませんか?]で、管理人さんに/tellしたいんだけど…ww
/tell待ち待機、結構苦手(時間勿体ない)ので、オートリーダー系なんですw

(現在GMコール中)現在for2重ループでMBフリーズ(古代)中....w

管理人

Re:補足

#11

投稿記事 by 管理人 » 17年前

最後のオチに答えましょうw
FFですか懐かしいです。
新しいジョブとか、一緒にNPCで戦えるシステムとかやってみたいとは思いますよ。
でもFFをやった事は後悔はしていないつもりですが、
やはりやりすぎました。
FF11をしたことで自分の頭の中でゲームにたいして発想が豊かになりました。
それは利となる事でした。
しかしあれほどまでに時間をかけてしまった事はやはり後悔しています。
何もあそこまで時間をついやすことなかったって。
あれだけの時間VCやDirect系の勉強をしてたらどんなにスキルアップできたかと。
いくらFFをやっても、スクウェアがなくなってしまったらもう自分の手元には何も残りません。
私達はスクウェアのサーバーの0と1の信号を書き換える事に必至になってリアルを捨ててまでそんな事をして
果たして意味があるのかと・・。

私をよくボウリングやカラオケなどそとに遊びにつれていってくれる友達がいました。
FFを始めてから自然とその友達の誘いを断るようになっていきました。
友達の誘いも断り、いつも家で、ゲーム。学校にいっても真っ先に帰って家でゲームする。
そんな生活をした事にすごく嫌気がさしました。
久しぶりに友達が外に遊びに連れて行ってくれました。
すごく楽しくて、自分は何故こんな生活をとったんだと後悔しました。
FFってなかなかやめられないですよね。
完全にやめることができたのはその友達のおかげだと思っています。
FFをやってよかった事はゲームに対する発想を豊かにしてくれた事だけです。
これ以上FFをやってもその唯一の利益はこれ以上得る事が出来ません。
ですから二度とFFはやらないと決めました。
ゲームをする時間があるなら院での研究、Direct系の勉強をしたいなと思います。
FFがホントに楽しいと思ったのは最初の半年間ですね。
もうレベル75になった頃は自分がマシンになったようにレベル上げしてました。
もうFFのドロドロした世界には戻りたくありません。

せっかく誘っていただいたのにごめんなさいね。
確かに楽しい世界ではあると思いますがとても危険すぎます。私には。
リアルをおびやかすとても危険なものだという認識しか今はもう出来ません・・。

(FFをとても満喫されてらっしゃるかたでこの文章をよんだことによって気分を害された方がいらっしゃいましたらお詫びしますm(_ _)m)

yukemuri

Re:補足

#12

投稿記事 by yukemuri » 17年前

おぉ、ナルホド。理由は分かりました^^
そうなんですよネ。FFを辞められる方達の大半がそういう事を理由に辞められる事が多いようです。
やった人にしか味わえない喜びもあり、逆にやった人にしか分からない時間の束縛も有りますからねぇ。アレはw

特にFFに至っては現実とリアルをしっかりと管理しないと、奈落の底(廃人)に間違いなく落ちますからねぇ。
軽い気持ちでコメントしたつもりが返って管理人さんの昔のトラウマを思い出させてしまい申し訳ない。。

人によって価値観は違うんで物事の優先順位を決め、やる分にはなんら問題無いと私は思ってます。

ご存知のようにヴァーチャルな世界でも高レベル=すごい人(偉い人)みたいな傾向あります。
すごい人と言われ喜びを感じている輩に限ってその殆どがリアル大した事ないです…。だいたい考え方がお子様♪
迷いの名所ユタンガでMAP無くて迷っていたとするとわざわざ戻って助けてくれる人も居れば、自分さえ良ければっってさっさと行くのも居るしねw そういう所ってMMOって面白いナと。現実と一緒で色々な人がいて。

廃人装備しててヒーローになってても所詮、ヴァーチャルな世界だけでの事。
家庭や仕事を持ちながらプレイしている人とかと妙にチャットで同調したりして、私は楽しんでプレイしてました♪
やってれば誰でも上がります(受身じゃ無い限り♪)
見かけだけ高レベルになっても周囲の強力なきゃ、所詮1人じゃ、なんも出来んし。

>「スクウェアのサーバーの0と1の信号を書き換える事に必至になってリアルを捨ててまでそんな事をして果たして意味があるのかと・・」
その通りだと私も思ってます。
皆、スクエアエニックスの術中に嵌っている事承知の上、ある種病気させて会社が売上を上げる原理ですからね。

リアルな世界でもヴァーチャルな世界でも一緒ですが、皆自分が人の上に行きたいという心理がありますから、更に嵌ると…。

えと、上から言うような言い方で恐縮なんですが管理人さんはまだお若いですしFFをお辞めになった事は自分にとって最善である事に気づいた事自体、ホント良かったですネ☆
Cで例えて言えば管理人さんはLv75、私はLv1です。ロンフォールでウロウロしているミミズ狩り状態

まぁ、私はいずれFFは復活させますが、前ほどは出来ないでしょう。前のLv75合成99のキャラ捨てましたし、Lv1からだと時間掛かるし(アカウントを買うってのもアリだけどねぇ)プログラマー関連の知識が身についてくればそっちの方が楽しくなってくるカモね。
ヴァーチャルな世界でレベル上げても「金」にならんけど、リアルでのレベル上げは「金」になるからね☆
そこが一番重要だったり…。

管理人

Re:補足

#13

投稿記事 by 管理人 » 17年前

まず、突っ込み。

「FFの世界に戻るんかい!」

え、戻るんですか?キャラ捨てたっていうのは売ったんですか?
もし消しただけだったら1回だけ復活できるとおもいますけど・・。
RMTしだすときりないですよね。クラクラとか30万円だしてほしいのかと。
以前250万円でアカウント取引されていました。ほとんどオール75で麒麟の袖かなんかしりませんけどEXほとんどもっていたようで。
250万もあるんだったらフェアレディかなんか買うっちゅうねん・・。
外部ツールは使用するなと規約にありましたが、別に自分で作ったのはツールとは呼ばないだとうと
意味のわからない勝手な解釈で自動合成プログラム作ったり自動レベル上げプログラム作ったりして遊んでました^^;
FFってすごくうまく作られてるんで、レベル上げは無理でしたが素材狩り位は出来ました。
でも不具合があったりしたら怪しまれるし、結局ずっとパソコンの前で監視しながらだったんで
あまり意味ありませんでしたけどね。
敵を倒して、次の敵を探す時、テンキーの0を連続で押すようにプログラムされているんですけど、
敵を見つけたとき万一戦う状態に移行しなかったら永遠にそこで0を連打→(はたからみたら首振り人形)になってしまうので
結局ずっと見てました^^;
もちろん人のいないところでしか使ってませんけど言い訳になりませんね。
初めてそういうプログラムが書けるようになったときだったんで嬉しくて。


>Cで例えて言えば管理人さんはLv75、私はLv1です。

いや、せいぜいレベル7ですよ。やっと前衛の新しい装備が出来るとしごろ。でも砂漠に行ったら死ぬ。
ちょうどいいですねw

私がやめた理由はもう一つあって、こんな話があります。
昔オルデでアーチャリングとってたことがあります。
ライバルが8人位で単純に1人1回ずつ取れたとしても9回に1度。つまり1時間に1回位しかとれなかったんですよ。
その時は2時間近く取れなくて、(トータル8時間くらいいたんですが)2時間たってやっと取れたんです!
やった~!と思って狩っていた時、WSのマクロ出そうと思って間違って戦闘終了のマクロ押してしまって。
敵が黄色になってしまいました。
そのとたん見ていたライバルがめっちゃ弱い射撃でプツっと1発。
敵の色は赤で戦闘できないのに敵はこっちをむいて攻撃している。
私は攻撃する事もできずただ攻撃されているのを見ているだけでした。
それをみた(射撃をした)ライバルが「/laugh」の連打。
ホントいやになりました。

なんでこんな意味の無い事をしてるんだ・・遊ぶって楽しいからすることじゃナインかって。
廃人が廃人装備して「ドヤ!」みたいな格好で歩いている姿。
外人はバカ、初心者はバカとみくだしている姿。

「お前リアルで見下される方ちゃうんかい!」

そうつっこみたかったですね。
1日18時間ゲームしていると自慢していましたが何の自慢になっていることやら・・。
もうゲームしかしない生活・・そんなのリアルの付き合いもくそもあったもんじゃないですよね。
友達もいず、仕事もせず、学校にもいかず、彼女もおらず、ただひたすら毎日ゲームをしているやつが
えらいのか?!
FFを始めたばっかりの時は楽しかった・・・。ホントに楽しかった・・。
LSのみんなで冒険いったり、みんなどこに何があるかわからなくてドキドキしながら冒険した・・。
レベル上げもみんなでキャッキャいいながら・・。

そんな事はもうレベル75になったとき全く縁の無い話になっていました・・。
やめた当時楽しかった思い出はありません・・↓↓

yukemuri

Re:補足

#14

投稿記事 by yukemuri » 17年前

えぇ、戻りますよww
FFの話ってキリが無いですよね。
しかしながら管理人さんに於いては、嫌な思い出を思い出させてしまい、ゴメンなさい(_ _)

オルデでのリング取り…私も似たような経験ありますヨ。
PTでのNM狩なら幾分、怒りも分散されるけど、オルデの場合はソロ基本だもんネ。。
管理人さんのその時の気持ち心底分かります…。
ホント精神的に凹むよね…NM狩でそういう事あると…。
目の前にリアルでいればド突く事出来るけど、仮想現実を
いい事に粋がってる精神的におこちゃまなプレーヤーは随所に見られますね。GM呼んでも形だけで所詮、アルバイトくんだしね^^;GMはw
中国では20代の若者がMMO依存症で社会復帰出来ない社会現象になっているそうで、更正施設があるそうですね…。麻薬みたいなモンです。

いづれにしても、そういうアホはほっとくかなw私の場合は。
ちなみに、人間の心理って「アホ」って言われて、ムッと来て「馬鹿」って返すと堂々巡りの低脳なループに入り互いに時間の無駄なので、私の場合はもしそうされた時は/c→/say or /tellで「凄い装備デスネ」みたいに相手を油断(?モード)させつつ、何か返事(相手がこちらの言う事を聞いている事を確認且つ、フィルターが掛かってない事を確認した後、/say or /tell でトドメの一発発言(シの不意玉的にw)で立ち去る感じでしたw こちらがフィルター掛けた事をお伝えしたち。/goodbye
まぁ、しょっちゅうあるもんじゃないけどねw
勘違いしてる輩は自分が痛い目みないと分からんからw

でも私はいずれ復活しますヨ。ただ、やりたいから。それだけです♪
前キャラは1回復活サービスしてるんで完全削除(ちなみにアカウントは売ってません)してるのでもう在りません。
250万とかクラクラで30万とか出すのってまず有り得ないね。
1万でも高いかなw(じゃ、買えないな^^;
250万ですか…。売ったその人は今頃、ろくな生活をしてないでしょう。あんなもんに250万かい!w
例え1万でもおいおいって感じ…。

まぁ廃人クラスは彼らのとても小さな哲学があるのでしょう。
世間にも認められず、非現実世界でしか自分の存在をアピール出来ない人々です(全ての方とは限りませんが)寂しい人間だからこそ人に認められたくて架空のレア装備やレベルで自分の存在を認められたいわけよ。そんで非現実で人を見下すと…w 悲しいよね。

やや話が飛躍しすぎました。ご了承下さいませ☆

PS:でもFFってそんな嫌な事ばっかりじゃない。ごくまれにアホな奴もいるけど、リアルでもいるしねw
昔、関西弁ローマ字でチャットする謎のフランス人いたり、結構、妙な出会いもあったりで楽しかったです☆

管理人

Re:補足

#15

投稿記事 by 管理人 » 17年前

ちょうど大学院費が250万ですから、そんなもんにお金払えるんなら私の院費代わりにはらってほしいですねm(_ _)m
友達なんて900万奨学金で借りて、働いて返すそうです。。。
250万でも大金ですが、900万をみると少なく感じますね・・。
900万なんて1ヶ月に3万ずつ返しても30年ローンですね。
家のローンとか車のローン重なったら泣きそう・・。

大学費は親が出してくれたんで、時間の有り難味がありませんでした。
しかし自分で出さなければならない費用で保っている時間を過ごしていれば少しでも無駄の無い時間を過ごそうとするものでしょう。
有意義な院生活を送ろうと思います。

yukemuriさんもFFの世界に戻られるのでしたらリアルの生活に支障の無い程度に頑張ってください。

管理人

Re:補足

#16

投稿記事 by 管理人 » 17年前

ところでyukemuriさん、
アトルガンの音楽吸出しってどうやるか知りません?
プロマシアまでなら吸出し方法知ってるんですが
なんかアトルガンだけ出来ないんですよ。

アトルガンも音楽とテクスチャ画像吸い出すためにインストしたんですけど
アトルガンだけなぜか出来なく・・。

yukemuri

Re:補足

#17

投稿記事 by yukemuri » 17年前

そうだよね~。お金や時間の有り難さって自分でやりくりして初めて分かるもんですもんネ。
てか、管理人さん院1年生になったんですね☆
遅ればせながら「おめでとうございます!」m(_ _)m
管理人さんの事だから言われなくとも充実した日々を送られる事とおもいます。頑張って下さいね!

さて、
アトルガンのデータ吸出しについて…
恐らくこのカキコをお読みの頃は既に解決されている事かも
しれませんが、「お力に成れなくてスマソ」です…。
私はツールの類を一切使用しない(皮肉じゃないので誤解なくw)ので吸収出来ない原因分かりません。
私もネットで色々と調べてみたけどその収穫は御座いませんでした…。
逆に訊きたいのですがdatデータかなんかを落とすんですか?

管理人

Re:補足

#18

投稿記事 by 管理人 » 17年前

いや・・院生になるのは4月からです^^;

データ吸出しについて、FFの音楽データは、
独自のファイル[.bgw]というファイル形式になっていますから、
ソフトでwavに変換します。
すると聞けるようになります。
何のファイルか判らない時はバイナリエディタでファイルの中身をみると全ての信号が16進数で表示されますから、
そのデータからヘッダ情報を見れば何のファイル形式かわかります。
ゲームを配布する時はよくやりますが、ファイルが何のファイルかわからないように拡張子を変更します。
またはヘッダ情報を1ビット変更します。
するとダブルクリックじゃ開けなくなります。
しかし実質的なデータはwavならwavのままなんで、中身をみてみたらいいのです。
で、そんなこんなでプロマシアまでは(プロマシアのラスト以前)までは簡単にwavに変換できていたんです。
しかし、アトルガンからはどう考えても再生できなくて・・。
何か暗号化でもしてあるんでしょうかね。
2チャンとかでもみんな出来なくて困ってるみたいでした。
1人か2人「俺はできたぜ、教えないけどな」みたいな書き込みがありましたけど、ホントかどうかわかりません。

例えばデータが○○ビットごとにあるビットだけ変更するような事がしてあれば、もうお手上げですもんね。
しかしどんなに複雑にデータが変更してあろうとも自分自身では複合化できるわけですから、ファイルを変更すれば全ての音楽はきけました。

例えば

C:\Program Files\PlayOnline\SQUARE\FINAL FANTASY XI\sound4\win\music\data

にアトルガンの音楽データがはいっています。
music179.bgw
のファイルは最初に流れるマーチの曲です。
このファイルと、ラスボスの音楽をいれかえれば、最初のマーチの時に書き換えた音楽が聴けるわけです。

グラフィック差し替えもこうやって遊びます。
例えば
足の白AFのデータを、戦士AF、のグラフィックデータに変更すると、
上着は白AF、足は戦士AFというような事を同時にする事もできます。
グラフィックデータを作ってる人もいますから、
天使のキャラ、女子高生の服、あやしいグラフィックにでも何でも自由自在に変更できてしまいます・・。

または、自分がその場所でどこにいけてどこにいけないのか、すなわち、建物があれば建物に自分のキャラがぶつかった時
いけないとか、建物がなければいけるとか
これは自分のパソコンで計算しています。
ですから自分のパソコンの計算方法をかえてやれば、普段いけないところにもいけます。
だからユタンガのマップデータをルテのマップデータに変更すれば、ぐにゃぐにゃした道もつきぬけてまっすぐすすめます。
まわりからみたら壁にめりこんできえていくように見えるんで、
あまり使わない方がいいですけどね。
データに不具合があって、一生壁からでられなくなっても
不正をした不具合ですからサポートしてくれないそうです。
まぁこの辺は踏み込まない方がいい領域ですね・・。
ツール使う事はいけないとかよくいいますけど、自分で手作業でできるからツールじゃないんだけど・・
とか独り言言ってます。
そういう事やってるってフレやLSの人が知ったら絶対いい顔はしませんからしない方がいいですハイ

管理人

Re:補足

#19

投稿記事 by 管理人 » 17年前

あ、、最後のオチにだけ答えて
http://www.play21.jp/board/formz.cgi?ac ... ln=258#235
こちらの回答を書くのを忘れていました・・。
すみません。

2重ループについて、もうお分かりになりました?
じゃ、まずi,jをつかって
*
**
***
を作るプログラムから。
for(i=0;i<3;i++){
  for(j=0;j<=i;j++)
    printf("*");
  printf("\n");
}
このように書く事で
*
**
***
が表示できます。
まず、i=0でループが始まります。
続いてj=0で二重ループが始まります。
二重ループ内でjはi以下の時続ける事が出来ます。
二重ループの1回目、i=jですから以下という条件にマッチし、1回だけ*がプリントされます。
1回分の処理が終わったんでjが1つカウントアップします。
この時、jのfor文はj=1,i=0ですからjはi以下という条件にマッチせず、breakします。ブレイクすると\nがプリントされ、改行されます。

iのfor文の最初に戻り、iがカウントアップされ、i=1になります。
続いてj=0で二重ループが始まります。
二重ループ内でjはi以下の時続ける事が出来ます。
二重ループの1回目、i=1,j=0ですからjはi以下という条件にマッチし、1回だけ*がプリントされます。
1回分の処理が終わったんでjが1つカウントアップします。

二重ループの2回目、i=1,j=1ですからjはi以下という条件にマッチし、1回だけ*がプリントされます。
1回分の処理が終わったんでjが1つカウントアップします。

この時、jのfor文はi=1,j=2ですからjはi以下という条件にマッチせず、breakします。ブレイクすると\nがプリントされ、改行されます。

iのfor文の最初に戻り、iがカウントアップされ、i=2になります。
続いてj=0で二重ループが始まります。
二重ループ内でjはi以下の時続ける事が出来ます。

二重ループの1回目、i=2,j=0ですからjはi以下という条件にマッチし、1回だけ*がプリントされます。
1回分の処理が終わったんでjが1つカウントアップします。

二重ループの2回目、i=2,j=1ですからjはi以下という条件にマッチし、1回だけ*がプリントされます。
1回分の処理が終わったんでjが1つカウントアップします。

二重ループの3回目、i=2,j=2ですからjはi以下という条件にマッチし、1回だけ*がプリントされます。
1回分の処理が終わったんでjが1つカウントアップします。

この時、jのfor文はi=2,j=3ですからjはi以下という条件にマッチせず、breakします。ブレイクすると\nがプリントされ、改行されます。

iのfor文にはもうマッチしないので全体的に処理が終わります。
この時
*
**
***
となっています。わかりました?

yukemuri

Re:補足

#20

投稿記事 by yukemuri » 17年前

手取り足取りのコード記述有難う御座いますm(_ _)m
考え方わかりました。

自分がイマイチ把握出来てなかった箇所とりあえず掴めました。

えと、jのループを抜けてjが2になった際、
iのループに行きiもその時は2になってます。
その時j=1に初期化されてるのか…と。
てか、分かる人からすれば当たり前なんですが…

だから、jのループで1<=2 と 2<=2 で *が2回表示と…。
ホント恥かしいです…。
1+1がやっと分かった気持ちw

で、この事を理解(頭で)した上で、
逆バージョン
***
**

を考えました…。
答えを先日見てますがメモリの如く私の頭はその都度消去されるので、全くクリアーな状況で…。
で、出来ましたよ…(;_;)

for(i=3; i>=1; i--){
for(j=1; j<=i; j++){
printf("*");
}
printf("\n");
}

一発では出来ませんでした…。
何度か色々試してみて、正しく表示され、また
この2重ループの(自分で書いた)意味、理解出来ました(>_<)
まず3つ*を表示させ、それをデクリメントすればいいのかな?
という考えから、何とか書けました…。w

Lv7装備レザーバンダナ装備→レザーバンダナ+1に装備変更な気分です…(T-T)

答えはこれだけだけではないでしょうが…ね☆

※レザーバンダナ+1装備(まだダメ?w)でとりあえず今日はぐっすり寝れそうですw

※ピラミッドの*は明日以降、良く考えてまたチャレンジして見ます。

管理人さん、どうもありがとう!
明日からまた授業はVCモード突入…
近いうちに開発実践です。/p はう…

yukemuri

Re:補足

#21

投稿記事 by yukemuri » 17年前

あ、そうだw
大事な事書き忘れました…。

入学は来年の4月からですよね^^;
勘違い…。

あとFFデータ云々の件、色々とご教示有難う御座います。
音楽データ試そうと思ったら、初期のFF11の1枚目だけ、
見当りませんでしたw まぁ発見次第程々に試してみます。
プレイは当分やりません(出来ません)けどね♪

管理人

Re:補足

#22

投稿記事 by 管理人 » 17年前

yukemuriさんそんないい物着る前に、オニオンロッド+1でも研究しなさいw

確かにfor文は難しいですよねぇ。
今までこういう考え方した事ないですもんねプログラム独自の考え方ですから。
私も随分苦労しました。
☆を作ろうとした時もちょうどyukemuriさんの頃でした。
☆がキレイに表示された時はとても嬉しかったですよ。
ピラミッドは作成された2つのプログラムくっつけたら簡単ですよ。
だって空白は段々へって、星は段々ふえるんですから。
空白の数は-1ずつ、星の数は+2ずつ変化します。
☆にもチャレンジしたら力になりますよ。
頑張ってください。

ヤン

商店

#23

投稿記事 by ヤン » 16年前

よろしくおねがいします

ヤン

商店

#24

投稿記事 by ヤン » 16年前

よろしくおねがいします

閉鎖

“C言語何でも質問掲示板” へ戻る