سورس بازی سودوکو به زبان C

sudoku game in c 8093 تصویر

سورس بازی سودوکو به زبان C

در این بخش سورس بازی سودوکو به زبان C را برای شما آماده کرده ایم که در محیط Turbo C و در زبان برنامه نویسی C نوشته شده است. در ادامه می توانید توضیحات مربوط به این پروژه را به همراه تصاویری از محیط برنامه مشاهده کنید.

بازی سودوکو (sudoku)

سودوکو یکی از بازی های مشهور و پرطرفدار است که در اکثر کشورها بازی می کنند. محیط این بازی یک جدول ۹×۹ است که جدول های ۳×۳ را شامل می شود. در ابتدای بازی در خانه های مختلف اعدادی قرار داده می شود که باید با توجه به آن ها مقدار سایر خانه ها را نیز مشخص کنیم. در زیر می توانید قوانین مربوط به چگونگی پر کردن خانه های باقی ماننده را مشاهده کنید:

  • در هر سطر و ستون از جدول باید اعداد ۱ تا ۹ بدون تکرار قرار گیرند.
  • در هر ناحیه ۳×۳ از جدول باید اعداد ۱ تا ۹ بدون تکرار قرار گیرند.

روش حل

در گام اول در همه خانه های خالی جدول، عدد ها را از ۱ تا ۹ قرار می دهیم. سپس به سراغ اعدادی که به صورت پیشفرض تولید شده اند، می رویم و همه اعداد شبیه به آن که در عرض (بصورت افقی) قرار گرفته‌اند، را حذف کرده و یک خط افقی در بالای آن عدد می‌کشیم که مشخص باشد.

در این مرحله مانند مرحله اول عملیات را انجام می دهیم به جزء این که در همه خانه های عمودی در بالا یا پایین عدد مورد نظر اعداد شبیه به هم را حذف می کنیم و بعد با یک خط عمودی در کنار آن عدد، آن را مشخص می نماییم. اعداد مشابه عدد مورد نظر را در مربع نه خانه ای متناظر، حذف می کنیم و عدد را با یک دایره بر دور آن مشخص می کنیم.

دقت کنید که سه مرحله گذشته را در مورد همه عدد های از قبل نوشته شده تکرار کنید. کشیدن خط های عمودی افقی و دایره را بر آن عددها باعث می شود که اعدادی که باقی مانده اند مشخص شوند.

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

اگر روش فوق سخت است می توانید از این روش نیز استفاده کنید. توجه کنید که هر عدد در هر مربع یک بار استفاده می شود و جدول ما دارای ۹ تا از مجموعه خانه های مربع شکل ۳×۳ است به خاطر همین هر عدد علاوه بر اینکه در هر ردیف و هر ستون یک بار استفاده می شود در هر مربع نیز یک بار مورد استفاده قرار می گیرد. پس اگر عددی در یک مربع بزرگ پیدا شد باید بررسی کنید و معادل آن عدد را در مربع بزرگتر را در همان ردیف و یا همان ستون پیدا کنید، اگر آن را پیدا کردید یک خط فرضی از آن عدد از هر مربع بصورت افقی و یا عمودی بکشید با این کار دو ستون و یا دو ردیف از مربعی که عدد در آن موجود نبوده از محاسبات حذف می شوند و فقط سه خانه از آن مربع باقی می ماند.

همین کار را هم از طرف مقابل از همان عدد انجام دهید یک خانه خالی باقی خواهد ماند که جای همان عدد است. معمولاً با این کار بیشتر خانه های خالی پر می شوند که مابقی را از طریق اسکن کردن سطر به سطر و یا ستون به ستون می توان بدست آورد.

قسمت های از سورس کد

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
int a[9][9],r[60][2];
int row, col, icount, mode;
void main()
{
void readvalues(void), display(void),generate(void);
int solve(),checkmat(), checkrow(), checkcolumn(),check(),isfixed();
int i,j,error;
char c;
clrscr();
printf("\t\t\t   SUDOKU SOLVER by:\n\n\t\t\t");
printf("\n\n\n\n\t\tEnter '1' to GENERATE SuDoKu Puzzle\n\n\t\tEnter any other key to SOLVE SuDoKu\n\n\n\n\t\tEnter: ");
scanf("%c",&c);
if(c=='1')
	{
	getchar();
	generate();
	}
clrscr();
printf("\n\n\t\t\tHOW TO ENTER ELEMENTS\n");
printf("\n\n1.Enter the elements by specifying the row and column number of\n  corresponding location");
printf("\n\n2.Each row and column start from 1 and end at 9 (not from 0 to 8)");
printf("\n\n3.After finishing entering the elements, enter zeroes (0)\n  for row or column");
printf("\n\n4.If an element entered in a wrong location has to be deleted,\n  enter zero in that location");
printf("\n\n\n\n\t\t\t  Enter any key to continue");
getchar();
read:
icount=0;
row=0; col=0;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
a[i][j]=0;
for(i=0;i<60;i++)
	{
	r[i][0]=20; r[i][1]=20;
	}
	clrscr();
	readvalues();
	getchar();
	clrscr();
	ask:
	display();
	printf("\n\nEnter 'm' to MODIFY\nEnter 'r' to RE-ENTER\nEnter any other key for SUDOKU Solution: ");
	scanf("%c",&c);
	if(c=='r' || c=='R')
		{
		clrscr();
		goto read;
		}
	if(c=='m' || c=='M')
		{
		printf("\n\n");
		readvalues();
		clrscr();
		getchar();
		goto ask;
		}
	next:
	error=solve();
	clrscr();
	display();
	if(error==0)
	printf("\n\n\n\n\rNO SUOLUTION or TOO MANY MODIFICATIONS");
	cprintf("\n\n\n\n\n\rEnter c to continue and any other key to exit: ");
	scanf("%c",&c);
	if(c=='c')
	goto read;
	getchar();
}

نوشته سورس بازی سودوکو به زبان C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *