PDA

View Full Version : چگونه به متغیری در php کلاسی از نوع html بدهیم



Salazar.mi
جمعه 03 آبان 1398, 11:45 صبح
سلام
امیدوارم حالتون خوب باشه
اینجا تو خط 11
میحوام اگر case:2 شد
چاپ کنه برام فونت آیکن مورد نظر
که این فونت آیکن طبق این چاپ میشه


'<span class="fi icon-circle m_blue"></span>'

بعد میخوام تو قسمت های بعدی به همین متغیر $m یه کلاس دیگه ای اضافه کنم
راهی دارد آیا؟؟؟؟
خیلی خیلی خیلی خیلی خیلی ممنون میشم جواب بدین
تشکرات ویژهههههه


switch($data)
{
case 0:
//echo $data;
//echo '<img src="assets/image/aaaa.png" class="khali">';
break;


case 1:
//echo $data;
echo '<span class="fi icon-circle m_blue"></span>';
break;


case 2:
//echo $data;
$m=echo '<span class="fi icon-circle m_red"></span>';
break;


case 3:
//echo $data;
echo '<span class="fi icon-circle m_ki_blue"></span>';
break;


case 4:
//echo $data;
echo '<span class="fi icon-circle m_ki_red"></span>';
break;


case 5:
//echo $data;
echo '<span class="por"></span>';
break;

default:
echo "";
}

Salazar.mi
جمعه 03 آبان 1398, 12:35 عصر
switch($data)
{
case 0:
//echo $data;
//echo '<img src="assets/image/aaaa.png" class="khali">';
break;


case 1:
//echo $data;
echo '<span class="fi icon-circle m_blue"></span>';
break;


case 2:
//echo $data;
echo '<span class="fi icon-circle m_red"></span>';
break;


case 3:
//echo $data;
echo '<span class="fi icon-circle m_ki_blue"></span>';
break;


case 4:
//echo $data;
echo '<span class="fi icon-circle m_ki_red"></span>';
break;


case 5:
//echo $data;
echo '<span class="por"></span>';
break;

default:
echo "";
}

$k=1;
while($k>0)
{
$k--;
if(($i+1)>=9)
{
$db=6;
continue;
}

elseif(($j+1)>=9)
{
$db=6;
continue;
}

$db=$a['sotoon'.($i+1)]["kh".($j+1)];
//echo $db;
}


$kk=1;
while($kk>0)
{
$kk--;
if(($i-1)<=0)
{
$dg=6;
continue;
}


elseif(($j-1)<=0)
{
$dg=6;
continue;
}


$dg=$a['sotoon'.($i-1)]["kh".($j-1)];
//echo $dg;
}



//echo $db;
//echo $dg;

//echo $data;
//for red
if($db===0 & $data===2)
{
echo '<span class="fi icon-circle m_red dragred"></span>';
echo "dragr";
}
if($dg===2 & $data===0)
{
echo '<span class="dropred"><img src="assets/image/aaaa.png" class="khali"></span>';
echo "dropr";
}

//for blue
if($dg===0 & $data===1)
{
echo '<span class="dragblue"></span>';
echo "dragb";
}
if($db===1 & $data===0)
{
echo '<span class="dropblue"><img src="assets/image/aaaa.png" class="khali"></span>';
echo "dropb";
}

?>

</td>

<?php
}
?>
</tr>

<?php
}


?>


میخوام تو خط های بعدی بهش کلاس dragred را اضافه کنم
یعنی تو سوییچ میخوام یه سری کلاس چاپ بشه
بعدا یه کلاس دیگه به اون قبلیا اضافه بشه
الان با چیزی که نوشتم دوبار کلاس
fi icon-circle m_red
چاپ میشه

ali_sed
جمعه 03 آبان 1398, 17:45 عصر
سلام

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



$spanClassName = '';

$spanClassName .= ' fi icon-circle m_red'

$spanClassName .= ' dragred '


echo '<span class="' . $spanClassName . '"></span>';

Salazar.mi
جمعه 03 آبان 1398, 18:19 عصر
سلام

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



$spanClassName = '';

$spanClassName .= ' fi icon-circle m_red'

$spanClassName .= ' dragred '


echo '<span class="' . $spanClassName . '"></span>';

بی نهایت ممنونم که جواب دادبن
واقعا منونم
من راهی که گفتین را انجام دادم ولی بازم دوتا fi fi_circle m_red برام چاپ شد
ولی من میخوام همون fi fi_circle m_red که وجود دارد کلاس dragred را بهش اضافه کنم .
ممنون میشم جواب دادین



<?php
for($j=1;$j<9;$j++)
{

?>
<tr>
<?php
for($i=1;$i<9;$i++)
{
?>
<td>
<?php
$data=$a['sotoon'.$i]["kh".$j];

//echo $data;




switch($data)
{
case 0:
//echo $data;
//echo '<img src="assets/image/aaaa.png" class="khali">';
break;


case 1:
//echo $data;
echo '<span class="fi icon-circle m_blue"></span>';

break;


case 2:
//echo $data;
//echo '<span class="fi icon-circle m_red"></span>';
$class='fi icon-circle m_red';
echo '<span class="'.$class.'"></span>';
break;


case 3:
//echo $data;
echo '<span class="fi icon-circle m_ki_blue"></span>';
break;


case 4:
//echo $data;
echo '<span class="fi icon-circle m_ki_red"></span>';
break;


case 5:
//echo $data;
echo '<span class="por"></span>';
break;

default:
echo "";
}

$k=1;
while($k>0)
{
$k--;
if(($i+1)>=9)
{
$db=6;
continue;
}

elseif(($j+1)>=9)
{
$db=6;
continue;
}

$db=$a['sotoon'.($i+1)]["kh".($j+1)];
//echo $db;
}


$kk=1;
while($kk>0)
{
$kk--;
if(($i-1)<=0)
{
$dg=6;
continue;
}


elseif(($j-1)<=0)
{
$dg=6;
continue;
}


$dg=$a['sotoon'.($i-1)]["kh".($j-1)];
//echo $dg;
}



echo $db;
echo $dg;

//echo $data;
//for red


if($dg===2 & $data===0)
{
echo '<span class="dropred border"></span>';
//echo "dropr";
$data=2;
}
elseif($db===0 & $data===2)
{
//echo '<span class="fi icon-circle m_red dragred"></span>';
//echo "dragr";
$class .=' dragred';
echo '<span class="'.$class.'"></span>';
$data=0;

}

//for blue
elseif($dg===0 & $data===1)
{
//echo '<span class="dragblue"></span>';
//echo "dragb";
$data=0;
}
elseif($db===1 & $data===0)
{
//echo '<span class="dropblue"><img src="assets/image/aaaa.png" class="khali"></span>';
//echo "dropb";
$data=1;
}

//echo $data;



?>

</td>

<?php
}
?>
</tr>

<?php
}


?>



خط
38 39
127 126

ali_sed
جمعه 03 آبان 1398, 18:58 عصر
برنامه را طوری تغییر دهید که تنها یک بار نیاز به اجرای دستور echo باشد.
یا حداقل دستور switch , if های انتهایی را با هم ترکیب کنید. برای این کار ابتدا محاسبات مربوط به dg , db را به قبل از دستور switch انتقال دهید. سپس دستور switch را به شکل زیر اصلاح کنید: من فقط مورد ۲ را انجام می دهم بقیه موارد را نیز به همین شکل تصحیح کنید:



case 2:
if($db === 0)
echo '<span class="fi icon-circle m_red dragred"></span>';
else
echo '<span class="fi icon-circle m_red"></span>';
break;

ali_sed
جمعه 03 آبان 1398, 19:06 عصر
این نکته هم اضافه کنم که شما نباید عملگر بیتی & را بجای عملگر شرطی && که معادل and می باشد جابجا استفاده کنید. در شرطها از && استفاده کنید و برای or هم از || استفاده کنید.

Salazar.mi
جمعه 03 آبان 1398, 19:57 عصر
این نکته هم اضافه کنم که شما نباید عملگر بیتی & را بجای عملگر شرطی && که معادل and می باشد جابجا استفاده کنید. در شرطها از && استفاده کنید و برای or هم از || استفاده کنید.
بی نهایت ممنونم
واقعا نمیدونم چجوری تشکر کنم
امیدوارم هر چی از خدا میخواین بهتون بده
من درستش کردم مطابق آنچه شما گفتین
اما راستش یک مشکل دیگه درست شد
اینکه الان همه اونایی که مثلا data= 2 و db=0 مقدار میگیرن
منظورم اینه من میخواستم هر خونه ای فقط خونه سطر بعد و ستون بعد خودش اجازه drop بده
نه همه اونایی که شرایط data=0 , و dg=2
خواهش میکنم کمکم کنید
بی نهایت ممنون میشم


<script>
$(function () {
$(".dragred").draggable({
revert:"invalid",
});
$(".dropred").droppable({
drop: function (event, ui) {
$(this).css("background-color","greenyellow")
},
out: function (event, ui) {
$(this).css("background-color", "")
}
});
});
</script>






<table cellpadding="0" cellspacing="0" class="nth_table" cellpadding="10">
<?php
for($j=1;$j<9;$j++)
{

?>
<tr>
<?php
for($i=1;$i<9;$i++)
{
?>
<td>
<?php
$data=$a['sotoon'.$i]["kh".$j];

//echo $data;

$k=1;
while($k>0)
{
$k--;
if(($i+1)>=9)
{
$db=6;
continue;
}


elseif(($j+1)>=9)
{
$db=6;
continue;
}


$db=$a['sotoon'.($i+1)]["kh".($j+1)];
//echo $db;
}



$kk=1;
while($kk>0)
{
$kk--;
if(($i-1)<=0)
{
$dg=6;
continue;
}


elseif(($j-1)<=0)
{
$dg=6;
continue;
}


$dg=$a['sotoon'.($i-1)]["kh".($j-1)];
//echo $dg;
}
switch($data)
{
case 0:
if($dg===2)
{
echo '<span class="dropred border"></span>';
echo "ok";
}
elseif($db===1)
echo '<span class="dropblue"></span>';
else
echo '<span class="khali"></span>';
break;


case 1:
if($dg===0)
echo '<span class="fi icon-circle m_blue dragblue"></span>';
else
echo '<span class="fi icon-circle m_blue"></span>';


break;


case 2:
if($db===0)
echo '<span class="fi icon-circle m_red dragred"></span>';
else
echo '<span class="fi icon-circle m_red"></span>';
break;
/*
case 3:
echo $data;
echo '<span class="fi icon-circle m_ki_blue"></span>';
break;


case 4:
echo $data;
echo '<span class="fi icon-circle m_ki_red"></span>';
break;


case 5:
echo $data;
echo '<span class="por"></span>';
break;


default:
echo "";
*/
}







?>

</td>

<?php
}
?>
</tr>

<?php
}


?>

</table>

ali_sed
جمعه 03 آبان 1398, 20:37 عصر
اگر کل پروژه را توضیح دهید راحت تر می شود راهنمایی کرد.
نحوه انجام بازی به چه شکلی است مثلا کاربر یک مهره را درگ می کند روی خانه مورد نظر؟
بجای اینکه تمامی حرکات ممکن را با php بررسی و محدود کنید. می توانید پس از انجام حرکت توسط کاربر آن را با جاوااسکریپت بررسی کنید و اگر حرکت صحیح نبود پیام خطایی به کاربر نمایش دهید.
از روی کدهای شما به نظر میاد قصد دارید که وقتی کاربر در حال درگ یک مهره می باشد پس زمینه خانه های قابل قبول را قرمز کنید. خب باید این کار را نیز با جاوا اسکریپت انجام دهید.

Salazar.mi
جمعه 03 آبان 1398, 20:51 عصر
اگر کل پروژه را توضیح دهید راحت تر می شود راهنمایی کرد.
نحوه انجام بازی به چه شکلی است مثلا کاربر یک مهره را درگ می کند روی خانه مورد نظر؟
بجای اینکه تمامی حرکات ممکن را با php بررسی و محدود کنید. می توانید پس از انجام حرکت توسط کاربر آن را با جاوااسکریپت بررسی کنید و اگر حرکت صحیح نبود پیام خطایی به کاربر نمایش دهید.
از روی کدهای شما به نظر میاد قصد دارید که وقتی کاربر در حال درگ یک مهره می باشد پس زمینه خانه های قابل قبول را قرمز کنید. خب باید این کار را نیز با جاوا اسکریپت انجام دهید.

بی نهایت ممنونم که جواب دادین
نو بازی هر مهره میتونه به صورت اریبی یه سمت جلو حرکت کنه

اما هر سری که نوبتش میشه فقط میتونه یه مهره را جابه جا کند
یعنی تو جاوااسکریپت یا جی کویری میشه طوری نوشت که اگر یه مهره از قرمزها مثلا حرکت کرد دیگه باقی مهره ها حتی اگر شرایط حرکت را دارن اجازه حرکت نداشته باشن؟؟؟؟
من طوری نوشتم که اگر مهرمون drag شد در خونه مورد نظر background اون خانه سبز بشه
من فکر کردم باید بیام قانونا را با php بنویسم بعدش از جاوا اسکریپت استفاده کنم اشتباه فکرکردم؟؟؟
چجوری باید بگم خانه هایی که شرایط drop دارن رنگشون عوض بشه و با انتخاب یه حرکت دیگه اجازه حرکت داده نشود؟؟؟؟
بی نهایت ممنون میشم جواب دادین
بی نهایتتتتتت

ali_sed
جمعه 03 آبان 1398, 21:20 عصر
نگفتید بازی دونفره هست یا یک شخص با کامپیوتر بازی می کنه. و اینکه این دو نفر بصورت ریموت با هم بازی می کنند یا مثلا دونفره روی یک سیستم است؟ حرکت یک بازیکن چطور به بازیکن دیگر ارسال می شود. طبیعی هست که وقتی بازیکن دوم حرکتش را انجام داد دوباره نوبت بازیکن اول هست و باید بتواند مهره خود را حرکت دهد.

در مورد گیم پلی هم کمی توضیح دهید. مثلا فرض کنیم به اینصورت است که نوبت بازیکن اول است روی یک مهره کلیک می کند. با جاوااسکریپت موقعیت های ممکن جهت حرکت آن مهره را مشخص کنید. حال کاربر روی یکی از این خانه ها کلیک می کند و حرکت کاربر تکمیل می شود. حال نوبت بازیکن دوم است (فرض کنیم در یک متغیر نوبت بازیکن ها را ذخیره می کنید) در این حالت بازیکن اول دیگر قادر به حرکت دادن مهره ها نیست تا بازیکن دوم حرکت خود را انجام دهید. (حال اگر بازی دونفره و بصورت ریموت باشد میتوان با استفاده مثلا socket.io حرکات و نوبت بازیکن ها را با هم تبادل کرد)

البته مقرارت دیگری نیز این بازی دارد اگر شما مهره حریف را بزنید می توانید حرکت بعدی را نیز به عنوان جایزه انجام دهید. یا اینکه اگر در موقعیت زدن مهره حریف باشید نمی توانید حرکت خالی انجام دهید و باید حتما مهره حریف را بزنید. یا اینکه به عقب نمیشه حرکت کرد مگر اینکه امکان زدن مهره حریف را داشته باشید. یا ...

حتی می توانید به عنوان راهنما جهت ساده کردن بازی وقتی نوبت یک بازیکن می شود مهره هایی که بازیکن قادر به حرکت دادن آنها است مشخص کنید. وقتی روی یکی از آنها کلیک کرد خانه هایی که می تواند آن مهره را حرکت دهید مشخص کنید و ...

Salazar.mi
جمعه 03 آبان 1398, 21:43 عصر
یه چیزی بگم شما خیلی کامل دارین توضیح میدین
من هنوز همین اول کار موندم
این پروژه برای درس یادگیری ماشین
گفتن اول باید هر دو طرف خودشون با هم بازی کنن تا یادگیری انجام بشه
من میخواستم قوانین را با php بنویسم بعد همین کاری که گفتین را انجام بدم اینکه با جاوااسکریپت مکان هایی که میشه drop در آنها رخ بده را مثلا سبز رنگ کند
ک نتونستم
اما حالا که مطمین شم راه اینه روش بیشتر فکر میکنم
بی نهایت ممنونم ارتون
در مورد اینکه نوبت چه کسی هست و ...
من یه چیزای کمی در مورد ajax قبلا بلد بودم
فکر کردم میشه با اونها
نمیشه؟؟؟
و صادقانه بگم ریموت را
socket.io چیزی نمیدونم
اگر به نظر شما راه حل در اینهاست
تا برم در موردشون بخوانم
حالا که شما پرسیدین این موارد را حقیقتا گیج شدم چه کنم
ممنون میشم کمکم کنید

ali_sed
جمعه 03 آبان 1398, 22:26 عصر
اگر هدف درس یادگیری ماشین هست و قرار نیست این بازی در دنیای واقعی پیاده بشه نیازی به این کارها نیست. شما حتی می توانید تمامی مراحل را فقط با جاوااسکریپت انجام دهید. و اگر لازم هست حرکات را با همان آجاکس به سرور ارسال کنید.

توصیه می کنم یک نسخه بازی چکرز کامپیوتری را ملاحظه کنید کمک میکنه ایده بگیرید برای پیاده کردن گیم پلی. سعی کنید تا حد ممکن ساده پیاده کنید.

اول از همه ساختار بسیار ساده ای برای کدهای html و استایل ها در نظر بگیرید. تا بورد و مهره ها به ساده ترین شکل ممکن پیاده شود به نحوی که با دیدن کلاس یک خانه به توان به خالی بودن یا حاوی مهره قرمز یا آبی بودن آن پی برد. (حتی مهره ها هم تنها با تغییر کلاس یک خانه بتوان تغییر داد)
بعد فرض کنید نوبت حرکت بازیکن یک هست تمامی خانه هایی که کلاس آنها بلو است را به راحتی با jquery انتخاب کنید و برای تک تک آنها وضعیت حرکتشان را بررسی کنید. ابتدا حالتی که ممکن است مهره ای قادر به زدن مهره حریف باشد را در نظر بگیرید. بعد حالتی که مهره قادر به حرکت عادی باشد را بررسی کنید. (با توجه به اینکه اگر مهره ای قادر به زدن مهره حریف باشد بقیه مهره ها را نمی تواند حرکت دهد پس بهتر است اول زدن مهره حریف را بررسی کنید و اگر چنین حالتی وجود نداشت به بررسی حرکت عادی بپردازید) حال فرض کنیم در ابتدای بازی هستیم و ۴ مهره جلویی قادر به حرکت رو جلو هستند. پس زمینه یا بوردر آنها را با افزودن یک کلاس به تگ آن خانه ها تغییر دهید. حال کاربر روی یکی از این خانه ها کلیک می کند تا مهره مورد نظر را برای حرکت انتخاب کند. روی ایونت کلیک خانه ها تابعی اضافه کنید. اگر مهره موجود در خانه قادر به حرکت باشد خانه های مجاز را با افزودن کلاس رنگی کنید. کافیست ابتدا حالت زدن مهره حریف را بررسی کنید و سپس حالت حرکت عادی. برای زدن مهره حریف ۴ خانه اطراف آن را بررسی کنید اگر مهره حریف بود از خالی بودن خانه بعد از آن مطمئن شوید و برای بررسی حرکت عادی نیز تنها ۲ خانه جلویی آن را بررسی کنید.

خودتان شروع کنید به نوشتن باز هم اگر سوالی داشتید بپرسید.

در ضمن اگر ضرورتی ندارد می توانید از بخش راهنما (تغییر پس زمینه رنگ ها) صرف نظر کنید مثلا یک نمونه ساده از بازی را در لینک زیر ملاحظه کنید

https://www.mathsisfun.com/games/checkers-2.html

Salazar.mi
جمعه 03 آبان 1398, 23:11 عصر
اگر هدف درس یادگیری ماشین هست و قرار نیست این بازی در دنیای واقعی پیاده بشه نیازی به این کارها نیست. شما حتی می توانید تمامی مراحل را فقط با جاوااسکریپت انجام دهید. و اگر لازم هست حرکات را با همان آجاکس به سرور ارسال کنید.

توصیه می کنم یک نسخه بازی چکرز کامپیوتری را ملاحظه کنید کمک میکنه ایده بگیرید برای پیاده کردن گیم پلی. سعی کنید تا حد ممکن ساده پیاده کنید.

اول از همه ساختار بسیار ساده ای برای کدهای html و استایل ها در نظر بگیرید. تا بورد و مهره ها به ساده ترین شکل ممکن پیاده شود به نحوی که با دیدن کلاس یک خانه به توان به خالی بودن یا حاوی مهره قرمز یا آبی بودن آن پی برد. (حتی مهره ها هم تنها با تغییر کلاس یک خانه بتوان تغییر داد)
بعد فرض کنید نوبت حرکت بازیکن یک هست تمامی خانه هایی که کلاس آنها بلو است را به راحتی با jquery انتخاب کنید و برای تک تک آنها وضعیت حرکتشان را بررسی کنید. ابتدا حالتی که ممکن است مهره ای قادر به زدن مهره حریف باشد را در نظر بگیرید. بعد حالتی که مهره قادر به حرکت عادی باشد را بررسی کنید. (با توجه به اینکه اگر مهره ای قادر به زدن مهره حریف باشد بقیه مهره ها را نمی تواند حرکت دهد پس بهتر است اول زدن مهره حریف را بررسی کنید و اگر چنین حالتی وجود نداشت به بررسی حرکت عادی بپردازید) حال فرض کنیم در ابتدای بازی هستیم و ۴ مهره جلویی قادر به حرکت رو جلو هستند. پس زمینه یا بوردر آنها را با افزودن یک کلاس به تگ آن خانه ها تغییر دهید. حال کاربر روی یکی از این خانه ها کلیک می کند تا مهره مورد نظر را برای حرکت انتخاب کند. روی ایونت کلیک خانه ها تابعی اضافه کنید. اگر مهره موجود در خانه قادر به حرکت باشد خانه های مجاز را با افزودن کلاس رنگی کنید. کافیست ابتدا حالت زدن مهره حریف را بررسی کنید و سپس حالت حرکت عادی. برای زدن مهره حریف ۴ خانه اطراف آن را بررسی کنید اگر مهره حریف بود از خالی بودن خانه بعد از آن مطمئن شوید و برای بررسی حرکت عادی نیز تنها ۲ خانه جلویی آن را بررسی کنید.

خودتان شروع کنید به نوشتن باز هم اگر سوالی داشتید بپرسید.

در ضمن اگر ضرورتی ندارد می توانید از بخش راهنما (تغییر پس زمینه رنگ ها صرف نظر کنید) مثلا یک نمونه ساده از بازی را در لینک زیر ملاحظه کنید:

https://www.mathsisfun.com/games/checkers-2.html
بی نهایت ازتون ممنونم
خیلی خیلی خیلی خیلی خیلی خیلی ممنونم ازتون
تشکر