import pygame as pg
import random
WIDTH = 600
HEIGHT = 400
def game():
pg.init()
screen = pg.display.set_mode((WIDTH, HEIGHT))
bombTime = 120
time = pg.time.Clock()
FPS = 60
# Cannon
class Cannon:
def __init__(self):
self.cannonImg = pg.image.load('images/cannon.png')
self.cannonImg = pg.transform.scale(self.cannonImg, [self.cannonImg.get_width() // 2, self.cannonImg.get_height() // 2])
self.cannonRect = self.cannonImg.get_rect()
self.cannonRect.x = WIDTH // 2 - self.cannonImg.get_width() // 2
self.cannonRect.y = HEIGHT - self.cannonImg.get_height()
self.cannonSpeed = 0.1
self.dx = 0
def update(self):
mousePos = pg.mouse.get_pos()
if mousePos[0] - self.cannonRect.x > 0:
self.dx = 1
elif mousePos[0] - self.cannonRect.x < 0:
self.dx = -1
self.cannonRect.x += self.dx * self.cannonSpeed
def draw(self):
screen.blit(self.cannonImg, [self.cannonRect.x, self.cannonRect.y])
cannon = Cannon()
# Bomb
class Bomb:
def __init__(self):
bombs.append(self)
self.bombImg = pg.image.load('images/bomb.png')
self.bombImg = pg.transform.scale(self.bombImg, [self.bombImg.get_width() // 2, self.bombImg.get_height() // 2])
self.bombRect = self.bombImg.get_rect()
self.bombRect.x = random.randint(0, WIDTH - self.bombImg.get_width())
self.bombRect.y = 0 - self.bombImg.get_height()
self.bombSpeed = 3.5
def update(self):
self.bombRect.y += self.bombSpeed
def draw(self):
screen.blit(self.bombImg, [self.bombRect.x, self.bombRect.y])
bombs = []
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
quit()
screen.fill([255, 255, 255])
if bombTime == 120:
Bomb()
bombTime -= 1
elif bombTime == 0:
bombTime = 120
else:
bombTime -= 1
for bomb in bombs:
bomb.update()
bomb.draw()
cannon.update()
cannon.draw()
time.tick(FPS)
pg.display.update()
game()
const arr = [
['Орк', '8', '10', '50', '180', '100', '500'],
['Эльф', '6', '8', '20', '170', '60', '1000'],
['Дварф', '7', '12', '30', '150', '80', '1500'],
['Гоблин', '5', '6', '100', '140', '50', '200'],
['Гном', '4', '7', '10', '120', '40', '500'],
['Хоббит', '3', '5', '5', '100', '30', '1000']
];
const compareSecondLast = (arr1, arr2) => arr1[arr1.length - 2].localeCompare(arr2[arr2.length - 2]);
arr.sort(compareSecondLast);
console.log(arr);
const hero_slider = new Swiper('.hero-slider', {
modules: [Navigation, EffectFade],
loop: true,
effect: "fade",
fadeEffect: {
crossFade: true
},
navigation: {
nextEl: '.khutorok-slider-button_next',
prevEl: '.khutorok-slider-button_prev',
disabledClass: "khutorok-slider-button_disabled",
},
});
const slider_btn_next = document.querySelector('.khutorok-slider-button_next');
slider_btn_next.addEventListener('click', function() {
hero_slider.slideNext();
});
const slider_btn_prev = document.querySelector('.khutorok-slider-button_prev');
slider_btn_prev.addEventListener('click', function() {
hero_slider.slidePrev();
});
OnControllerColliderHit
с двумя строчными "c" в слове "Collider"OnControllerColliderHit
была вызвана, контроллер персонажа должен иметь прикрепленный к нему коллайдер и находиться в контакте с другим коллайдером. PlayerController
может быть не прикреплен к игровому объекту с контроллером персонажа. Проверь что он прикреплён к правильному обьекту.OnCollisionEnter
Эта функция вызывается, когда контроллер персонажа сталкивается с другим коллайдером, и может быть использована для достижения желаемого результата - отображения панели проигрыша.private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("obstacle"))
{
LosePanel.SetActive(true);
Time.timeScale = 0;
}
}
PlayerController
и будет отображать игровой объект LosePanel
и замораживать игру, когда контроллер персонажа столкнется с объектом с тегом obstacle
.Эта реализация требует наличия компонента Rigidbody
на игровом объекте препятствия. OnTriggerEnter
в скрипте PlayerController
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("obstacle"))
{
LosePanel.SetActive(true);
Time.timeScale = 0;
}
}
PlayerController
и будет отображать игровой объект LosePanel
и замораживать игру, когда контроллер персонажа столкнется с триггерным коллайдером на объекте с тегом obstacle
Но игровой объект препятствия должен иметь триггерный коллайдер, а не обычный коллайдер, чтобы эта реализация работала. OnControllerColliderHit
. public partial class Form1 : Form
{
bool isMouseDown = false;
Edge currentEdge = null;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
isMouseDown = true;
currentEdge = new Edge();
currentEdge.Start = e.Location;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
isMouseDown = false;
if (currentEdge != null)
{
currentEdge.End = e.Location;
edges.Add(currentEdge);
currentEdge = null;
}
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
if (currentEdge == null)
{
currentEdge = new Edge();
currentEdge.Start = e.Location;
}
else
{
currentEdge.End = e.Location;
this.Invalidate(); // redraw the form to show the line being drawn
}
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (currentEdge != null)
{
e.Graphics.DrawLine(stroke, currentEdge.Start, currentEdge.End);
}
}
}
const editableDiv = document.getElementById('myDiv');
editableDiv.addEventListener('input', function(event) {
const range = document.getSelection().getRangeAt(0);
const childNodes = editableDiv.childNodes;
let cursorPos = range.startOffset; // Сохранить текущую позицию курсора
for (let i = 0; i < childNodes.length; i++) {
const childNode = childNodes[i];
childNode.textContent = childNode.textContent + 'New text';
if (i === range.endContainer.parentNode.childNodes.length - 1) {
cursorPos = cursorPos + 7; // Длина добавленного текста
}
}
document.getSelection().removeAllRanges();
range.setStart(range.startContainer, cursorPos); // Восстановить позицию курсора
range.setEnd(range.startContainer, cursorPos);
document.getSelection().addRange(range);
});
const editableDiv = document.getElementById('myDiv');
editableDiv.addEventListener('input', function(event) {
const range = document.getSelection().getRangeAt(0);
const childNodes = editableDiv.childNodes;
for (let i = 0; i < childNodes.length; i++) {
const childNode = childNodes[i];
childNode.textContent = childNode.textContent + 'New text';
console.log(childNode.textContent);
}
document.getSelection().removeAllRanges();
document.getSelection().addRange(range);
});
// при открытии окна сохраняем информацию в sessionStorage
sessionStorage.setItem('isMiniCartOpen', true);
// при закрытии окна удаляем информацию из sessionStorage
sessionStorage.removeItem('isMiniCartOpen');
// при нажатии кнопки назад проверяем, открыто ли окно, и закрываем его при необходимости
window.addEventListener('popstate', function(event) {
if (sessionStorage.getItem('isMiniCartOpen')) {
// закрыть выезжающее окно
}
});
$( document ).on(
'click touch',
'.offcanvas-close',
function(){
$( 'html, body' ).removeClass( 'noscroll' );
$( '.offcanvas' ).removeClass( 'open' );
$( '.overlay' ).removeClass( 'visible right' );
}
);
add_action('wp_enqueue_scripts', function () {
// Подключаем стили
wp_enqueue_style('style-name', get_template_directory_uri() . '/assets/css/style.min.css');
// Подключаем скрипты только на страницах магазина и товара
if (is_shop() || is_product()) {
wp_enqueue_script('app', get_template_directory_uri() . '/assets/js/app.js', array('jquery'), '1.0.0', true);
wp_enqueue_script('main', get_template_directory_uri() . '/assets/js/main.js', array('jquery'), '1.0.0', true);
}
});
$(window).on('popstate hashchange', function() {
$('html, body').removeClass('noscroll');
});
$(window).on('beforeunload', function() {
$('html, body').removeClass('noscroll');
});
if(str2 == "брак")
{
var str3 = await client.SendTextMessageAsync(message?.Chat?.Id, $"@{username} предложил(а) @{user} устроить яркую свадьбу ");
if(!string.IsNullOrEmpty(message.Text) && message.Text.ToLower().Contains("да"))
{
await client.SendTextMessageAsync(message.Chat.Id, ("Он(а) сказал(а) да!"));
}
}
await Console.Out.WriteLineAsync($"{message.Chat.FirstName} | {username} | {message.Chat.LastName}");
$(window).on('pageshow', function(event) {
if (event.originalEvent.persisted) {
$('html, body').removeClass('noscroll');
}
});