شخصية لاس فيغاس ، أو لعبة في امتداد المتصفح


في الآونة الأخيرة ، بدأت أنا وصديق نتحدث عن ألعاب الورق. قال إنه لا يستطيع لعب البوكر إلا أنه لم يفعلها منذ فترة طويلة ، لأنه نسي كل المجموعات. لذلك تحدثوا ... تذكرت أنه قبل عامين كتبت خمس ألعاب ورق ، بما في ذلك بوكر تكساس هولدم ، حيث يمكنك في أي وقت خلال اللعبة أن ترى ليس فقط المجموعات المجمعة ، ولكن أيضًا جميع الخيارات المحتملة مع البطاقات التي لم تفتح بعد. يمكن أن يصبح هذا أداة تعليمية ويساعد على تحديث القواعد في عملية اللعب باستخدام الروبوتات.

قررت إعادة صياغة شفرتي القديمة ، بالإضافة إلى تعديل الرسومات. كان التصميم دائمًا صعبًا بالنسبة لي ، فهو ليس ملكي. بالاعتماد على بعض الإلهام على الأقل ، قمت بتشغيل الموسيقى التصويرية من GTA San Andreas ، وهي موسيقى الريف ، من راديو K-Rose. يبدو لي أنه ينقل أجواء لاس فيغاس بشكل جيد. لم أكن هناك أبدًا ، لكنها بالتأكيد تنقل! أقسم لنجم شريف بلدي. (إذا كان أي شيء - إنه بلاستيكي ، لذا ليس من المؤسف ...) ولم أكن كسولًا جدًا للذهاب إلى اللعبة الأسطورية نفسها والركوب حول لاس فينتوراس ، نموذج أولي لعاصمة المقامرة في العالم.


نعم ، أنا مدرك أن لاس فيجاس تقع في نيفادا وليس في ولاية تكساس. لكن هذه الألعاب مرتبطة ، بعد كل شيء ، بـ Vegas. تم جلب تكساس هولدم إلى هناك وبعد ذلك اكتسبت شعبية واسعة. Vegas هي منتج لعبة.

منذ بضع سنوات ، لسبب ما ، نشرت لعبتي فقط في متجر Windows ، والذي لا يستخدم الكثير من حركة المرور. على الرغم من أنه ربما قريبًا ، بسبب توقف نظام التشغيل Windows 7 والانتقال الهائل إلى 10 ، فإن متجر التطبيقات هذا سيحصل على رياح ثانية. نتمنى له حظا سعيدا ونتمسك بقبضته في فيغاس. لكن المقالة ليست حول هذا ، ولكن عن الريح الثانية في لعبتي. إنه مكتوب بلغة Javascript خالصة ، وقررت اليوم أنه يمكن أن يعمل بشكل جيد كملحق متصفح للمتصفح Chrome و Firefox من المتاجر الإضافية المقابلة ، وكذلك في شكل تجميع لـ Windows 7-10 استنادًا إلى Chrome.

تسمى اللعبة "Poker 3 Bags" وتتضمن خمس ألعاب: "Texas Hold'em Poker" و "Throwing Fool" و "Czech Fool" و "Three Sticks" ولعبة المؤلف "3 Bags". تتوفر فقط الألعاب التي تحتوي على روبوت على الكمبيوتر المحلي.

بلد


لذا ، عن موسيقى الريف. اقترحت الألحان من GTA San-Andreas أنه سيكون من الجميل إضافة بعض موضوعات رعاة البقر إلى اللعبة: بعد كل شيء ، ستكون لعبة بوكر تكساس هولدم هنا هي اللعبة الرئيسية. وضعت قبعة رعاة البقر ومسدسات على عصابة الرأس أثناء وضع البطاقات.

Firefox

وأيضًا - أيقونة قبعة صغيرة على يسار اسم اللعبة في القائمة الرئيسية.

جوجل كروم

وسيتم عرض القبعة على صورة الملف الشخصي للفائز. التصميم العام ، وهو نوع من المهرج ، قررت عدم تغيير جذري.

التحسينات


بالإضافة إلى العناصر الرسومية ، فقد تغير الرمز أيضًا في اللعبة. نقلت كل شيء إلى نسخة جديدة من محركي. ومع ذلك ، يقال المحرك بصوت عال جدا فيما يتعلق بهذه اللعبة. المحرك يدعم الرسومات ثلاثية الأبعاد ، ولكن هنا - فقط العفاريت من أوراق اللعب على متن طائرة. ولكن بعد ذلك قمت بتحسين الرسوم المتحركة وجعلتها متعددة الخيوط. (بالطبع ، لا يوجد في جافا سكريبت تعدد مؤشرات حقيقي ، على الأقل عند العمل مع نافذة متصفح. يتم تحقيق التوازي من خلال التكرار المتسلسل عبر جميع الرسوم المتحركة لكل مكالمة.)

هناك المزيد من الخيارات. أولاً ، ظهرت قائمة داخل اللعبة ، يمكنك من خلالها التحكم في مقياس الصورة. على سبيل المثال:

var scaleValue=0.5;
var scale = 'scale('+scaleValue+')';
document.body.style.webkitTransform = document.body.style.msTransform = document.body.style.transform = scale; 

هذا سمح لك بملاءمة الصورة في نافذة المتصفح بأي حجم متاح. تعمل الوظيفة جنبًا إلى جنب مع حدث تغيير حجم النافذة ؛ يتم حساب المقياس المطلوب مسبقًا. يمكن أيضًا تعديل هذا الأخير يدويًا. في السابق ، كانت هذه اللعبة على جهاز الكمبيوتر الخاص بي تبدو صغيرة جدًا ، وعلى الهاتف كانت كبيرة جدًا وظهرت أشرطة التمرير. أخيرا ، تم حل هذه المشكلة. صحيح ، الآن ، على الأرجح ، سيكون عليك ربط الواجهة الثانية للعبة - الصورة الشخصية ، للأجهزة المحمولة ، خاصة للهاتف ... حجم خط المتصفح ، الذي يأكل جزءًا كبيرًا من الشاشة على الهاتف ، ليس جيدًا أيضًا. ولكن هناك زر لتوسيع اللعبة إلى ملء الشاشة.

Android 7.0 و Windows 8.1

Second. لقد أنهيت لعبة البوكر Texas Hold'em. الآن الرهان الشامل متاح ، والذي لم يكن موجودًا من قبل ، بالإضافة إلى اختيار حجم الرهان اليدوي. بدأت الرقائق في جميع الألعاب في التحرك بشكل أكثر واقعية ووفقًا لفئتها: أي ، على سبيل المثال ، إذا قمت برهان من 15 ، فستترك رقاقاتان - 5 و 10 اللاعب من الطاولة ، لتشكل نوعًا من كومة هناك. في السابق ، تم نقل شريحة شرطية واحدة فقط. بالإضافة إلى ذلك ، يمكنهم الآن لعب 4 ، ولكن حتى 10 لاعبين. حسنًا ، وغيرها من التحسينات الطفيفة التي ربما لا يجب إيقافها.

الجزء الفني


كما ذكرت من قبل ، فإن اللعبة مكتوبة بلغة Javascript فقط دون استخدام أي مكتبات تابعة لجهات خارجية (حتى JQuery غير مستخدم). توجد مكتبة واحدة فقط ، هي المكتبة الخاصة بي ، والتي تنفذ وظائف عرض واجهة على علامة قماشية. في الواقع ، كل محتوى اللعبة هو جزء من الواجهة. في هذا الأخير ، لدي شيء مثل قائمة مع دعم. على سبيل المثال ، يمكنك استخدام طاولة الألعاب نفسها لقائمة "الخروج" ، والتي تتكون من زر واحد يحمل نفس الاسم ، مثل "الخلفية". وسيكون كافياً لعرض هذه القائمة بحيث يظهر جدول وزر على اللوحة. علاوة على ذلك ، لا يلزم الزر الاستلقاء على الركيزة - يمكن أن يكون أيضًا قريبًا. أو ، على سبيل المثال ، قد لا تكون الركيزة على الإطلاق. بالإضافة إلى ذلك ، لكل قائمة ، يمكنك عرض الرموز المتحركة ذات الصلة ، أو "الأقمار الصناعية" التي ليست أزرارًا. بالنسبة لهم ، وكذلك الأزرار ،يتم تعيين الإحداثيات النسبية.

شجرة الوثيقة (DOM) عبارة عن كتلتين من قماش الرسم مع تحديد الموقع المطلق بحجم نافذة المتصفح. يتم عرض جميع النقوش المتحركة ، كما هو مطلوب بواسطة اللوحة القماشية ، باستخدام drawImage (). تقع طبقة الخلفية (التدرج) وعناصر الواجهة على الطبقة السفلية ، ويتم استخدام الطبقة العليا للرسوم المتحركة. بالطبع ، سيكون من الممكن قصر نفسي على طبقتين فقط ، لكنني قررت إضافة طبقتين أخريين. لذلك في محرك واجهة المستخدم الخاص بي ، يتم إنشاء DOM:

m3d.ui.initHtml([
	m3d.ui.htmlCanvas('canvbk'),
	m3d.ui.htmlControlsHand(),
	m3d.ui.htmlDiv('help', 0,0),
	m3d.ui.htmlCanvas('canvblack')
]);

  • htmlCanvas عبارة عن طبقة بها قماش تتناسب مع حجم نافذة المتصفح ؛ يتم استخدام اسمها ('canvbk') بحيث يمكنك تعطيل الطبقة إذا لزم الأمر (في حالة هذا العنصر فهي غير مطلوبة على الإطلاق). هذه الكتلة لعرض تدرج الخلفية والواجهة.
  • htmlControlsHand — , , . , DOM . ( ).
  • htmlDiv — div- id='help', , , . . ( id display='block', display='none' : m3d.ui.layersDiv.help.div.style.display='block'; ). htmlDiv - (, ). , , , (0,0).
  • htmlCanvas('canvblack') — canvas, . «» . .

وبالتالي ، تبقى الطبقتان السفليتان فقط قيد التشغيل بشكل دائم. تتم معالجة جميع العناصر المحددة من خلال m3d.ui.initHtml بواسطة وظيفة تغيير الحجم ، وعندما يتم تغيير حجم نافذة المتصفح ، يتم ضبطها.

محرك الرسوم المتحركة هو الخاص بك أيضًا. وتتمثل وظيفتها في تغيير المعلمات ، من القيم الأولية المعطاة إلى القيم النهائية ، لفترة معينة. يمكن أن يكون هذا ، على سبيل المثال ، الإحداثيات على محورين (لثلاثية الأبعاد - على طول ثلاثة) وزاوية التدوير. بشكل عام ، عدد المعلمات لرسم متحرك واحد غير محدود ، ويمكنك التوصل إلى صيغة لتغيير أي شيء. أخيرًا ، في وظيفة رد الاتصال ، حيث يتم وضع العفريت ، يتم إرسال القيم الحالية لجميع المعلمات بتردد يعتمد على قوة معالجة النظام. قد تنخفض Fps ، لكن إجمالي وقت الرسوم المتحركة لن يتغير. تقبل اللوحة العلوية أحداث النقر (وعربة يدوية للأجهزة المحمولة) مع تحديد إحداثيات الزر الذي يجب الضغط عليه في الواجهة.

تعمل الرسوم المتحركة مثل هذا. تتم إزالة الكائن الذي تريد نقله من الطبقة السفلية (يجب أن يكون الكائن "قمرًا صناعيًا" يتم إيقاف تشغيله للتو) ، ويتم إعادة رسم الواجهة بالكامل ، أي جميع "القوائم ذات الركيزة" المفتوحة (وفقًا لذلك ، لم يعد القمر الصناعي موجودًا ، يتم حذفه) ، الكائن ترتفع إلى الطبقة العليا ، وتتحرك هناك ، ثم تختفي ، وتسقط أخيرًا إلى الطبقة السفلية ، حيث إما ترتبط بقائمة أخرى مع ركيزة كقمر صناعي ، أو علاوة على ذلك ، ولكن مع إحداثيات نسبية مختلفة. يتم إعادة رسم القائمة الموجودة على الطبقة السفلية مرة أخرى. يتم ترك وظيفة دمج محتوى الطبقات للمتصفح ، وهي تقوم بذلك في الأصل. لا يتغير DOM أثناء اللعبة بأي شكل من الأشكال ويتكون دائمًا ، في الواقع ، من لوحتين متراكبتين على بعضهما البعض. ما لم يتم تغيير حجم نافذة المتصفح ، يتم إعادة رسم كل المحتوى مرة واحدة ، على نطاق جديد بالفعل.

كل شيء يعمل على Windows و Android في Chrome و Firefox. سواء من الخادم المحلي أو من نظام الملفات عن طريق فتح index.html. يترك IE11 التخطيط. يبدو أن أحجام اللوحات أو المقياس معرّفة بشكل غير صحيح هناك ، مما يؤدي إلى ظهور أشرطة التمرير. على الرغم من أن اللعبة نفسها تعمل بشكل جيد. لم أتعامل مع هذا: من غير المحتمل أن يستخدم أي شخص هذا المتصفح القديم. في الإصدار القديم من Edge ، كل شيء يعمل بشكل جيد.

IE11

لم أختبره على نظامي التشغيل iOS (+ MacOS) و Linux ، لكني لا أرى أي سبب لعدم عمله ، لأن كل شيء يتم ببساطة.

حول التوطين. 2 لغات معتمدة - الروسية والإنجليزية. قم بالتبديل بالنقر على العلم في القائمة الرئيسية. من الناحية الفنية ، يتم تنفيذ ذلك في شكل ملفين js مع صفائف ترابطية من العبارات بلغات مختلفة ، بالإضافة إلى صور مختلفة ، في حالة تضمين بعض النص في الصورة: على سبيل المثال ، نص مدرج أو متدرج.

شارك مع العالم


لم أستطع التوصل إلى أي شيء أفضل من الذهاب إلى متاجر ملحقات المتصفح لمتصفح Chrome و Firefox. حسنًا ، لقد صممت أيضًا لنظام التشغيل Windows استنادًا إلى Chrome.

هذه النسخة من اللعبة هي بالأحرى نسخة تجريبية. يتطلب المزيد من الصقل. تم التخطيط لإصدار تجريبي ، مع ثلاث مباريات ، لمدة 30 يومًا. والنسخة المدفوعة بخمس مباريات بلا حدود. سيكون لدى الأخير أيضًا فرصة لوضع رهان شامل في البوكر ، وأيضًا ، سيتم أخذ أقدمية البطاقات المجمعة في الاعتبار عند تحديد الفائز. الآن في النسخة التجريبية هناك ثلاث مباريات ولا توجد حدود زمنية. في وقت لاحق ، سيتحول هذا العرض التوضيحي إلى إصدار تجريبي وسيتم إصدار إصدار آخر مكتمل بالفعل.

ملحق المستعرض


لذا ، فإن أول شيء قررت وضع اللعبة في متاجر إضافات Chrome و Firefox. لدي حسابات مطور وبعض الخبرة ، لأنني نشرت بالفعل أحد ملحقات المستعرض الخاصة بي هناك. بالمناسبة ، إذا كان لدى أي شخص ChromeOS ، فسيكون من المثير للاهتمام معرفة ما إذا كانت لعبتي تعمل هناك. ليس لدي فرصة للتحقق.

هناك خياران لعرض محتوى الإضافة - في نافذة أعلى واجهة المتصفح أو في علامة تبويب منفصلة. نظرًا لأن المحتوى يشغل مساحة كبيرة إلى حد ما وسيؤدي إلى حظر علامة التبويب المفتوحة الحالية إلى حد كبير ، فقد اخترت الخيار الثاني.

لا يوجد شيء معقد في إنشاء ملحق مستعرض يستند إلى صفحة ويب ، والتي هي في جوهرها لعبتي. ما عليك سوى إضافة ملف البيان والرموز ولقطات الشاشة. في Chrome Webstore ، يمكنك أيضًا إضافة فيديو باستخدام أسلوب اللعب ، وهو ما فعلته. ثم قام بتصوير مقطع فيديو آخر بالفعل مع فايرفوكس:



كان حجم المتصفح الإضافي لمتصفح فايرفوكس 4.8 ميغابايت. اللعبة في شكل غير معبأ - 5.2 ميغابايت. معظم الحجم ، بالطبع ، أخذ رسومات. رمز اللعبة نفسه هو نفسه تمامًا لكلا المستعرضين ، فهو يختلف فقط في اثني عشر سطرًا من التجليد المسؤول عن فتح علامة التبويب مع اللعبة من خلال النقر على أيقونة اللعبة في لوحة المتصفح على يمين سطر الأوامر.

نظرًا لأن الوظيفة الإضافية لا تتطلب أي أذونات خاصة على الإطلاق ولا تحتاج إلى الوصول إلى أي خادم أو بيانات شخصية ، فقد كان الإشراف في كلا المخزنين فوريًا تقريبًا ، في يوم التنسيب.

Windows القابل للتنفيذ وإصدارات أخرى


لقد أنشأت التجميع على محرك Chrome باستخدام أبسط أداة مساعدة لـ Windows Web2Exe وقمت بتحميله إلى متاجر Itch و Indiexpo ، حيث توجد إحدى ألعابي بالفعل. كان حجم هذا التجميع 115 ميغا بايت. وبعد التعبئة مع برنامج إنشاء المثبتات ، تبين أن حزمة التوزيع للتنزيل تبلغ 40 ميجابايت في الحجم.

بناء لنظام التشغيل Windows 7 - 10

لم أنشر هذا الإصدار من اللعبة في متجر Windows كتطبيق Windows 10 ، على الرغم من أن لدي حساب مطور هناك. لقد قمت منذ فترة طويلة بهدم Visual Studio. علاوة على ذلك ، كانت هناك قصة مثيرة للاهتمام. لقد قمت بترخيص Windows 8.1 على الكمبيوتر اللوحي وهو يناسبني تمامًا. وعلى جهاز الكمبيوتر - Windows 10. بدءًا من بعض إصدارات Visual Studio - هنا لا أتذكر بالضبط - إما أنه لا يسمح لك بإنشاء تطبيق جافا سكريبت مع دعم Windows 8.1 على الإطلاق ، أو لا تريد تضمين الإعلانات فيه إذا كان مصممًا ، باستثناء "عشرات" ، أيضًا على نظام التشغيل Windows 8.1 الأقدم (لكني أرغب في الحصول على إمكانية تحقيق الدخل). بشكل عام ، لقد نسيت بالفعل ما هو موجود بالضبط ، ولكن بعض المشاكل كانت مرتبطة بدقة بقيود الدعم 8.1. لكن من الواضح أنني أقوم بتنزيل لعبتي من هذا المتجر فقط ،وأود أن أتمكن من تشغيله على جهازي اللوحي. المتجر نفسه ، في رأيي ، لا يروج للتطبيقات بأي شكل من الأشكال. وبالتالي لم أقرر بعد ما إذا كنت أرغب حقًا في وضع Visual Studio الضخم على بطاقة MicroSD بسعة 32 جيجابايت على الجهاز اللوحي مرة أخرى ... يعمل حساب المطور فقط معها. أو ، بعد أن ميزت بين الإيجابيات والسلبيات ونظراً لعدد زوار متجر Microsoft ، ما عليك سوى الاستمرار في كتابة التعليمات البرمجية مثل الكمبيوتر المحمول وعدم العبث ببيئات التطوير العملاقة على الإطلاق؟ من المؤسف أنه لا يمكنك فقط تنزيل الأرشيف مع التطبيق من خلال النموذج على الموقع ، حيث يتم تنفيذه ، على سبيل المثال ، لإضافات المتصفح.هل هو قوي للغاية وأريد أن أضع Visual Studio الضخم مرة أخرى على بطاقة MicroSD بسعة 32 جيجابايت على الجهاز اللوحي ... يعمل حساب المطور فقط معها. أو ، بعد أن ميزت بين الإيجابيات والسلبيات ونظراً لعدد زوار متجر Microsoft ، ما عليك سوى الاستمرار في كتابة التعليمات البرمجية مثل الكمبيوتر المحمول وعدم العبث ببيئات التطوير العملاقة على الإطلاق؟ من المؤسف أنه لا يمكنك فقط تنزيل الأرشيف مع التطبيق من خلال النموذج على الموقع ، حيث يتم تنفيذه ، على سبيل المثال ، لإضافات المتصفح.هل هو قوي للغاية وأريد أن أضع Visual Studio الضخم مرة أخرى على بطاقة MicroSD بسعة 32 جيجابايت على الجهاز اللوحي ... يعمل حساب المطور فقط معها. أو ، بعد أن ميزت بين الإيجابيات والسلبيات ونظراً لعدد زوار متجر Microsoft ، ما عليك سوى الاستمرار في كتابة التعليمات البرمجية مثل الكمبيوتر المحمول وعدم العبث ببيئات التطوير العملاقة على الإطلاق؟ من المؤسف أنه لا يمكنك فقط تنزيل الأرشيف مع التطبيق من خلال النموذج على الموقع ، حيث يتم تنفيذه ، على سبيل المثال ، لإضافات المتصفح.

أخطط في المستقبل القريب لنشر اللعبة كتطبيق i-frame على الشبكات الاجتماعية VKontakte و Facebook. وفقًا لقواعدهم ، لا يزال من الضروري ربط بعض الوظائف الاجتماعية في اللعبة ، مثل جدول تصنيف أفضل اللاعبين وما إلى ذلك.

ربما لا يزال من الجدير البحث في اتجاه سوق Google Play. على حد علمي ، يمكن الآن استضافة PWA (تطبيقات الويب التقدمية) هناك. لكن ليس لدي حساب مطور ولم أحسبه بعد. من ناحية أخرى ، يمكن وضع PWA على موقع الويب الخاص بك ، حيث سيتم تثبيت اللعبة على الهاتف ، وسيتم إنشاء رمز ، وسيبدو كل شيء مثل تطبيق Android عادي. على الأرجح ، من المنطقي أن تذهب إلى المتجر فقط بميزانية إعلانية كبيرة ، وليس لدي. بشكل عام ، لا توجد ألعاب على الأجهزة المحمولة حتى الآن. أعتقد أنني سأقوم ببساطة بنشره على الموقع للعب من خلال المتصفح وتثبيته كتطبيق PWA ، حتى لا يعتمد على اتصال الشبكة.

نعم ، يسرنا أن Google Play ، تمامًا مثل متجر Microsoft ، يجعل من الممكن تنزيل التطبيقات المكتوبة بلغة جافا سكريبت. لقد أحببت هذه الميزة ذات مرة في متجر Microsoft. من المؤسف أن هذا الأخير لا يحظى بشعبية خاصة. وهي مريحة للغاية - قمت بتنزيل 5.2 ميجا بايت فقط هناك (أي كود جافا سكريبت والصور) - وبذلك تكون قد انتهيت. بدون أي روابط كبيرة ومكتبات إضافية. ويتم استخدام المتصفح من تلك المثبتة في النظام. من الناحية المثالية ، سيوفر أيضًا للمستخدم فرصة اختيار المتصفح الذي سيعمل كـ "لاعب" للعبة. مايكروسوفت ، على ما أذكر ، عند تنزيل مثل هذا التطبيق من المتجر عرضت IE11 فقط. على أي حال ، تم إطلاق هذه النسخة القديمة من لعبتي فيها. ومع ذلك ، الآن ، عندما يتحولون إلى المحرك من Google ، ربما لا يوجد فرق. بالمناسبة ، Chrome أفضل من IE11 ،يعمل مع رسومات 3D WebGL ... ولكن هذا لا ينطبق على اللعبة ، التي تمت مناقشتها في هذه المقالة.

مجموع


الكل في الكل ، هذه اللعبة هي محاكاة. لا توجد لعبة على الإنترنت ، يمكنك التمرن فقط مع الروبوتات. الشيء الرئيسي هنا هو إلقاء نظرة على المجموعات التي قمت بجمعها ويمكن أن تجمعها. للقيام بذلك ، ما عليك سوى النقر على زر القائمة مع علامة استفهام أو على البطاقات الخاصة بك. يتم تمييز المجموعات الجاهزة بدائرة خضراء على اليمين ، تحتوي المجموعات المحتملة على بطاقات مظلمة يمكن أن تأتي من السطح. أخيرًا ، نظرًا لتوفر ألعاب أخرى في المجموعة ، يمكن استخدام هذا البرنامج ، على سبيل المثال ، كبديل لألعاب سوليتير بالملل. البرنامج مستقل في شكل تجميع لنظام Windows وفي شكل وظيفة إضافية للمتصفح ، ولا يتطلب عمله اتصالاً بالإنترنت.

أخيرا: قائمة المراجعة


الأماكن التي أرغب في الإقامة فيها وقد تم بالفعل:

+
متاجر ملحقات المستعرض - متاجر ألعاب Windows الرئيسية (Steam)
+ متاجر ألعاب Windows الثانوية
- متاجر الجوال
- الشبكات الاجتماعية
- موقع الويب

الإضافة في Firefox

All Articles