プログラムの著作権について

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

プログラムの著作権について

#1

投稿記事 by sigenogoro » 8年前

失礼いたします。

私は大学でコンピュータプログラム(主にゲーム)を学んでいるものです。

著作権について不安があるのでここで質問させていただきます。

先日、シューティングゲームを作成しました。出来上がった瞬間、この上ない達成感で頭がいっぱいでした。
何にも代えがたいです。

しかし、ふと冷静になると、ほとんどwebページを参考にしたけど、これは自分の力で作ったといっていいのだろうか
と、疑問に思うようになりました。また、その作ったゲームを大学のコンテストに提出しようと考えたとき、これは
著作権違反なのではないかという考えが頭をよぎり、不安になっています。

全てwebページを見てやったわけではないですが(自機の動きなど)、敵の動き、特に弾幕はほとんど「シューティングゲームの館」
のホームページにご教示いただいたものです。


私が書いたソースコード(弾幕)と参考にしたwebページを投稿します。
私がやっていることは著作権違反ですか。また、私の行っていることはプログラマとしてどうなのでしょうか。

皆さん、どうかよろしくお願いいたします。

参考ページ
http://dixq.net/s/
http://bituse.info/game/shot/

コード:

void Enemy::Enemy_Attack(Player *p)
{
	if(this->d.flag==true)
	{
		if(this->d.EMovePattern==0)
		{
			if(this->d.y>=30)this->Enemy_Atackflag=true;
		}
		else 
		{
			if(this->Enemy_ShotTime==this->d.gotime)this->Enemy_Atackflag=true;
		}
		

		if(this->Enemy_Atackflag==true)
		{		
			if(this->Enemy_ShotCounter==0)this->rad=atan2((p->GetPY()+16)-this->d.y,(p->GetPX()+16)-this->d.x);

			switch(this->d.EAPattern)
			{
			case 1:
					
			if(this->Enemy_ShotCounter%8==0&&this->Enemy_ShotCounter<=80)
			{	
					for(int i=0;i<ESNum;i++)
				{
						if(this->ES[i].ESFlag==false&&this->Enemy_ShotCheckFlag==false)
						{
							this->ES[i].ESFlag=true;
							this->ES[i].x=(this->d.x+this->d.w)-20;
							this->ES[i].y=(this->d.y+this->d.h)-5;
							this->ES[i].rad=this->rad;
							break;
						}
					}
				}
				break;

			case 2:
				if(this->Enemy_ShotCounter%5==0&&this->Enemy_ShotCounter<=90)
				{
					for(int i=0;i<ESNum;i++)
					{
						if(this->ES[i].ESFlag==false&&this->Enemy_ShotCheckFlag==false)
						{
							this->ES[i].ESFlag=true;
							this->ES[i].x=(this->d.x+this->d.w)-20;
							this->ES[i].y=(this->d.y+this->d.h)-5;						

							if(this->num==0)this->ES[i].rad=this->rad-(10*PI/180);
							else if(this->num==1)this->ES[i].rad=this->rad;
							else if(this->num==2)this->ES[i].rad=this->rad+(10*PI/180);

							this->num++;

							if(this->num==3)
							{
								this->num=0;
								break;
							}

						}
					}
				}
				break;

			case 3:
				if(this->Enemy_ShotCounter%2==0&&this->Enemy_ShotCounter<=120)
				{
					for(int i=0;i<ESNum;i++)
					{
						if(this->ES[i].ESFlag==false&&this->Enemy_ShotCheckFlag==false)
						{
							this->ES[i].ESFlag=true;
							this->ES[i].x=(this->d.x+this->d.w)-20;
							this->ES[i].y=(this->d.y+this->d.h)-5;

							this->ES[i].rad=this->rad-(60*PI/180)+((rand()%120)*PI/180);
							this->num++;
							break;
						}
					}
				}
				break;

			case 4:
				if(this->Enemy_ShotCounter%4==0&&this->Enemy_ShotCounter<=120)
				{				
					for(int i=0;i<ESNum;i++)
					{
						if(this->ES[i].ESFlag==false&&this->Enemy_ShotCheckFlag==false)
						{
							this->ES[i].ESFlag=true;
							this->ES[i].x=(this->d.x+this->d.w)-20;
							this->ES[i].y=(this->d.y+this->d.h)-5;
							this->ES[i].rad=this->rad;

							break;
						}
					}
				}

				break;

			case 5:

				for(int i=0;i<ESNum;i++)
				{
					if(this->Enemy_ShotCounter==2*i&&this->Enemy_ShotCounter<=150)
					{	
						if(this->ES[i].ESFlag==false&&this->Enemy_ShotCheckFlag==false)
						{
							this->ES[i].ESFlag=true;
							this->ES[i].x=(this->d.x+this->d.w)-20;
							this->ES[i].y=(this->d.y+this->d.h)-5;

							if(i==0)this->ES[i].rad=this->rad;
							else this->ES[i].rad=this->ES[i-1].rad+0.2f;
							break;
						}
					}		
				}

				break;

			case 6:		

				for(int i=0;i<10;i++)
				{
					if(this->Enemy_ShotCounter==8*i)
					{
						for(int j=Shot_Divide*i;j<Shot_Divide*(i+1);j++)
						{
							if(this->ES[j].ESFlag==false&&this->Enemy_ShotCheckFlag==false)
							{
								this->ES[j].ESFlag=true;
								this->ES[j].x=this->d.x+15;
								this->ES[j].y=this->d.y;

								if(j==0)this->ES[0].rad=this->rad;
								else this->ES[j].rad=this->ES[0].rad+2.0f*PI*(double)j/Shot_Divide;
							}
						}
					}
				}

				break;

			case 7:	

				for(int i=0;i<ESNum;i++)
				{		
					if(this->Enemy_ShotCounter==i&&this->Enemy_ShotCounter<=90)
					{

						if(this->ES[i].ESFlag==false)
						{
							this->ES[i].ESFlag=true;
							this->ES[i].x=(this->d.x+this->d.w)-30;
							this->ES[i].y=(this->d.y+this->d.h)-30;


							if(this->num2==0)
							{
								if(i==0)this->ES[i].rad=this->rad;
								else this->ES[i].rad=this->ES[i-4].rad+0.2f;							


							}
							else if(this->num2==1)
							{									
								if(i==1)this->ES[i].rad=(this->rad+(180*PI/180));
								else this->ES[i].rad=this->ES[i-4].rad+0.2f;
							}
							else if(this->num2==2)
							{
								if(i==2)this->ES[i].rad=(this->rad+(90*PI/180));
								else this->ES[i].rad=this->ES[i-4].rad+0.2f;
							}
							else if(this->num2==3)
							{
								if(i==3)this->ES[i].rad=(this->rad+(270*PI/180));
								else this->ES[i].rad=this->ES[i-4].rad+0.2f;
							}								

							this->num2++;

							if(this->num2==4)
							{
								this->num2=0;
								break;
							}
						}
					}
				}

			default:

				break;
			}			

			this->Enemy_ShotCounter++;	
			
		}	
		
	}
	
	this->Enemy_ShotTime++;

	
	
	
}



アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: プログラムの著作権について

#2

投稿記事 by softya(ソフト屋) » 8年前

ゲームのアイデアや設計は著作権で保護されませんが、ソースコードは著作権で保護されています。あと映像と音ですね。
大半のソースコードが残っている や 映像、音を使っている場合は、龍神録の利用規約に従って下さい。

「龍神録プログラミングの館 利用規約」
http://dixq.net/rp/kiyaku.html

> ●ここのプログラムコードを利用して制作した卒業制作、または教育機関・企業等へ作品として提出する場合
> →使用される際は※1を参考に、提出先を添えてご連絡下さい。

これに該当するかと思われます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: プログラムの著作権について

#3

投稿記事 by softya(ソフト屋) » 8年前

書き忘れましたが、もう片方の方のソースコードも多く混在している場合は、そちらの方にも問い合わせが必要です。
http://bituse.info/lisense.php
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: プログラムの著作権について

#4

投稿記事 by Dixq (管理人) » 8年前

> 私がやっていることは著作権違反ですか。また、私の行っていることはプログラマとしてどうなのでしょうか。

「OSSを利用する」という観点ではプログラムとして大いに、プロでも行っている行為で、むしろ積極的に実施するべきことで恥ずかしいことではないです。
私は学生時代、常に我流を通して自分でやっていましたが、そこには先人の知恵が全く入っていないので、
非効率なことを延々とやっていたこともあります。
そういう意味ではOSSのコードを見て、先人の知恵を拝見するのは良いことです。

ここで注意しないといけないのはライセンスです「OSS ライセンス」でググると良いでしょう。
OSSには「好き勝手使っていいよ」とほとんど著作権フリーなものと「オープンにはするけど好きには使っちゃいけないよ」と言っているものとがあります。

●GPLライセンス
・著作権表示を保持しなければならない+無保証である
・GPLライセンスのオープンソース・フリーソフトウェアは、誰でも自由に複製・改変・頒布することが許可されている
・GPLライセンスのソフトウェアやプログラムを使用した場合、その制作物もGPLライセンスで配布しなければならない

●LGPLライセンス
・↑との違い
 →動的リンクとして使用した場合は、そこ以外の部分にはLGPLライセンスを適応させなくて良い

●BSDライセンス
・再配布時には著作権表示を残すこと

●MITライセンス
・改変でも、再配布でも、商用利用でも、有料販売でも、どんなことにでも自由に無料でつかうことが可能
・「著作権表示」と「MITライセンスの全文」を記載する


など、OSSにはそれぞれのライセンス形式が書かれているのでそれに準じて利用することになります。
これは企業でもプロが行っている行為で著作権違反行為ではありません。

豆電球

Re: プログラムの著作権について

#5

投稿記事 by 豆電球 » 8年前

私もちょっと考えてみたのですが。。。

このサイトの質問に自己参照構造体を使ったリストがあったので
前にこんなものなのか~レベルの感じでスルーしてたので確実に使用できるように
なろうといつものようにサイトを回りました。
説明文や図などはそれなりに違っていますが、コードは類似しています。
それはそうです、自己参照構造体を使ったリストのコードなのですから。
つまり、私が回ったサイトの1つがそのコードに著作権を持つなら、
他のサイトのコードはそれを改変したものに過ぎないレベルと見ることもできます。
でも、これは現実的には無理があるような気がするので、ある程度改変(違っていたら)
されていればその人のオリジナルのコードとして著作権を与えると考えても、そのコードとは
違っていても他の無数にあるサイトのコードの中に99%の類似性を持つ可能性が高いです。

そう考えるとある程度のコード量でオリジナルを主張するしかないのかなと思ってみたり。。。

将来、私がC++のサイトを立ち上げたとしてみんなと同じように一応著作権は私にありますと記載するのでしょう。
ミラーサイトのようにコピペしてサイトを作られたら「え~、それはないでしょ」と思いますけど、
十数行ぐらいのコードをコピペされてこのコードの著作権は豆電球にありますと書かれたら
「いやいや、無いから、無いから」になってしまいます^^;

結論はなにが正解なのかな~という感じになりました^^;

閉鎖

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