نوشتن دوز چهارتایی

وضعیت
موضوع بسته شده است.
  • شروع کننده موضوع
  • #1

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
دیدم تابستونه و شما وقت دارین و من وقت ندارم، خوب دیدم یه پروژه که خودم باید تا دو روز دیگه بنویسیم و وقت ندارم رو اینجا برای ایده به اشتراک بگزارم :D
می خوایم یه بازی دوز چهارتایی بنویسیم بدین سان:
یه جدول 10*10 مثلا هست، دوتا کاربر ستونی که می خوان مهرشون رو بندازن رو انتخاب می کنن و مهرشون می ره تا روی یه مهره قرار بگیره.
هر وقت چهارتا در هر جهتی جور شد، بازی تمومه؛ امتیاز کاربر ها رو باید بده؛ الگوریتم جالب برای امتیاز، نمره داره :D
از دوستان علاقه مند نظر خواهی می کنم چجوری بنویسیم تا استاد بیش از نمره ماکزیمم بده :D
اگه کسی کد هم گزاشت که بهتر!
 
  • شروع کننده موضوع
  • #2

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
پاسخ : نوشتن دوز چهارتایی

دوستان چه استقبالی....

من چندتا سوال داشتم در باب نوشتن این موضوع؛ کمک!

می خوام توی یه مختصات خاصی یه متنی بنویسم بعد برم توی یه مختصات دیگه یه چیز دیگه بنویسم....
ضمنا علاقه مندم رنگ نوشتنم عوض بشه... یه بار خاکستر بنویسم یه بار سیاه ... می شه ؟!
بعد به چه دستوری باید صفحه رو clean کنم ؟!

* تقاضا مندم include هاشون رو بنویسین چون از همه مهم تره :D
 

neda.m

کاربر خاک‌انجمن‌خورده
ارسال‌ها
1,720
امتیاز
2,682
نام مرکز سمپاد
فرزانگان 1
شهر
تهران
دانشگاه
شهید رجائی تهران
رشته دانشگاه
مهندسی عمران - ژئوتکنیک
پاسخ : نوشتن دوز چهارتایی

با چه زباني مي خواين بنويسين؟ ++C؟
 
  • شروع کننده موضوع
  • #4

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
پاسخ : نوشتن دوز چهارتایی

بهله! C++ محترم که include داره؛

می شه یه منطقه ی خاصی رو پاک کرد فقط ؟! :D
 

neda.m

کاربر خاک‌انجمن‌خورده
ارسال‌ها
1,720
امتیاز
2,682
نام مرکز سمپاد
فرزانگان 1
شهر
تهران
دانشگاه
شهید رجائی تهران
رشته دانشگاه
مهندسی عمران - ژئوتکنیک
پاسخ : نوشتن دوز چهارتایی

conio.h
پاك كردن صفحه: clrscr();
رفتن به يه مختصات ديگه: gotoxy(int x, int y);
تغيير رنگ فونت رو مطمئن نيستم! اول يه تستي مي كنم بعد مي گم! :D

به نقل از مـ‌‍‌‌همّد بذرکار :
می شه یه منطقه ی خاصی رو پاک کرد فقط ؟! :D
نمي دونم! ميشه يه bar رنگ پس زمينه رو اون قسمتي كه مي خواي پاك كني بكشي! :D
 

احسان

کاربر فوق‌فعال
ارسال‌ها
137
امتیاز
19
نام مرکز سمپاد
شهید اژه‌ای
شهر
اصفهان
مدال المپیاد
نقره‌ی المپیاد کامپیوتر
دانشگاه
شریف
رشته دانشگاه
مهندسی‌ کامپیوتر
پاسخ : نوشتن دوز چهارتایی

کد:
#include <iostream>

using namespace std;

const int m=10, n=10, max_lev=6, INF=(1<<24);

struct STATE {

	int s[m][n], num[n];

	STATE() {
		for (int i=0;i<m;i++)
			for (int j=0;j<n;j++)
				s[i][j]=-1;
		for (int j=0;j<n;j++)
			num[j]=0;
	}

	bool add(const bool p,const int col) {
		if ((col<0)||(col>=n))
			return false;
		if (num[col]==m)
			return false;
		s[num[col]][col]=p;
		num[col]++;
		return true;
	}

	void remove(const int col) {
		num[col]--;
		s[num[col]][col]=-1;
		return;
	}

	bool game_over(const int row,const int col) const {
		int my_num;
		my_num=0;
		for (int i=0;(i<4)&&((row+i)<m)&&((col-i)>=0);i++) {
			if (s[row+i][col-i]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((row+i)>=0)&&((col-i)<n);i--) {
			if (s[row+i][col-i]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		my_num=0;
		for (int i=0;(i<4)&&((row+i)<m);i++) {
			if (s[row+i][col]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((row+i)>=0);i--) {
			if (s[row+i][col]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		my_num=0;
		for (int i=0;(i<4)&&((row+i)<m)&&((col+i)<n);i++) {
			if (s[row+i][col+i]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((row+i)>=0)&&((col+i)>=0);i--) {
			if (s[row+i][col+i]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		my_num=0;
		for (int i=0;(i<4)&&((col+i)<n);i++) {
			if (s[row][col+i]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((col+i)>=0);i--) {
			if (s[row][col+i]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		return false;
	}

	bool game_over(const int col) const {
		return game_over(num[col]-1,col);
	}

	int find_val(const int k) const {
		return (k*k);
	}

	int my_check_row(const int p,const int row,const int col) const {
		int my_ans=0, my_opponent=1-p, num_all, num_full;
		num_full=0;
		for (num_all=0;(num_all<4)&&((row+num_all)<m)&&((col-num_all)>=0);num_all++) {
			if (s[row+num_all][col-num_all]==my_opponent)
				break;
			if (s[row+num_all][col-num_all]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		num_full=0;
		for (num_all=0;(num_all<4)&&((row+num_all)<m);num_all++) {
			if (s[row+num_all][col]==my_opponent)
				break;
			if (s[row+num_all][col]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		num_full=0;
		for (num_all=0;(num_all<4)&&((row+num_all)<m)&&((col+num_all)<n);num_all++) {
			if (s[row+num_all][col+num_all]==my_opponent)
				break;
			if (s[row+num_all][col+num_all]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		num_full=0;
		for (num_all=0;(num_all<4)&&((col+num_all)<n);num_all++) {
			if (s[row][col+num_all]==my_opponent)
				break;
			if (s[row][col+num_all]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		return my_ans;
	}

	int rows() const {
		int my_ans=0;
		for (int i=0;i<m;i++)
			for (int j=0;j<n;j++)
				my_ans+=(my_check_row(0,i,j)-my_check_row(1,i,j));
		return my_ans;
	}

	int central_col() const {
		int my_ans=0, col =n/2;
		for (int i=0;i<num[col];i++) {
			if (i<(m/2))
				my_ans+=((1-2*s[i][col])*(i+1));
			else
				my_ans+=((1-2*s[i][col])*(m-i));
		}
		return my_ans;
	}

	int h() {
		//return rows();
		//return (rows()+central_col());
		return ((2*rows())+central_col());
	}

	int best_movement(const bool p,const int lev,const int alpha,const int beta) {
		if (lev==0) {
			return h();
		}
		int my_ans=0, my_inf=(INF*((p)?-1:1)), temp_h, ab[2]={alpha,beta};
		bool find_my_ans=false;
		for (int j=0;j<n;j++)
			if (add(p,j)) {
				if (game_over(j))
					temp_h=my_inf;
				else
					temp_h=best_movement(!p,lev-1,ab[0],ab[1]);
				remove(j);
				if (temp_h==my_inf)
					return my_inf;
				if ((temp_h<ab[p])==p)
					ab[p]=temp_h;
				if (ab[1]<ab[0])
					return ab[p];
				if ((!find_my_ans)||((temp_h<my_ans)==p)) {
					my_ans=temp_h;
					find_my_ans=true;
				}
			}
		return my_ans;
	}

	int move(const bool p,const int t) {
		int my_ans=0, my_ind=-1, temp_h, ab[2]={-INF,INF};
		bool find_my_ans=false;
		for (int j=0;j<n;j++)
			if (add(p,j)) {
				if (game_over(j))
					return j;
				else
					temp_h=best_movement(!p,max_lev+((t/n)*((t/n)+1)),ab[0],ab[1]);
				remove(j);
				if ((temp_h<ab[p])==p)
					ab[p]=temp_h;
				if ((!find_my_ans)||((temp_h<my_ans)==p)) {
					my_ans=temp_h;
					find_my_ans = true;
					my_ind = j;
				}
			}
		add(p,my_ind);
		return my_ind;
	}

	void show(ostream & out) const {
		for (int i=m-1;i>=0;i--) {
			for (int j=0;j<n;j++)
				if (s[i][j]==-1)
					out<<'-'<<' ';
				else
					out<<((s[i][j])?'X':'O')<<' ';
			out<<endl;
		}
		return;
	}

} cur;

ostream & operator << (ostream & out,const STATE & state) {
	state.show(out);
	return out;
}

int main() {

	int temp_player, col;
	cin>>temp_player;
	bool player=(temp_player-1);

	for (int k=0;k<(n*m);k++) {
		if ((k%2)==player) {
			cerr<<"your move :"<<endl;
			while(true) {
				cin>>col;
				col--;
				if (cur.add(player,col))
					break;
				cerr<<"impossible movement !"<<endl;
			}
		} else {
			cerr<<"thinking ..."<<endl;
			col=cur.move(!player,k/2);
			cout<<col+1<<endl;
		}
		cerr<<endl<<cur<<endl;
		if (cur.game_over(col)) {
			cerr<<"Game over !"<<endl;
			if ((k%2)==player)
				cerr<<"You win !"<<endl;
			else
				cerr<<"I win !"<<endl;
			return 0;
		}
	}

	cerr<<"It's a draw !"<<endl;

	return 0;

}

چندتا توضیح:

- اصلاً تضمین نمی کنم که باگ نداره! (پارسال چندتا از دوستام این بازیو نوشتن و من هم همین جوری نشستم یه برنامه نوشتم! به نظر می آد خیلی بد بازی نمی کنه!!) انگار یه کمی سوتی داره! دارم روش کار می کنم!!

- اول بازی باید بگید که می خواین نفر اول باشید یا نفر دوم! (با عدد 1 یا 2)

- متغیر max_lev هرچه قدر بیشتر باشه برنامه خفن تر می شه ولی سرعت برنامه میاد پایین!!

- cerr ها چیزای اضافه رو چاپ می کنن! (خود صفحه ی بازی و پیام های وسط بازی!) می تونید اونارو پاک کنید!

- این برنامه هیچ کار رندومی نمی کنه!

اگه توضیح دیگه ای لازم بود در خدمتم!
 

Sylar

کاربر حرفه‌ای
ارسال‌ها
454
امتیاز
60
نام مرکز سمپاد
شهید اژه ای
شهر
اصفهان
پاسخ : نوشتن دوز چهارتایی

چرا انقدر Thinking اش طول میکشه؟ این میتونه خیلی باعث نمره کم شدن بشه!
تصور کن برنامه ها در نیم ثانیه تصویر یک نفر را تشخیص میدن کیه! حالا شما برای اینکه دوتا مهره بندازه دو ثانیه فکر میکنه!
خیلی دلم میخواد منم روش کار کنم. ولی حیف که امسال میرم پیش :((
 

Sylar

کاربر حرفه‌ای
ارسال‌ها
454
امتیاز
60
نام مرکز سمپاد
شهید اژه ای
شهر
اصفهان
پاسخ : نوشتن دوز چهارتایی

ببین من فکر میکنم این بازی استراتژی داشته باشه! اگر درست متوجه شده باشم شما صرفا داری بازگشتی همه ی حالات را میچکی و اون عدد هم عمق DFS اته!
درسته؟
 

احسان

کاربر فوق‌فعال
ارسال‌ها
137
امتیاز
19
نام مرکز سمپاد
شهید اژه‌ای
شهر
اصفهان
مدال المپیاد
نقره‌ی المپیاد کامپیوتر
دانشگاه
شریف
رشته دانشگاه
مهندسی‌ کامپیوتر
پاسخ : نوشتن دوز چهارتایی

به نقل از Sylar :
چرا انقدر Thinking اش طول میکشه؟ این میتونه خیلی باعث نمره کم شدن بشه!
تصور کن برنامه ها در نیم ثانیه تصویر یک نفر را تشخیص میدن کیه! حالا شما برای اینکه دوتا مهره بندازه دو ثانیه فکر میکنه!
خیلی دلم میخواد منم روش کار کنم. ولی حیف که امسال میرم پیش :((

گفتم که می تونی max_lev رو کم کنی! (ولی برنامه یه کم ضعیف می شه!!) این برنامه رو برای جدول کوچیک تر نوشته بودم!! ضمناً گفتم که خفن نیست!!!

به نقل از Sylar :
ببین من فکر میکنم این بازی استراتژی داشته باشه! اگر درست متوجه شده باشم شما صرفا داری بازگشتی همه ی حالات را میچکی و اون عدد هم عمق DFS اته!
درسته؟

استراتژی که انگار نداره!! (این بازی روی بعضی از linux ها هست! پس احتمالاً استراتژی نداره!!) آره! یه جورایی DFS زدم ولی مشکل این جاست که نمی تونی DFS کامل بزنی (هر حرکتت چند ساعت یا چند روز طول می کشه!!)
 
  • شروع کننده موضوع
  • #10

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
پاسخ : نوشتن دوز چهارتایی

من دنبال مقدمات و نوشتن دو تا کاربر با هم بازی کردن بودم، بعد اگه کسی توجه کرد با کامپیوترش رو بنویسیم :D
دوستان لطف کردن رفتن تا آخرش :D من هرچی نگاه می کنم توی کولم، کدبلاک ی که داشتم پاک شده... مجبور فردا صبح کد ها رو توی دانشگاه بنویسم و تحویل استاد بدم؛ از تولید به مصرف (;

یه سوال در همین راستا؛ فونت رو می شه موقع printf کردن بزرگ یا کوچیک کرد ؟!
(این سوالا مربوط به حواشی و زیبایی برنامه است :D)
 

احسان

کاربر فوق‌فعال
ارسال‌ها
137
امتیاز
19
نام مرکز سمپاد
شهید اژه‌ای
شهر
اصفهان
مدال المپیاد
نقره‌ی المپیاد کامپیوتر
دانشگاه
شریف
رشته دانشگاه
مهندسی‌ کامپیوتر
پاسخ : نوشتن دوز چهارتایی

به نقل از مـ‌‍‌‌همّد بذرکار :
من دنبال مقدمات و نوشتن دو تا کاربر با هم بازی کردن بودم، بعد اگه کسی توجه کرد با کامپیوترش رو بنویسیم :D

توی همون برنامه تابع های لازم برای بازی دو نفر با هم وجود داره:

- add حرکت مورد نظر رو انجام می ده! (و اگه امکان پذیر نبود return false می کنه!)

- game_over هم چک می کنه که با حرکت جدید بازی تموم شده یا نه!
 

احسان

کاربر فوق‌فعال
ارسال‌ها
137
امتیاز
19
نام مرکز سمپاد
شهید اژه‌ای
شهر
اصفهان
مدال المپیاد
نقره‌ی المپیاد کامپیوتر
دانشگاه
شریف
رشته دانشگاه
مهندسی‌ کامپیوتر
پاسخ : نوشتن دوز چهارتایی

کد:
#include <iostream>

using namespace std;

const int m=10, n=10, max_lev=5, INF=(1<<24);

struct STATE {

	int s[m][n], num[n];

	STATE() {
		for (int i=0;i<m;i++)
			for (int j=0;j<n;j++)
				s[i][j]=-1;
		for (int j=0;j<n;j++)
			num[j]=0;
	}

	bool add(const bool p,const int col) {
		if ((col<0)||(col>=n))
			return false;
		if (num[col]==m)
			return false;
		s[num[col]][col]=p;
		num[col]++;
		return true;
	}

	void remove(const int col) {
		num[col]--;
		s[num[col]][col]=-1;
		return;
	}

	bool game_over(const int row,const int col) const {
		int my_num;
		my_num=0;
		for (int i=0;(i<4)&&((row+i)<m)&&((col-i)>=0);i++) {
			if (s[row+i][col-i]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((row+i)>=0)&&((col-i)<n);i--) {
			if (s[row+i][col-i]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		my_num=0;
		for (int i=0;(i<4)&&((row+i)<m);i++) {
			if (s[row+i][col]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((row+i)>=0);i--) {
			if (s[row+i][col]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		my_num=0;
		for (int i=0;(i<4)&&((row+i)<m)&&((col+i)<n);i++) {
			if (s[row+i][col+i]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((row+i)>=0)&&((col+i)>=0);i--) {
			if (s[row+i][col+i]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		my_num=0;
		for (int i=0;(i<4)&&((col+i)<n);i++) {
			if (s[row][col+i]!=s[row][col])
				break;
			my_num++;
		}
		for (int i=-1;(i>-4)&&((col+i)>=0);i--) {
			if (s[row][col+i]!=s[row][col])
				break;
			my_num++;
		}
		if (my_num>=4)
			return true;
		return false;
	}

	bool game_over(const int col) const {
		return game_over(num[col]-1,col);
	}

	int find_val(const int k) const {
		return (k*k);
	}

	int my_check_row(const int p,const int row,const int col) const {
		int my_ans=0, my_opponent=1-p, num_all, num_full;
		num_full=0;
		for (num_all=0;(num_all<4)&&((row+num_all)<m)&&((col-num_all)>=0);num_all++) {
			if (s[row+num_all][col-num_all]==my_opponent)
				break;
			if (s[row+num_all][col-num_all]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		num_full=0;
		for (num_all=0;(num_all<4)&&((row+num_all)<m);num_all++) {
			if (s[row+num_all][col]==my_opponent)
				break;
			if (s[row+num_all][col]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		num_full=0;
		for (num_all=0;(num_all<4)&&((row+num_all)<m)&&((col+num_all)<n);num_all++) {
			if (s[row+num_all][col+num_all]==my_opponent)
				break;
			if (s[row+num_all][col+num_all]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		num_full=0;
		for (num_all=0;(num_all<4)&&((col+num_all)<n);num_all++) {
			if (s[row][col+num_all]==my_opponent)
				break;
			if (s[row][col+num_all]!=-1)
				num_full++;
		}
		if (num_all==4)
			my_ans+=find_val(num_full);
		return my_ans;
	}

	int rows() const {
		int my_ans=0;
		for (int i=0;i<m;i++)
			for (int j=0;j<n;j++)
				my_ans+=(my_check_row(0,i,j)-my_check_row(1,i,j));
		return my_ans;
	}

	int central_col() const {
		int my_ans=0, col =n/2;
		for (int i=0;i<num[col];i++) {
			if (i<(m/2))
				my_ans+=((1-2*s[i][col])*(i+1));
			else
				my_ans+=((1-2*s[i][col])*(m-i));
		}
		if (n%2==0) {
			col = n/2+1;
			for (int i=0;i<num[col];i++) {
				if (i<(m/2))
					my_ans+=((1-2*s[i][col])*(i+1));
				else
					my_ans+=((1-2*s[i][col])*(m-i));
			}
		}
		return my_ans;
	}

	int h() {
		return ((2*rows())+central_col());
	}

	int best_movement(const bool p,const int lev,const int alpha,const int beta) {
		if (lev==0) {
			return h();
		}
		int my_ans=0, my_inf=(INF*((p)?-1:1)), temp_h, ab[2]={alpha,beta};
		bool find_my_ans=false;
		for (int j=0;j<n;j++)
			if (add(p,j)) {
				if (game_over(j))
					temp_h=my_inf;
				else
					temp_h=best_movement(!p,lev-1,ab[0],ab[1]);
				remove(j);
				if (temp_h==my_inf)
					return my_inf;
				if ((temp_h<ab[p])==p)
					ab[p]=temp_h;
				if (ab[1]<ab[0])
					return ab[p];
				if ((!find_my_ans)||((temp_h<my_ans)==p)) {
					my_ans=temp_h;
					find_my_ans=true;
				}
			}
		return my_ans;
	}

	int move(const bool p,const int t) {
		int my_ans=0, my_ind=-1, temp_h, ab[2]={-INF,INF};
		bool find_my_ans=false;
		for (int j=0;j<n;j++)
			if (add(p,j)) {
				if (game_over(j))
					return j;
				else
					temp_h=best_movement(!p,max_lev+((t/n)*((t/n)+1)),ab[0],ab[1]);
				remove(j);
				if ((temp_h<ab[p])==p)
					ab[p]=temp_h;
				if ((!find_my_ans)||((temp_h<my_ans)==p)) {
					my_ans=temp_h;
					find_my_ans = true;
					my_ind = j;
				}
			}
		add(p,my_ind);
		return my_ind;
	}

	void show(ostream & out) const {
		for (int i=m-1;i>=0;i--) {
			for (int j=0;j<n;j++)
				if (s[i][j]==-1)
					out<<'-'<<' ';
				else
					out<<((s[i][j])?'X':'O')<<' ';
			out<<endl;
		}
		return;
	}

} cur;

ostream & operator << (ostream & out,const STATE & state) {
	state.show(out);
	return out;
}

int main() {

	int temp_player, col;
	cin>>temp_player;
	bool player=(temp_player-1);

	for (int k=0;k<(n*m);k++) {
		if ((k%2)==player) {
			cerr<<"your move :"<<endl;
			while(true) {
				cin>>col;
				col--;
				if (cur.add(player,col))
					break;
				cerr<<"impossible movement !"<<endl;
			}
		} else {
			cerr<<"thinking ..."<<endl;
			col=cur.move(!player,k/2);
			cout<<col+1<<endl;
		}
		cerr<<endl<<cur<<endl;
		if (cur.game_over(col)) {
			cerr<<"Game over !"<<endl;
			if ((k%2)==player)
				cerr<<"You win !"<<endl;
			else
				cerr<<"I win !"<<endl;
			return 0;
		}
	}

	cerr<<"It's a draw !"<<endl;

	return 0;

}
یه اشکال کوچیک داشت که برطرف کردم! در ضمن سرعتش هم بیشتر شد!! (اگه بازم سرعتش کمه max_lev رو بازم کم کنید!) اگه کسی می خواد از این جور برنامه ها بنویسه (برنامه ای که کامپیوتر با یه نفر بازی کنه!) بگه تا راهنماییش کنم!

* چپ به راست کردم کد رو تا بهتر بشه خوند (;
 

armita

کاربر خاک‌انجمن‌خورده
ارسال‌ها
2,204
امتیاز
686
نام مرکز سمپاد
دبیرستان فرزانگان ۱
شهر
تهران
دانشگاه
شریف
رشته دانشگاه
‫علوم کامپیوتر‬‎
پاسخ : نوشتن دوز چهارتایی

به نقل از مـ‌‍‌‌همّد بذرکار :
من دنبال مقدمات و نوشتن دو تا کاربر با هم بازی کردن بودم، بعد اگه کسی توجه کرد با کامپیوترش رو بنویسیم :D
دوستان لطف کردن رفتن تا آخرش :D من هرچی نگاه می کنم توی کولم، کدبلاک ی که داشتم پاک شده... مجبور فردا صبح کد ها رو توی دانشگاه بنویسم و تحویل استاد بدم؛ از تولید به مصرف (;

یه سوال در همین راستا؛ فونت رو می شه موقع printf کردن بزرگ یا کوچیک کرد ؟!
(این سوالا مربوط به حواشی و زیبایی برنامه است :D)
printf رو نمی دونم ولی اگر از outtext یا outtextxy استفاده کنید با( settexstyle(int font , int direction , int size میشه فونت و جهت و سایز نوشته رو عوض کرد.
include هم همون graphics.h

برای عوض کردن رنگ هم باید از (setcolor (int color استفاده کنید. (البته باز هم باید از outtext... استفاده بشه !)



برای امتیاز دادن :
مثلا اگر یک نفر جلوی برنده شدن طرف مقابل رو گرفت پنج امتیاز بگیره
اگر مهره اش رو جایی گذاشت که فایده نداشت (یعنی با اونجا گذاشتن هیچ وقت نمی تونست برنده بشه ) یک امتیاز منفی بگیره ! :D
اگر کلا برنده شد 15 امتیاز بگیره
اگر مهره اش کنار یک مهره ی دیگه ی خودش قرار گرفت 2 امتیاز بگیره
اگر کنار سه مهره ی دیگه ی خودش قرار گرفت 3 امتیاز بگیره

البته در همه ی حالت های قبل امتیاز قبلیش + اینها بشه :D !
 

Sylar

کاربر حرفه‌ای
ارسال‌ها
454
امتیاز
60
نام مرکز سمپاد
شهید اژه ای
شهر
اصفهان
پاسخ : نوشتن دوز چهارتایی

به نقل از آرمیتا ثابتی اشرف :
printf رو نمی دونم ولی اگر از outtext یا outtextxy استفاده کنید با( settexstyle(int font , int direction , int size میشه فونت و جهت و سایز نوشته رو عوض کرد.
include هم همون graphics.h

برای عوض کردن رنگ هم باید از (setcolor (int color استفاده کنید. (البته باز هم باید از outtext... استفاده بشه !)



برای امتیاز دادن :
مثلا اگر یک نفر جلوی برنده شدن طرف مقابل رو گرفت پنج امتیاز بگیره
اگر مهره اش رو جایی گذاشت که فایده نداشت (یعنی با اونجا گذاشتن هیچ وقت نمی تونست برنده بشه ) یک امتیاز منفی بگیره ! :D
اگر کلا برنده شد 15 امتیاز بگیره
اگر مهره اش کنار یک مهره ی دیگه ی خودش قرار گرفت 2 امتیاز بگیره
اگر کنار سه مهره ی دیگه ی خودش قرار گرفت 3 امتیاز بگیره

البته در همه ی حالت های قبل امتیاز قبلیش + اینها بشه :D !
این کدی که من دیدم با استاندارد GNU نوشته شده بود. و فکر میکنم شما با Turbo یا Borland اش کار کردید. برای همین به احتمال خیلی خوبی این شکلی جواب نخواهد داد.
 
  • شروع کننده موضوع
  • #15

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
پاسخ : نوشتن دوز چهارتایی

sylar جان، استاندارد GNU چیه ؟! یه مقاله ای توضیح خوبی رو به عنوان تاپیک می شه ثبت کرد در موردش...(؟)

(اگه استاندارد مربوط به کامپایلر ها بشه، من احتمالا با برلند یا کدبلاکر خواهم نوشت... فرقی داره ؟)

خیلی خوشحال می شم یه نمونه از کار با همین رنگی یا کج نویسی ببینم :D دارین ؟
 

armita

کاربر خاک‌انجمن‌خورده
ارسال‌ها
2,204
امتیاز
686
نام مرکز سمپاد
دبیرستان فرزانگان ۱
شهر
تهران
دانشگاه
شریف
رشته دانشگاه
‫علوم کامپیوتر‬‎
پاسخ : نوشتن دوز چهارتایی

به نقل از مـ‌‍‌‌همّد بذرکار :
خیلی خوشحال می شم یه نمونه از کار با همین رنگی یا کج نویسی ببینم :D دارین ؟

کد:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

char *fname[] = { "DEFAULT font",
		  "TRIPLEX font",
		  "SMALL font",
		  "SANS SERIF font",
		  "GOTHIC font"
		};

int main(void)
{
   int gdriver = DETECT, gmode, errorcode;
   int style, midx, midy;
   int size = 1;
   int c=1,d=0;

   initgraph(&gdriver, &gmode, "");

   midx = getmaxx() / 2;
   midy = getmaxy() / 2;

   settextjustify(CENTER_TEXT, CENTER_TEXT);

   for (style=DEFAULT_FONT; style<=GOTHIC_FONT; style++)
   {
      cleardevice();
      if (style == TRIPLEX_FONT)
	 size = 4;
      setcolor(c);
      settextstyle(style, d, size);
      outtextxy(midx, midy, fname[style]);
      getch();
      c++;
      if (d==0)
	d=1;
      else
	d=0;
   }

   closegraph();
   return 0;
}

* کد رو چپ به راست کردم؛ لطفا کدها رو همه چپ به راست بزارن تا راحت تر خونده بشه.
 

Sylar

کاربر حرفه‌ای
ارسال‌ها
454
امتیاز
60
نام مرکز سمپاد
شهید اژه ای
شهر
اصفهان
پاسخ : نوشتن دوز چهارتایی

به نقل از مـ‌‍‌‌همّد بذرکار :
sylar جان، استاندارد GNU چیه ؟! یه مقاله ای توضیح خوبی رو به عنوان تاپیک می شه ثبت کرد در موردش...(؟)

(اگه استاندارد مربوط به کامپایلر ها بشه، من احتمالا با برلند یا کدبلاکر خواهم نوشت... فرقی داره ؟)

خیلی خوشحال می شم یه نمونه از کار با همین رنگی یا کج نویسی ببینم :D دارین ؟

GNU کامپایلر داره برای C و ++C که همیشه در حال آپدیت شدن هستند. (برخلاف Borland و ...)
مزیتی که نسبت به Borland داره Optimization خیلی قوی(چه Orderای و چه مدیریت حافظه) و کتابخانه به روزه.
تا اونجایی که میدونم قواعد زبان ++C از سالی که به طور مثال ترجمه Deitel & Deitel اش اومده خیلی تغییر کرده. بعد این GNU هم دائما آپدیتشون میکنه.
سیستم اصلی این Compiler برای سیستم های Unix Based طراحی شده. ولی در ویندوز هم Port شده و توسط برنامه ++Dev-C استفاده میشه.
(توی ویندوز به دلیل لزوم وجود یک سری کتابخانه های اضافی برای اجرا سرعت کمتر و حافظه ی بیشتری نسبت به مدل یونیکسی خودش لازم داره.ولی خوبیش اینه که طبق استاندارد
اصل برنامه نوشته میشه. بعدا در مسابقاتی مثل ACM روی سیستم Unix Based تست میشه که سرعت زیاد میشه و حافظه کمتر لازم میشه)
به خاطر این مزیتهاست که به طور مثلا محوریت مسابقات برنامه نویسی شبیه ACM به g++ و gcc تغییر کرده.
(پاسکال در حال حاضر در بیشتر موارد به حافظه ی بیشتری نیاز داره. جاوا هم که اصلا تعطیله حداقل 1 ثانیه بیشتر از ++G اجرا کردنش طول میکشه.)

در این بین Microsoft هم Compiler اه ++C داره که نسبت به Borland خیلی قابل تحمل تره و با هر ورژن به آخرین تغییرات آپدیت میشه.ولی به کیفیت GNU نمیرسه.
 
  • شروع کننده موضوع
  • #18

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
پاسخ : نوشتن دوز چهارتایی

بنده معذورم!! من با C++ و C کار چندانی نکردم؛ کدی که آرمیتا داد رو خواستم توی code::block تست کنم، به بسم الله اولش گیر داد :D گرفیک برای کدبلاک تعریف نشدست!؟ باید خودم بگیرم جایی بریزم؟!

خطا هایی که گرفته فکر میکنم فقط مربوط به لینوکسی بودن کمپایلر باشه!؟ نه؟ آخه خطاها در مورد detect و بقیست که انگار گیرش همون include اولشه :D
 

Sylar

کاربر حرفه‌ای
ارسال‌ها
454
امتیاز
60
نام مرکز سمپاد
شهید اژه ای
شهر
اصفهان
پاسخ : نوشتن دوز چهارتایی

به نقل از مـ‌‍‌‌همّد بذرکار :
بنده معذورم!! من با C++ و C کار چندانی نکردم؛ کدی که آرمیتا داد رو خواستم توی code::block تست کنم، به بسم الله اولش گیر داد :D گرفیک برای کدبلاک تعریف نشدست!؟ باید خودم بگیرم جایی بریزم؟!

خطا هایی که گرفته فکر میکنم فقط مربوط به لینوکسی بودن کمپایلر باشه!؟ نه؟ آخه خطاها در مورد detect و بقیست که انگار گیرش همون include اولشه :D

فکر کنم graphics.h ماله turbo یا borland بود.
 
  • شروع کننده موضوع
  • #20

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
پاسخ : نوشتن دوز چهارتایی

خوب من دنبال چیز جایگزینی می گشتم...
 
وضعیت
موضوع بسته شده است.
بالا