Вывод сообщения на экран при условии
Есть код змейки, работает нормально (делал по учебнику). При столкновении с границей поля или с собой, игра выводит на экран сообщение «Конец игры». Я попытался добавить похожее условие, если игрок собирает 3 яблока, то выводится сообщение и победе, но у меня какая-то ошибка, браузер ругается на return в 190 строке.
Змейка! canvas < /*background-color: #839C86;*/ background-image: url(https://i.pinimg.com/originals/31/fe/12/31fe123182f2a5f956bf542af837ca12.jpg); margin-left: 35%; margin-top: 1%; >body < background-image: url(Snake/img/Background.jpg); >text < color: white; >button < margin-top: 4%; margin-left: 58%; font-family: 'Press Start 2P'; font-size: 10px; >.gradient
Отслеживать
задан 28 мая 2021 в 7:20
Дмитрий Судонин Дмитрий Судонин
98 7 7 бронзовых знаков
@ZaArs вы ошибаетесь. не прочитав делаете выводы
28 мая 2021 в 7:47
ок, увидел, сорян
28 мая 2021 в 7:48
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Немного подправил код, теперь работает.
Проблема была в следущей части кода:
if (score === 3) < Win(); return; //На это ругается браузер. >;
Блок return находился вне функции.
// Настройка «холста» var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); // Получаем ширину и высоту элемента canvas var width = canvas.width; var height = canvas.height; // Вычисляем ширину и высоту в ячейках var blockSize = 10; var widthInBlocks = width / blockSize; var heightInBlocks = height / blockSize; // Устанавливаем счет 0 var score = 0; // Рисуем рамку var drawBorder = function () < ctx.fillStyle = "#383838"; ctx.fillRect(0, 0, width, blockSize); ctx.fillRect(0, height - blockSize, width, blockSize); ctx.fillRect(0, 0, blockSize, height); ctx.fillRect(width - blockSize, 0, blockSize, height); >; // Выводим счет игры в левом верхнем углу var drawScore = function () < ctx.font = "20px 'Press Start 2P'"; ctx.fillStyle = "White"; ctx.textAlign = "left"; ctx.textBaseline = "top"; ctx.fillText("Счет: " + score, blockSize, blockSize); >; // Отменяем действие setInterval и печатаем сообщение «Конец игры» var gameOver = function () < clearInterval(intervalId); ctx.font = "30px 'Press Start 2P'"; ctx.fillStyle = "White"; ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.fillText("Конец игры", width / 2, height / 2); >; var Win = function () < //Переменная Win с сообщением. clearInterval(intervalId); ctx.font = "30px 'Press Start 2P'"; ctx.fillStyle = "White"; ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.fillText("Победа !", width / 2, height / 2); >; // Рисуем окружность (используя функцию из главы 14) var circle = function (x, y, radius, fillCircle) < ctx.beginPath(); ctx.arc(x, y, radius, 0, Math.PI * 2, false); if (fillCircle) < ctx.fill(); >else < ctx.stroke(); >>; // Задаем конструктор Block (ячейка) var Block = function (col, row) < this.col = col; this.row = row; >; // Рисуем квадрат в позиции ячейки Block.prototype.drawSquare = function (color) < var x = this.col * blockSize; var y = this.row * blockSize; ctx.fillStyle = color; ctx.fillRect(x, y, blockSize, blockSize); >; // Рисуем круг в позиции ячейки Block.prototype.drawCircle = function (color) < var centerX = this.col * blockSize + blockSize / 2; var centerY = this.row * blockSize + blockSize / 2; ctx.fillStyle = color; circle(centerX, centerY, blockSize / 2, true); >; // Проверяем, находится ли эта ячейка в той же позиции, что и ячейка // otherBlock Block.prototype.equal = function (otherBlock) < return this.col === otherBlock.col && this.row === otherBlock.row; >; // Задаем конструктор Snake (змейка) var Snake = function () < this.segments = [ new Block(7, 5), new Block(6, 5), new Block(5, 5) ]; this.direction = "right"; this.nextDirection = "right"; >; // Рисуем квадратик для каждого сегмента тела змейки Snake.prototype.draw = function () < for (var i = 0; i < this.segments.length; i++) < this.segments[i].drawSquare("#0cd3cd"); >>; // Создаем новую голову и добавляем ее к началу змейки, // чтобы передвинуть змейку в текущем направлении Snake.prototype.move = function () < var head = this.segments[0]; var newHead; this.direction = this.nextDirection; if (this.direction === "right") < newHead = new Block(head.col + 1, head.row); >else if (this.direction === "down") < newHead = new Block(head.col, head.row + 1); >else if (this.direction === "left") < newHead = new Block(head.col - 1, head.row); >else if (this.direction === "up") < newHead = new Block(head.col, head.row - 1); >if (this.checkCollision(newHead)) < gameOver(); return; >this.segments.unshift(newHead); if (newHead.equal(apple.position)) < score++; apple.move(); >else < this.segments.pop(); >if (score === 3) < //При получении трёх яблок, игра должна остановиться и вывести сообщение о победе. Win(); return; >; >; // Проверяем, не столкнулась ли змейка со стеной или собственным // телом Snake.prototype.checkCollision = function (head) < var leftCollision = (head.col === 0); var topCollision = (head.row === 0); var rightCollision = (head.col === widthInBlocks - 1); var bottomCollision = (head.row === heightInBlocks - 1); var wallCollision = leftCollision || topCollision || rightCollision || bottomCollision; var selfCollision = false; for (var i = 0; i < this.segments.length; i++) < if (head.equal(this.segments[i])) < selfCollision = true; >> return wallCollision || selfCollision; >; // Задаем следующее направление движения змейки на основе нажатой // клавиши Snake.prototype.setDirection = function (newDirection) < if (this.direction === "up" && newDirection === "down") < return; >else if (this.direction === "right" && newDirection === "left") < return; >else if (this.direction === "down" && newDirection === "up") < return; >else if (this.direction === "left" && newDirection === "right") < return; >this.nextDirection = newDirection; >; // Задаем конструктор Apple (яблоко) var Apple = function () < this.position = new Block(20, 20); >; // Рисуем кружок в позиции яблока Apple.prototype.draw = function () < this.position.drawCircle("Red"); >; // Перемещаем яблоко в случайную позицию Apple.prototype.move = function () < var randomCol = Math.floor(Math.random() * (widthInBlocks - 2)) + 1; var randomRow = Math.floor(Math.random() * (heightInBlocks - 2)) + 1; this.position = new Block(randomCol, randomRow); >; // Создаем объект-змейку и объект-яблоко var snake = new Snake(); var apple = new Apple(); // Запускаем функцию анимации через setInterval var intervalId = setInterval(function () < ctx.clearRect(0, 0, width, height); drawScore(); snake.move(); snake.draw(); apple.draw(); drawBorder(); >, 80); // Преобразуем коды клавиш в направления var directions = < 65: "left", 87: "up", 68: "right", 83: "down" >; // Задаем обработчик события keydown (клавиши-стрелки) $("body").keydown(function (event) < var newDirection = directions[event.keyCode]; if (newDirection !== undefined) < snake.setDirection(newDirection); >>); $(document).on("click", ".update", function()< location.reload(true); >);
canvas < /*background-color: #839C86;*/ background-image: url(https://i.pinimg.com/originals/31/fe/12/31fe123182f2a5f956bf542af837ca12.jpg); margin-left: 35%; margin-top: 1%; >body < background-image: url(Snake/img/Background.jpg); >text < color: white; >button < margin-top: 4%; margin-left: 58%; font-family: 'Press Start 2P'; font-size: 10px; >.gradient
Как вывести сообщение на экран в любое время?
Доброго времени суток, написал простенький код для alertDialog и хотел бы вывести его вне приложения. То есть чтоб он вылезал сам через какое-то определенное время, вне зависимости от активности пользователя. Возможно alertDialog не совсем подходит для этого и есть какая-то специальная служба? Искал на протяжении недели хоть какую-то информацию об этом, но все тщетно. Заранее спасибо за ответ.
- Вопрос задан более года назад
- 143 просмотра
Комментировать
Решения вопроса 1
Николай Савельев @AgentSmith
Это мой правильный ответ на твой вопрос
На уровне системы такая дичь запрещена.
Можно только делать уведомления Notifications с помощью сервисов, например
Ответ написан более года назад
Нравится 1 5 комментариев
Nevers @Nevers Автор вопроса
А как же работают самоучители английского, которые выводят на экран свои тесты, пока ты например переписываешься где-то или смотришь видос?
Николай Савельев @AgentSmith
Nevers, ни разу такого не видел
Nevers @Nevers Автор вопроса
Николай Савельев, По крайней мере раньше очень популярны были приложения по изучению английского, которые при включении телефона выводили свое диалоговое окно и нужно было решить задачку(ну или просто закрыть его). Возможно, конечно, такую функцию убрали, потому что на данный момент в плей маркете я не наблюдаю приложений с такими возможностями.
Николай Савельев @AgentSmith
Nevers, именно так и есть. Это вредная для пользователя фича и поэтому её убрали.
Не надо так делать
Nevers @Nevers Автор вопроса
Николай Савельев, понял, спасибо огромное!
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Android
Как прочитать файлы с USB флешки на android приставке?
- 1 подписчик
- вчера
- 23 просмотра
- Android
- +1 ещё
Системная программа не устанавливается на другой телефон?
- 1 подписчик
- 28 апр.
- 61 просмотр
print в Python: вывод сообщения на экран
Привет! В этой статье мы поговорим о функции print в Python. Эта функция используется для вывода сообщений на экран и в файл. Мы подробно разберем то, как можно использовать эту функцию, а также ее отличия в Python 3 от Python 2.
Вывод сообщения на экран в Python 3
Для вывода на экран в Python 3 мы можем воспользоваться встроенной функцией print :
print("Привет мир!")
Привет мир!
Вывод сообщения на экран в Python 2
Во второй версии Python нужно использовать ключевое слово print , а не функцию:
print "Привет мир!"
Привет мир!
Дальше в статье мы будем подробно разбирать именно функцию print в Python 3. Если вы хотите подробнее почитать про print во второй версии Python, то рекомендую почитать официальную документацию.
Функция print в Python имеет следующий вид:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- Сначала мы передаем объекты, которые хотим вывести на экран. Функция print автоматически преобразует их в строки. Звездочка означает то, что мы можем передать сколько угодно значений.
- По умолчанию, все значения будут выведены через пробел. Для того, чтобы поменять разделитель, нужно передать sep=’разделитель’ .
- После того, как все объекты были выведены, функция print перенесет строку. Мы можем поменять то, что будет выведено в самом конце при помощи аргумента end .
- По умолчанию, вывод будет производиться на экран. Мы можем указать файл в который нужно вывести сообщение при помощи аргумента file .
- flush определяет, нужно ли отображать сообщение сразу после вызова функции или можно подождать. Обычно сообщения не выводятся сразу после вызова, потому что так программы работают быстрее. Если вы хотите быть уверенным, что сообщение отобразится сразу после вызова функции print , то укажите flush=True .
Давайте теперь посмотрим как использовать каждый из этих аргументов по отдельности.
Вывод нескольких значений
print позволяет вывести сразу несколько значений одним сообщением:
print("Я", "пошел", "гулять")
Я пошел гулять
При этом мы можем передавать не только строки:
print("2 * 3 token punctuation">, 6)
2 * 3 = 6
Функция print сконвертирует в строку любое значение, которое мы ей передадим. Давайте попробуем вывести функцию print при помощи функции print :
print('print:', print)
print:
Тут мы видим, что print — это встроенная функция в Python.
Как поменять разделитель в print
Чтобы поменять пробел на что-то другое при выводе нескольких значений, мы можем передать параметр sep :
print(1, 2, 3, sep=", ")
1, 2, 3
Тут мы вывели числа, разделенные запятой с пробелом. Вы можете выбрать разделитель согласно вашим задачам.
Как поменять окончание вывода
По умолчанию, print переносит строку после каждого вывода:
print("Первая строка") print("Вторая строка")
Первая строка Вторая строка
Мы можем поменять то, что выводиться в конце сообщения при помощи аргумента end :
print("Один |", "Два", end=" | ") print("Три")
Один | Два | Три
Вывод сообщения в файл
Для вывода сообщения в файл print поддерживает специальный параметр — file . Давайте попробуем вывести сообщение «Привет мир!» в файл output.txt:
with open("output.txt", "w") as f: print("Привет мир!", file=f)
Привет мир!
В примере выше мы используем функцию open для открытия файла на запись. После того, как файл открыли, нужно его передать в параметр file функции print .
Сброс вывода при помощи flush
Перед тем, как сбрасывать вывод функции print , давайте продемонстрируем тот факт, что вывод сообщений не появляется на экране сразу:
import time print("Сообщение #1", end=", ") time.sleep(3) print("сообщение #2")
Тут я советую запустить эту программу вашем компьютере, чтобы увидеть все своими глазами. В любом случае, вот что произойдет:
- Первые три секунды на экране вы ничего не увидите, хотя функция print была вызвана.
- После того, как пройдет три секунды, второй вызов функции print сбросит накопившейся вывод на экран.
В итоге мы увидим следующую строку:
Сообщение #1, сообщение #2
Чтобы увидеть первое сообщение сразу, а не после второго вызова функции print , нужно указать flush=True . Это заставит Python вывести «Сообщение #1, » не дожидаясь второго вызова print :
import time print("Сообщение #1", end=", ", flush=True) time.sleep(3) print("сообщение #2")
По умолчанию Python выводит сообщение на экран после символа переноса строки ‘\n’ . Поэтому для демонстрации работы параметра flush мы поменяли end для первого сообщения на запятую.
Пример: вывод числа int на экран
Как мы уже видели, для вывода чисел при помощи функции print можно просто передать это число в функцию:
number = 1 print(number, 2)
Пример: вывод строки на экран
Строку тоже можно просто передать как параметр в функцию print для ее вывода:
print("Вывод строки в Python")
Вывод строки в Python
Пример: вывод списка в Python
Для вывода списка можно просто передать его в функцию. В этом случае print отобразит элементы списка через запятую в квадратных скобках:
l = [1, "два", 3] print(l)
[1, 'два', 3]
Если вам нужно вывести элементы по-другому, то вы можете сделать это вручную:
l = [1, "два", 3] for index, item in enumerate(l): print(item, end="") if index == len(l) - 1: print() # перенос строки else: print(" | ", end="") # вывод своего разделителя
1 | два | 3
Но пример выше слишком многословный. Гораздо проще воспользоваться методом join :
l = [1, "два", 3] print(" | ".join(str(x) for x in l))
1 | два | 3
Тут мы сначала преобразовали все элементы списка в строки при помощи генератора, а потом соединили элементы при помощи join .
Пример: вывод словаря при помощи print
Функция print также умеет красиво выводить словари:
d = "A": 1, "B": 2> print("Словарь:", d)
Словарь:
Пример: вывод множества в Python
Множество тоже можно выводить используя функцию print :
s = 1, 2, 3> print("Множество:", s)
Множество:
- Использование print :
Напишите программу на Python, которая запрашивает у пользователя его имя и выводит приветственное сообщение на экран с использованием функции print . - Вывод в файл с помощью print :
Создайте текстовый файл с именем “output.txt”. Напишите программу, которая использует функцию print , чтобы записать в этот файл строку “Привет, мир!“. После выполнения программы откройте файл и убедитесь, что строка была записана корректно. - Управление разделителями и завершением строки в print :
Напишите программу, которая демонстрирует возможность использования различных разделителей и символов завершения строки в функции print . Попробуйте изменить стандартный разделитель (пробел) и стандартное завершение строки (новая строка) на что-то другое и выведите несколько значений на экран.
Читайте также
Переменные в Python
В данном уроке пойдет речь об очень важной части языка Python: переменных. Мы рассмотрим объявление переменных, их области видимости и правила именования.
Основы Python 3
В данной статье мы вам расскажем о том, как правильно писать программы на Python. Мы н