Net- artistas: Hipertexto + Multimedia


El hipertexto, un tipo de hipermedia, se convirtió para los Net-artistas en una de las herramientas más indispensables e importantes para la realización de sus obras.

http://empiezoinformatica.blogspot.com.ar/2015/05/net-artistas-hipertexto-multimedia.html

Tecnología: Geolocalización


Desde que las redes sociales hicieron acto de presencia en nuestras vidas la forma de hacer marketing de las empresas ha cambiado mucho y con el paso del tiempo han ido aumentando cada vez más su presupuesto en marketing web online.

La geolocalización supuso toda una revolución dentro del mundo del marketing web online ya que por primera vez los usuarios podían anunciar a sus contacto el lugar exacto en que se encontraban y dar su opinión. En el auge de la geolocalización tuvo mucho que ver Foursquare, una red que ha ayudado a muchas empresas a mejorar su visibilidad.

De un tiempo a esta parte parecía que Foursquare estaba un poco parada, pero últimamente estamos viendo novedades que pueden resultar muy útiles para las empresas que usan esta red social para su marketing web online. Una de las últimas novedades que han llegado es Pinpoint, una nueva aplicación que permitirá a las marcas llegar a un público muy segmentado.

Por el momento este sistema está siendo probado por algunas grandes marcas como Jaguar o Samsung pero a partir del próximo mes de mayo estará disponible para todos.

A través de esta aplicación se ha mejorado el patrón de geolocalización, permitiendo obtener datos más concretos sobre los gustos y costumbres de los usuarios, lo que permitirá dirigir las campañas de publicidad de las marcas a un público cada vez más concreto, ahorrando recursos y permitiendo que el mensaje de la marca llegue a aquellos que verdaderamente constituyen su público potencial.

Además de conocer mejor a sus consumidores, gracias a Pinpoint las marcas podrán usar los datos obtenidos para dirigirse a su público potencial no solo en Foursquare sino también fuera de él.

Un ejemplo más de como la geolocalización puede resultar de gran utilidad a las marcas a la hora de aprovechar sus recursos.

https://snt147.mail.live.com/?tid=cm21dLqNjk5BGTGAAeC8szVg2&fid=flinbox

Bases de datos de muestra incluidas en Access ( y SQL Server)


Informática Educativa

Microsoft Access proporciona ejemplos de bases de datos que puede utilizar mientras aprende a utilizar Access.

neptuno

Neptuno1

Ejemplo de base de datos Importadores Neptuno
La base de datos y proyecto Neptuno de Access (disponible con el comando Bases de datos de ejemplo en el menú Ayuda) contiene los datos de ventas de una compañía ficticia denominada Importadores Neptuno, que importa y exporta comestibles especiales de todo el mundo. Viendo los objetos de base de datos incluidos en la base de datos Neptuno, podrá desarrollar ideas para su propia aplicación de base de datos. También puede utilizar los datos de Neptuno para hacer pruebas con Access antes de escribir sus propios datos. Por ejemplo, puede practicar el diseño de consultas con la tabla Pedidos de Neptuno, ya que contiene los registros suficientes para generar resultados significativos.

Crear la base de datos de SQL Server NeptunoCS.adp
A diferencia de la base de datos…

Ver la entrada original 289 palabras más

Diseño Digital I


Informática Educativa

Adobe Photoshop es una aplicación para manipular y editar imágenes fotográficas y vectoriales.

Está considerado el programa No. 1 en Diseño, y se la considera la herramienta más completa y poderosa.

Además de trabajar con imágenes se le han agregado herramientas para el desrrollo en la Web.

Trabaja principalmente con mapa de bits, compuestos por una cuadrícula de pequeños puntos denominados pixeles (picture element).

Describa que es la digitalización de imágenes.

Ver la entrada original

Applet (Java)


Informática Educativa

appl

appl1

Un applet es un componente de una aplicación que se ejecuta en el contexto de otro programa, por ejemplo en un navegador web. El applet debe ejecutarse en un contenedor, que le proporciona un programa anfitrión, mediante un plugin,1 o en aplicaciones como teléfonos móviles que soportan el modelo de programación por “applets”.

A diferencia de un programa, un applet no puede ejecutarse de manera independiente, ofrece información gráfica y a veces interactúa con el usuario, típicamente carece de sesión y tiene privilegios de seguridad restringidos. Un applet normalmente lleva al cabo una función muy específica que carece de uso independiente. El término fue introducido en AppleScript en 1993.

Ejemplos comunes de applets son las Java applets y lasanimaciones Flash. Otro ejemplo es el Windows Media Player utilizado para desplegar archivos de video incrustados en los navegadores como el Internet Explorer. Otros…

Ver la entrada original 126 palabras más

Innovation


Informática Educativa

innova

innova1

Innovation literally means action and effect to innovate. The word comes from the Latin innovare. Also, in the colloquial and general usage, the term is used specifically in the sense of new proposals and economic implementation inventions. Strictly speaking, however, says that ideas can only be innovations after they are implemented as new products, services or procedures that are really successful application, prevailing in the market through the difusión.1

Economist Joseph Schumpeter who introduced this concept in his “theory of innovation”, 2 in which it defines as the establishment of a new production function. The economy and society change when the factors of production are combined in a novel way. Suggests that invention and innovation are the key to economic growth, and those implementing this change are practically entrepreneurs.

The concept of innovation is also used in the human sciences and culture. The search through the search for new knowledge…

Ver la entrada original 47 palabras más

Audio MP3


Informática Educativa

mp31mp3   MPEG-1 Audio Layer III o MPEG-2 Audio Layer III, más comúnmente conocido como MP3 es un formato de compresión de audio digital patentado que usa un algoritmo con pérdida para conseguir un menor tamaño de archivo. Es un formato de audio común usado para música tanto en ordenadores como en reproductores de audio portátil. Los archivos MPEG-1 corresponden a las velocidades de muestreo de 32, 44.1 y 48 kHz. Los archivos MPEG-2 corresponden a las velocidades de muestreo de 16, 22.05 y 24 kHz. MP3 fue desarrollado por el Moving Picture Experts Group (MPEG) para formar parte del estándar MPEG-1 y del posterior y más extendido MPEG-2. Un MP3 creado usando una compresión de 128kbit/s tendrá un tamaño de aproximadamente unas 11 veces menor que su homónimo en CD. Un MP3 también puede comprimirse usando una mayor o menor tasa de bits por segundo…

Ver la entrada original 79 palabras más

El ciclo de vida de desarrollo de sistemas (SDLC)


life

El ciclo de vida de desarrollo de sistemas (SDLC), o ciclo de vida de desarrollo de software en la ingeniería de sistemas e ingeniería de software, es el proceso de creación o modifiación de los sistemas, modelos y metodologías que la gente usa para desarrollar estos sistemas de software. El concepto general se refiere a la computadora o sistemas de información. En ingeniería de software el concepto de SDLC sostiene muchos tipos de metodologías de desarrollo de software. Estas metodologías constituyen el marco para la planificación y el control de la creación de una información.

El ciclo de vida de desarrollo de un sistema (SDLC) es un proceso lógico utilizado por un analista de sistemas para desarrollar un sistema de información, incluidos los requisitos, la validación, formación, como los usuarios (interesados) en la propiedad. Cualquier SDLC debe resultar en un sistema de alta calidad que cumple o excede las expectativas del cliente, llega a término en el tiempo y estimaciones de costos, las obras con eficacia y eficiencia de las infraestructuras actuales y previstas Tecnologías de la Información, y es barato de mantener y rentable.2 Los sistemas informáticos son complejos y muchas veces (especialmente con el aumento reciente de Service-Oriented Architecture) vincular varios sistemas tradicionales potencialmente suministrados por los fabricantes de software diferentes. Para gestionar este nivel de complejidad, una serie de sistemas de ciclo de vida de desarrollo (SDLC) modelos se han creado: “cascada”, “fuente”, “espiral”, “construir y arreglar”, “prototipado rápido”, “incremental”, y “sincronizar y estabilizar”. editar Modelos de SDLC se puede describir a lo largo de un espectro de ágil para iterativo para secuencial. Metodologías ágiles, como XP y Scrum, se centran en los procesos de peso ligero que permite la rápida evolución a lo largo del ciclo de desarrollo. Metodologías iterativa, como Rational Unified Process, motores y desarrollo del método, se centran en los ámbitos del proyecto limitado y mejoramiento o expansión de los productos de múltiples iteraciones. Secuencial o de gran diseño inicial (BDUF) modelos, como la cascada, se centran en la planificación completa y correcta para guiar a los grandes proyectos y los riesgos para la results.citation éxito y previsible necesario Algunos defensores ágil e iterativo confunden la palabra SDLC con procesos secuenciales o “más tradicional”, sin embargo, SDLC es un término paraguas para todas las metodologías para el diseño, implementación y puesta en libertad de software.34 En la gestión de proyectos de un proyecto se puede definir tanto con un ciclo de vida del proyecto (PLC) y un SDLC, durante el cual las actividades ligeramente diferente ocurrir. Según Taylor (2004) “el ciclo de vida del proyecto abarca todas las actividades del proyecto, mientras que el ciclo de vida de desarrollo de sistemas se centra en el cumplimiento de los requisitos de los productos”.

http://es.wikipedia.org/wiki/Systems_Development_Life_Cycle#Descripci.C3.B3n_general

Cookies (Informática)


Informática Educativa

cookie

Una cookie (o galleta informática) es una pequeña información enviada por un sitio web y almacenada en el navegador del usuario, de manera que el sitio web puede consultar la actividad previa del usuario.

Sus principales funciones son:

  • Llevar el control de usuarios: cuando un usuario introduce su nombre de usuario y contraseña, se almacena una cookie para que no tenga que estar introduciéndolas para cada página del servidor. Sin embargo, una cookie no identifica solo a una persona, sino a una combinación de computador-navegador-usuario.
  • Conseguir información sobre los hábitos de navegación del usuario, e intentos de spyware (programas espía), por parte de agencias de publicidad y otros. Esto puede causar problemas de privacidad y es una de las razones por la que las cookies tienen sus detractores.

Originalmente, solo podían ser almacenadas por petición de un CGI desde el servidor, pero Netscape dio a su lenguaje Javascript la…

Ver la entrada original 44 palabras más

Android


 

 

 

 

e4674-inv2

Android es un sistema operativo basado en el kernel (núcleo) de Linux. Fue diseñado principalmente para dispositivos móviles con pantalla táctil, como teléfonos inteligentes o tablets; y también para relojes inteligentes, televisores y automóviles. Inicialmente fue desarrollado por Android Inc., empresa que Google respaldó económicamente y más tarde, en 2005, compró.[9] Android fue presentado en 2007 junto la fundación del Open Handset Alliance (un consorcio de compañías de hardware, software y telecomunicaciones) para avanzar en los estándares abiertos de los dispositivos móviles.[10] El primer móvil con el sistema operativo Android fue el HTC Dream y se vendió en octubre de 2008.[11] Los dispositivos de Android venden más que las ventas combinadas de Windows Phone y IOS.

 

d2d99-inv1

El éxito del sistema operativo se ha convertido en objeto de litigios sobre patentes en el marco de las llamadas «Guerras por patentes de teléfonos inteligentes» (en inglés, Smartphone patent wars) entre las empresas de tecnología.[16] [17] Según documentos secretos filtrados en 2013 y 2014, el sistema operativo es uno de los objetivos de las agencias de inteligencia internacionales.

La versión básica de Android es conocida como Android Open Source Project (AOSP).[18]

Escribir aplicaciones con Visual C#


Creo fundamental porque es .NET

Informática Educativa

C0

C# es un lenguaje orientado a objetos con seguridad en el tratamiento de tipos, que es a la vez sencillo y potente y permite a los programadores crear una gran variedad de aplicaciones. Combinado con .NET Framework, Visual C# permite la creación de aplicaciones para Windows, servicios web, herramientas de base de datos, componentes, controles y mucho más.

Esta sección contiene información sobre distintas tecnologías de plataformas de Microsoft en las que puede basar las aplicaciones de C#.

C1

Entre sus utilidades, mencionamos:

Utilizar la Biblioteca de clases de .NET Framework (Visual C#)

Describe la utilización de los tipos de la biblioteca de clases de .NET Framework en proyectos de Visual C#.

Crear aplicaciones Web ASP.NET (Visual C#)

Describe la utilización del editor de código de C# en Visual Web Developer para crear aplicaciones Web con páginas de código subyacente en C#.

Crear aplicaciones de Windows Forms (Visual C#)

Describe cómo utilizar los formularios Windows Forms para…

Ver la entrada original 153 palabras más

METODOLOGÍA DEL AJUSTE POR INFLACIÓN


infl

 

 

 

Contenido:Ajuste Contable por Inflación 1- Introducción

2- Concepto de Ganancia y Capital a mantener

3- Problema de la unidad de medida

4- Primer Ejemplo

5- Problemas de la Contabilidad Histórica

6- Metodología del Ajuste por Inflación

6-1 Rubros Monetarios y No Monetarios

6-2 Procedimiento de ajuste a los rubros no monetarios

6-3 Índices aplicables

7- Proceso para realizar el Ajuste de los Estados Contables

8- Segundo Ejemplo

9- Bibliografía

METODOLOGÍA DEL AJUSTE POR INFLACIÓN

Rubros Monetarios y No Monetarios
Procedimiento de ajuste a los rubros no monetarios
Índices aplicables

Rubros Monetarios y No Monetarios

Dentro de los elementos que componen el activo, pasivo y patrimonio neto de un ente, podemos hacer una distinción en su comportamiento frente a la inflación

Monetarios Son aquello que siempre se encuentran expresados en moneda de poder adquisitivo del momento (ej.: disponibilidades, cuentas a cobrar y a pagar, etc.). La tenencia de este tipo de bienes genera pérdidas o ganancias por exposición a la inflación
No Monetarios Son aquellos que están expresados en moneda de poder adquisitivo correspondiente al momento de su incorporación al patrimonio del ente (Ej.: bienes de uso capital, ventas, etc.). Estos bienes no generan resultados por exposición a la inflación, pero deben ser ajustados al cierre del Ejercicio Económico a los efectos de homogeneizar su presentación en los Estados Contables exponiendo cifras de igual poder adquisitivo.

Lo expuesto puede resumirse:

Concepto Monetarios No Monetarios
Están expresados en Moneda del momento Actual De la fecha de adquisición del bien
Deben ajustarse para que queden expresados en moneda de cierre NO SI
Genera resultados por Exposición a la Inflación SI NO

Ejemplo:

Capital al inicio 1.000, – en efectivo
Estado Patrimonial es:
Caja 1.000.- Capital 1.000.-

Al cierre del Ejercicio si no hubo actividades y la inflación fue del 100 por ciento, diremos que el Capital a Mantener es de 2.000,- y el Resultado Ajustado por Inflación es Pérdida 1.000.- (Surge de comparar 2.000,.- de Capital a Mantener y 1.000 de Patrimonio Ajustado. El Patrimonio Ajustado corresponde a 1.000,- de Caja.)

Ahora debe quedarnos claro que el hecho que produce la pérdida por inflación es el haber mantenido el Capital en Caja es decir que el rubro monetario “Caja” no debe ajustarse pero si genera “resultado por Exposición a la Inflación”

Si el aporte hubiera sido en Bienes de Uso el estado patrimonial al inicio sería:

Bienes de Uso 1.000 Capital 1.000

y al cierre deberíamos ajustar ambos rubros, quedando el Estado Patrimonial:

Bienes de Uso 2.000 Capital Resultado 2.000

Ambos rubros, no monetarios, se ajustan pero no producen resultados por exposición a la inflación.
Volver

Procedimiento de ajuste a los rubros No Monetarios

El método consiste en:

  1. a) Determinar la fecha de origen de las distintas partidas que componen e integran el rubro

Ejemplo

Rubros Bienes de Uso $ 100.000 Cierre Balance 31/12/83

Se compone de:

1 maquinaria tipo zz fecha compra 1/1/83 $ 25.000
1 rodado marca xx fecha compra 5/7/83 $ 35.000
1 terreno fecha compra 10/11/83 $ 40.000
  1. b) Se determinan los coeficientes de ajuste que surgen de relacionar el índice precios del mes de cierre (Fecha de incorporación de los bienes o ajustes)

Ej: Para la maquinaria tipo zz el coeficiente es igual a

Indice Precios 12/83
=
Indice Precios 1/83
  1. c) Determinar el valor ajustado del rubro, resultante de multiplicar el importe de a) por el coeficiente que surge de b).

Asimismo el valor ajustado debe siempre ser comparado con el valor de mercado con el objetivo de no apartarse de la norma general de valuación: costo o mercado el menor (para rubros del activo) y costo o mercado el mayor (para rubros del pasivo).
Volver

Índices Aplicables

El índice de precios a utilizar a los efectos de practicar el ajuste por inflación debe tener ciertas características a saber:

1) que mida en forma objetiva la variación en el poder adquisitivo de la moneda

2) que sea de conocimiento público, de fácil acceso y que se publique en forma habitual

3) Debe ser único para todos los rubros no monetarios que informen el Estado Contable

Diversas normas legales y profesionales consideran que el Índice de precios más adecuado es el Índice de Precios al por Mayor – Nivel General, publicado por el INDEC.

Cuando la determinación de la fecha de origen de las distintas partidas de un rubro se torna muy dificultosa o imposible, en esos casos se considera aconsejable utilizar promedios de un determinado período (Ej. Coef. promedio trimestral, semestral, anu

Crádito:http://www.economicas-online.com/AjusteContporInflacion-Metodologia.htm

 

[ Principal ] [ Página superior ]Envíe un mensaje a webmaster@economicas-online.com si tiene preguntas o comentarios sobre este sitio. Copyright © 2000-2008 Económicas On Line Ultima modificación: Sunday, March 16, 2008

Relacionar datos de distintas tablas en Excel


Informática Educativa

Para la Modelización de datos en Excel, encontramos la necesidad de saber como se pueden relacionar los datos de dos tablas distintas.

http://temporaexcel.blogspot.com.ar/2011/09/modelizacion-de-datos-en-excel.html

imagen1

Es necesario crear en cada tabla unos campos de enlace llamados “campos clave” y que estos podían ser claves primarias (primary keys) o claves externas (foreing keys).

Relacionar tablas

Dicho de forma coloquial, relacionar dos tablas, es conseguir que, estando en una tabla nº 2, se pueda elegir un dato de un registro de la tabla nº 1 y automáticamente aparezcan en la tabla nº 2 los datos asociados a ese registro.

Por ejemplo: estando en una tabla que registra las nóminas mensuales, cuando seleccionamos el trabajador a quien corresponde los datos de la nómina que estamos registrando, aparezca en el campo de al lado el área a la que pertenece dicho trabajador.

PASO 1) Definir un “Nombre al rango” donde están los datos a enlazar

En…

Ver la entrada original 386 palabras más

Elementos de de contabilidad simplificada en Excel


Excel 2013: Proyectar pérdidas y ganancias


Informática Educativa

Haga click para ampliar la tabla de abajo.

GyP

Determina tus ganancias. Necesitas conocer la cantidad de dinero que debes producir cada mes. Esta cifra es generalmente la cantidad de las ventas. Las nuevas empresas pueden ser capaces de obtener estándares de la industria, donde un negocio ya establecido debe ser capaz de consultar los registros del año anterior.

pig1
1.
Conoce tus gastos variables. Tus gastos son lo que se considera pérdida. Un gasto variable es cualquier gasto que no tiene una tasa establecida por mes. Si es posible, promedia tus gastos variables del año pasado. Para un negocio nuevo, calcula cuales serán estos gastos.
2.
Calcula tus gastos fijos. Cualquier pago que realices sobre una base mensual, es decir, que sea el mismo cada mes, es un gasto fijo. Tus gastos fijos pueden incluir cosas como el pago del alquiler, préstamos o salarios. Estos gastos se añaden a los gastos…

Ver la entrada original 270 palabras más

Excel 2010 – Funciones financieras


Informática Educativa

Funciones financieras

Función Descripción
AMORTIZ.LIN Devuelve   la amortización de cada uno de los períodos contables
AMORTIZ.PROGRE Devuelve   la amortización de cada período contable mediante el uso de un coeficiente de   amortización
CANTIDAD.RECIBIDA Devuelve   la cantidad recibida al vencimiento de un valor bursátil completamente   invertido
CUPON.DIAS Devuelve   el número de días del período (entre dos cupones) donde se encuentra la fecha   de liquidación
CUPON.DIAS.L1 Devuelve   el número de días desde el principio del período de un cupón hasta la fecha   de liquidación
CUPON.DIAS.L2 Devuelve   el número de días desde la fecha de liquidación hasta la fecha del próximo   cupón
CUPON.FECHA.L1 Devuelve   la fecha de cupón anterior a la fecha de liquidación
CUPON.FECHA.L2 Devuelve   la fecha del próximo cupón después de la fecha de liquidación
CUPON.NUM Devuelve   el número de pagos de cupón entre la fecha de liquidación…

Ver la entrada original 747 palabras más

Funciones lógicas en MS Excel


Informática Educativa

Excel tiene la posibilidad de incluír condicionales en las fórmula.  Quiere decir que permite “elegir”  entre dos acciones en función de que una condición sea verdadera o falsa (V o F)

Su sintaxis es :   =SI(condición;valor si la condición es V;valor si la condición es F)

Un ejemplo aclarará la función:                                      Le estamos indicando que SI el promedio es mayor o igual a 6, entonces el alumno aprobó. Cuando aplicamos ” = ” en una celda en el márgen superior izquierdo aparece fx. Cliqueamos y elegimos “Funciones lógicas”. Completamos los cuadros que nos pide (condición; valor si verdadero;valor si falso). Damos aceptar y nos devuelve la salida. En nuestro caso SI o NO.

En forma literal estamos diciendo: ” Si el alumno obtiene 6 o más puntos en la materia, entonces aprobó. Si no lo obtuvo, entonces no aprobó”

En lógica esto se denomina  Si…entonces.

Es posible crear fórmulas…

Ver la entrada original 190 palabras más

Microsoft Access 2013 Fundamentos


Informática Educativa

access_2013_tutorial_crosstab_queries_microsoft_training

¿Qué es una base de datos?
En el nivel más básico, una base de datos no es más que una colección organizada de datos. Un sistema de gestión de base de datos (DBMS), como Microsoft Access, Oracle o SQL Server le proporciona las herramientas de software que necesita para organizar los datos de una manera flexible. Incluye facilidades para agregar, modificar o eliminar datos de la base de datos, hacer preguntas (o consultas) sobre los datos almacenados en la base de datos y producir informes que resumen los contenidos seleccionados.
Microsoft Access 2013
Microsoft Access 2013 proporciona a los usuarios una de las soluciones DBMS más simples y más flexibles en el mercado hoy. Los consumidores habituales de productos de Microsoft podrán disfrutar de los familiares de Windows se ven y se sienten, así como la integración con otros productos de la familia Microsoft Office. Para más información sobre la…

Ver la entrada original 798 palabras más

Principales desafíos y retos para el crecimiento de las Pymes en Latinoamérica.


Informática Educativa

empre

La importancia de las empresas pequeñas y medianas (PyMEs) en las economías latinoamericanas ha sido objeto de numerosos estudios de investigación. Representan más del 90% de las empresas de la región y, en particular, se destaca la fuerte incidencia que tienen en la provisión de fuentes de trabajo, por lo que conforman la base fundamental de la estructura del tejido social.
Es por ello que –prácticamente- todos los países de la región procuran articular políticas, planes y programas que hagan foco en la competitividad y productividad de las Pymes. No obstante ello, el diferencial de productividad que existe entre las Pymes y las grandes empresas resulta ser mucho mayor en Latinoamérica que la existente en los países desarrollados.
Este fenómeno puede ser observado de dos maneras diferentes, que conforman dos caras de una misma moneda: Las Pymes latinoamericanas se ven obligadas a enfrentar un sinnúmero de dificultades y obstáculos extra…

Ver la entrada original 2.314 palabras más

Microsoft PUBLISHER


Informática Educativa

Microsoft Publisher (anteriormente Microsoft Office Publisher) es la aplicación de autoedición o DTP (por DeskTop Publishing en inglés) de Microsoft Corporation. A menudo es considerado como un programa para principiantes o de «nivel de entrada» (entry level), que difiere del procesador de textos microsoft Word en que se hace hincapié (que se refuerza) en el diseño y la maquetación de las páginas, más que en el proceso y corrección de textos.

Microsoft Publisher es un programa que provee un historial simple de edición similar al de su hermano Word.

Ayuda a crear, personalizar y compartir con facilidad una amplia variedad de publicaciones y material con imágenes. Incluye una variedad de plantillas, instaladas y descargables desde su sitio web, para facilitar el proceso de diseño y maquetación. O sea ya nos da un “machete” para ayudarnos a diseñar lo que se nos ocurrió.

Publisher está incluido entre la gama…

Ver la entrada original 207 palabras más

Dashboard económico-financiero con Excel


Informática Educativa

dashboard1

El DashBoard es una Interfaz gráfica de usuario que yace tanto en consolas de videojuegos como en algunos sistemas operativos. Es una interfaz donde el usuario puede administrar el equipo y/o software. A continuación veremos en donde yace el dashboard de cada una de las consolas de videojuegos

Dashboard en consolas

Consolas Sony

PlayStation (o PSone) El Dashboard de esta consola es bastante pobre, dado que dispone de dos opciones solamente. Estas son: MEMORY CARD y CD PLAYER, la primera se usa para administrar los datos salvados de juegos en los bloques de las memorias insertadas. Y la segunda se usa para escuchar música en CD-A’s o CD de audio.

PlayStation 2 Esta consola muestra un Dashboard al que no se accede cuando se prende la consola, a menos que se mantenga pulsado el botón triangulo enseguida de prender la consola. El Dashboard de esta consola esta mucho más…

Ver la entrada original 592 palabras más

La función coseno en Excel


Informática Educativa

coseno

En trigonometría el coseno (abreviado cos) de un ángulo agudo en un triángulo rectángulo se define como la razón entre el catetoadyacente a dicho ángulo y la hipotenusa:

 cosalpha = frac{b}{c}

En virtud del Teorema de Tales, este número no depende del triángulo rectángulo escogido y, por lo tanto, está bien construido y define una función del ángulo  alpha.

Otro modo de obtener el coseno de un ángulo consiste en representar éste sobre la circunferencia goniométrica, es decir, la circunferencia unitaria centrada en el origen. En este caso el valor del coseno coincide con la abscisa del punto de intersección del ángulo con la circunferencia. Esta construcción es la que permite obtener el valor del coseno para ángulos no agudos.

En análisis matemático el coseno es la función que asocia un número real x con el valor del coseno del ángulo de amplitud, expresada en radianes,  x

Ver la entrada original 209 palabras más

La función Seno en Excel


Informática Educativa

seno

En trigonometría el seno de un ángulo en un triángulo rectángulo se define como la razón entre el catetoopuesto y la hipotenusa:

 sin alpha=frac{a}{c}

O también como la ordenada correspondiente a un punto que pertenece a una circunferencia unitaria centrada en el origen (c=1):

 sin alpha=a ,

En matemáticas el seno es la función continua y periódica obtenida al hacer variar la razón mencionada, siendo una de las funciones trascendentes. La abreviatura sin(cdot) proviene del latín sĭnus.

El seno en programación

Normalmente todos los lenguajes de programación proveen una función seno. También es lo normal en todos los lenguajes que el ángulo que recibe la función deba pasarse en radianes.

Esto es importante tenerlo en cuenta ya que si no podrían derivarse errores por este concepto. Del mismo modo las calculadoras suelen aceptar el valor en grados o radianes, siendo necesario para ello (realizar dicho cálculo correctamente) activar un botón selector…

Ver la entrada original 155 palabras más

Dibujando y rellenando formas


Informática Educativa

Capítulo 6 – Manual de Small Basic

Siempre dentro de GraphicsWindows (ventana de gráficos), usamos la función Draw (dibujar) y Fill (rellenar).

Cada vez que tipeamos una función u operación A la derecha de la pantalla nos explica que es lo que hacen éstas. ¿ La miró alguna vez?.

Abra desde el escritorio un archivo Small Basic. Guardelo en su carpeta de usuario como figura30.

Escriba las instrucciones para dibujar un rectángulo (solo el entorno) con los bordes de color rojo (PenColor).

A continuación rellene un rectángulo con el color verde (BrushColor)

Si se fija a la derecha del escritorio, le mostrará que en los paréntesis después de la función van las coordenadas x e y, del punto donde se empieza a dibujar( Draw) o pintar(Brush) y el largo y el ancho de la figura.

Como ambos rectángulos serán del mismo tamaño, ¿ que debe cambiar en las instrucciones para que los rectángulos…

Ver la entrada original 144 palabras más

Empezar con MS Small Basic ( de 10 a 16 años de edad)


Informática Educativa

http://msdn.microsoft.com/es-ar/beginner/ff384126(en-us).aspx

Microsoft Small Basic pone la diversión en la programación de computadoras. Con un entorno favorable al desarrollo que es muy fácil de dominar, que facilita a los estudiantes de todas las edades en el mundo de la programación.

¿Qué es el Small Basic?

Small Basic es un proyecto que se centra en la fabricación de programación accesible y fácil para los principiantes. Se compone de tres partes bien diferenciadas:
El Lenguaje
El Entorno de Programación
Bibliotecas

El lenguaje se inspira en los principios de una variante de BASIC pero se basa en la moderna. Plataforma NET. El ambiente es sencillo pero rico en características, ofrece varios principiantes de los beneficios que los programadores profesionales han llegado a esperar. Un amplio conjunto de bibliotecas ayudan a los principiantes aprender a escribir programas atractivos e interesantes.

sb1

¿ A quién está dirigido Small Basic?

Small Basic está diseñado para principiantes que desean…

Ver la entrada original 728 palabras más

Plantillas para manejar la contabilidad de una empresa o negocio usando excel


Informática Educativa

http://www.negociosyemprendimiento.org/2009/08/pack-de-plantillas-excel-para.html

Aquí va otro pack de plantillas excel, esta vez para contadores, son algunos documentos que pueden ser usados como modelos para la elaboración de documentos de uso para contadores, ademas de que puede ser de gran utilidad para manejar el área financiera y contable de tu empresa.

No olvides que para recibir el mejor contenido para emprendedores directamente en tu correo te puedes suscribir haciendo click aquí (Recuerda confirmar tu suscripción.

Contenido del Pack de Plantillas Excel Para Contadores:

1.Análisis ABC de Ventas

2.Análisis de Empresa

3.Análisis de Resultado

4.Análisis Patrimonial de la Empresa

5.Indices y Ratios

6.Cálculo del Punto de Equilibrio

7.Cancelación de Comprobantes

8.Cartera de Valores

9.Costo total, medio y marginal

10.Desviación Presupuestaria

11.Flujo de Tesorería

12.Niveles de Producción

13.Presupuestar

14.Presupuesto de Pagos y Cobranzas

15.Presupuesto de Unidades Físicas

16.Presupuesto de Ventas y Compras

17.Presupuesto de Ventas

18.Actualización de Egresos

19.Actualización de Ingresos

20.Existencia Bienes de Cambio con Inflación

Ver la entrada original 24 palabras más

Excel: Herramientas analíticas


Informática Educativa

Herramientas analíticas 

Acerca de las herramientas de análisis estadístico                        

Microsoft Excel proporciona un conjunto de herramientas de análisis de datos, denominadas Herramientas para análisis, que puede utilizar para ahorrar pasos a la hora de desarrollar análisis complejo de ingeniería o estadístico. Usted proporciona los datos y los parámetros para cada análisis; la herramienta utiliza las funciones de macros de ingeniería o estadísticas apropiadas y, a continuación, muestra los resultados en una tabla. Algunas herramientas generan gráficos además de las tablas de resultados.

Funciones relacionadas de la hoja de cálculo Excel proporciona muchas otras funciones estadísticas, financieras y de ingeniería de la hoja de cálculo. Algunas de las funciones estadísticas están integradas y otras están disponibles cuando se instalan las Herramientas para análisis.

Acceso a las herramientas de análisis de datos Las Herramientas para análisis incluyen las herramientas que se describen más abajo. Para tener acceso a estas herramientas, haga…

Ver la entrada original 3.176 palabras más

Macros en ACCESS


Informática Educativa

macros2

Una macro abreviatura de macroinstrucción― es una serie de instrucciones que se almacenan para que se puedan ejecutar de manera secuencial mediante una sola llamada u orden de ejecución. Dicho de otra manera, una macroinstrucción es una instrucción compleja, formada por otras instrucciones más sencillas. Esto permite la automatización de tareas repetitivas.

Las macros tienden a almacenarse en el ámbito del propio programa que las utiliza y se ejecutan pulsando una combinación especial de teclas o un botón especialmente creado y asignado para tal efecto.

La diferencia entre una macroinstrucción y un programa es que en las macroinstrucciones la ejecución es secuencial y no existe otro concepto del flujo de programa, y por tanto, no puede bifurcarse.

Macros de aplicaciones

Las macros son grupos de instrucciones que tienen un seguimiento cronológico y se utilizan para economizar tareas. Una macro no es más que un conjunto de instrucciones (tales como…

Ver la entrada original 420 palabras más

Bases de datos relacionales (ACCESS, MySQL)


Informática Educativa

Microsoft Access

Es un sistema de administración de bases de datos relacionales, diseñado especialmente para ser utilizado bajo Windows.

Una base de datos es una recopilación de información relativa a un asunto o propósito particular, como el seguimiento de pedidos de clientes o el mantenimiento de una colección de música. Si la base de datos no está almacenada en un equipo, o sólo están instaladas partes de la misma, puede que deba hacer un seguimiento de información procedente de varias fuentes en orden a coordinar y organizar la base de datos.

Archivos de base de datos de Access

Por medio de Microsoft Access, puede administrar toda la información desde un único archivo de base de datos. Dentro del archivo, puede utilizar:

  • Tablas para almacenar los datos.
  • Consultas para buscar y recuperar únicamente los datos que necesita.
  • Formularios para ver, agregar y actualizar…

Ver la entrada original 194 palabras más

Ejercicio de Tablas Dinámicas


Informática Educativa

de  http://www.aulaclic.es/excel2007/epr_16_3_1.htm

1 Copia estos datos y guárdelos en un archivo llamado Taller_dinamica.xls

2 Crear una tabla dinámica a partir de la tabla anterior para saber de cada coche, en cada mes, cuántas horas hemos empleado en repararlo y el desembolso realizado.

3 Visualizar unicamente las reparaciones del mes de Enero.

4 Crear una gráfica de la tabla dinámica.

5 Guardar los cambios realizados

El apartado 2 nos pide crear una tabla dinámica:

1 Ir a la pestaña Insertar.

2 Haz clic en el botón Tabla dinámica.

3 Seleciona la opción Seleccione una tabla o rango y selecciona el rango de celdas A1:F13.

4 Selecciona la opción Nueva hoja de cálculo y pulsa Aceptar.

5 Arrastra el campo MES a la zona .

6 Arrastra el campo Nº COCHE a la zona .

7 Arrastra el campo HORAS a la zona de .

8 Arrastra…

Ver la entrada original 103 palabras más

Registro de temperaturas ( Ejercicio en Excel)


Informática Educativa

En este ejercicio se debe crear una planilla Excel, de acuerdo al siguiente modelo.

A modo de guía atienda los detalles de diseño y formato.

A- Formato fila 1:

  1. Altura 27,75
  2. Las celdas B1:C1 y D1:E1 se encuentran en formado “combinadas”
  3. Estilo de la fuente “negrita”
  4. El contenido de las celdas se encuentra centrado horizontal y verticalmente
  5. Sombreado de las celdas: gris

B- Formato de la fila 2

  1. Estilo de la fuente “negrita”
  2. Sombreado de las celdas: gris

C- Formato de la columna 1

  1. Estilo de la fuente “negrita”
  2. Sombreado de las celdas: gris
  3. Los datos de las temperaturas B2:E8 se deben mostrar en forma “centrada” y el color de fondo es a elección

Aplicar un borde exterior de trazo grueso, color negro

Guardar el libro en su carpeta como temperaturas.xls. 

Investigue el significado de la opción Rellenar Series, en Excel e ingreselo como comentario.

Ver la entrada original

Elegir entre Access y Excel


Informática Educativa

La gran pregunta: ¿Cómo desea organizar los datos?

Si no sabe si elegir Access o Excel, dedique un momento a responder una pregunta importante: ¿Necesita organizar los datos en una estructura de datos relacional o una estructura de datos plana? Sí, son términos de experto, pero no permita que le intimiden. Decidir una estructura es difícil. En las siguientes secciones se ofrece información acerca de cada tipo de estructura de datos y aprenderá a decidir cuál es la mejor opción.

Por ahora, sólo tenga presente que Access está diseñado para trabajar con datos relacionales, mientras que Excel funciona mejor con estructuras de datos planas.

¿Análisis y números? Elija Excel

¿En qué se destaca Excel? ¡Con los números! Puede ejecutar análisis de modelos Y si sofisticados y análisis de costes y beneficios que no podrá lograr con Access.

¿Necesita informes de tablas dinámicas? Son tablas interactivas que le permiten girar filas y columnas y…

Ver la entrada original 261 palabras más

Excel. Desvío Standard: Interpretación y aplicación


Informática Educativa

desv1

La desviación estándar o desviación típica (denotada con el símbolo σ o s, dependiendo de la procedencia del conjunto de datos) es una medida de dispersión para variables de razón (variables cuantitativas o cantidades racionales) y de intervalo. Se define como la raíz cuadrada de la varianza de la variable.

Para conocer con detalle un conjunto de datos, no basta con conocer las medidas de tendencia central, sino que necesitamos conocer también la desviación que presentan los datos en su distribución respecto de la media aritmética de dicha distribución, con objeto de tener una visión de los mismos más acorde con la realidad al momento de describirlos e interpretarlos para la toma de decisiones.

desv2

Interpretación y aplicación
La desviación típica es una medida del grado de dispersión de los datos con respecto al valor promedio. Dicho de otra manera, la desviación estándar es simplemente el “promedio” o variación esperada con…

Ver la entrada original 479 palabras más

Filtros en Excel


Informática Educativa

Filtros: consiste en ocultar las filas o columnas que no cumplen ciertas funciones específicas. No las “borra”…solo que no las muestra.

Aplicar filtros es una forma rápida y fácil de buscar un subconjunto de datos de un rango y trabajar con el mismo. Un rango filtrado muestra sólo   a las filas que cumplen el criterio  condiciones que se especifican para limitar los registros que se incluyen en el conjunto de resultados una consulta    o un filtro.)que se especifique para una columna. Microsoft Excel proporciona dos comandos para aplicar filtros a los rangos:

  • Autofiltro, que incluye filtrar por selección, para criterios simples
  • Filtro avanzado, para criterios más complejos

A diferencia de la ordenación, el filtrado no reorganiza los rangos. El filtrado oculta temporalmente las filas que no se desea mostrar.

Cuando Excel filtra filas, le permite modificar, aplicar formato, representar en gráficos e imprimir el subconjunto del rango sin…

Ver la entrada original 525 palabras más

MS Excel – Linkear hojas de una planilla


Informática Educativa

Sumar dos o más hojas de trabajo en una hoja resúmen (recuerde que al pie tiene las orejetas de Hoja1, Hoja 2, etc).

Todas las hojas deben tener el mismo diseño, que lo definimos en Hoja 1.  Vamos a vincular (linkear) una Hoja con otras, del mismo libro (planilla) que se llamará gastos.xls y será guardado en su carpeta de usuario.

En la Hoja 1 deberá ingresar (copy/ paste) los siguientes datos:

ENERO
RUBRO GASTO % DEL TOTAL 10%
VIVIENDA $ 2.000,00
GAS $ 20,00
TELEFONO $ 100,00
IMPUESTOS $ 70,00
AUTO $ 100,00
ELECTRICIDAD $ 40,00
$ 2.330,00

Luego en la Hoja 2 lo siguiente:

ENERO
RUBRO GASTO % DEL TOTAL 10%
VIVIENDA $ 3.000,00
GAS $ 30,00
TELEFONO $ 200,00
IMPUESTOS $ 90,00
AUTO $ 160,00
ELECTRICIDAD $ 50,00
$ 3.530,00

Y finalmente en la Hoja 3 lo que sigue:

ENERO
RUBRO GASTO % DEL TOTAL 10%
VIVIENDA
GAS
TELEFONO

Ver la entrada original 373 palabras más

Condiciones compuestas en Excel- La función O


Informática Educativa

La función O (Disyunción)  

Devolverá VERDADERO si “al menos” uno de los argumentos es VERDADERO; devolverá FALSO solamente si todos los argumentos son FALSOS.

Sintaxis

O(valor_lógico1;valor_lógico2; …)

Valor_lógico1, Valor_lógico2, … son de 1 a 255 condiciones que se desea comprobar y que pueden tener el resultado de VERDADERO o FALSO.

Ver la entrada original 106 palabras más

Buscar a partir de dos variables en Excel


Informática Educativa

Ver:     http://excellentias.com/

Supongamos que tenemos como punto de inicio una tabla de datos organizada como la de la figura adjunta, es decir una tabla no organizada como una base de datos sino cómo un sumario de datos por categorías. La primera fila y la primera columna describen el contenido de cada fila y columna respectivamente. Nuestro objetivo será conocer cuál es el valor intersección entre dos variables, por ejemplo, cuál es el valor de alcanzado en Julio en América.

Para conocer el valor intersección de dos variables emplearemos la función Excel ÍNDICE para localizar entre el área de datos la fila y columna de nuestro interés. Para conocer cuál es la fila y columna de nuestro interés emplearemos la función Excel COINCIDIR.

En la celda donde deseemos realizar nuestra búsqueda aplicaremos la siguiente fórmula:

Fórmula para Buscar a partir de dos Variables

=INDICE(Rango_donde_se_hará_la_búsqueda; COINCIDIR(Valor_Columna_a_Buscar;Rango_Primera_Columna;0); COINCIDIR(Valor_Fila_a_Buscar;Rango_Primera_Fila;0))

En esta fórmula:

Ver la entrada original 272 palabras más

Escenarios comunes para importar datos de Excel a Access


Informática Educativa

excacc1

Comprender la importación de datos de Excel

Si su objetivo es guardar parte o todos los datos de una o varias hojas de cálculo de Access, debe importar el contenido de la hoja de cálculo a una base de datos de Access nueva o existente. Al importar datos, Access crea una copia de los datos en una tabla nueva o existente sin alterar el archivo de origen de Excel.

Es usuario de Excel desde hace tiempo pero para seguir avanzando desea utilizar Access para trabajar con estos datos. Desea moverlos de las hojas de cálculo de Excel a una o varias bases de datos nuevas de Access.
Su departamento o grupo de trabajo utiliza Access pero recibe ocasionalmente datos en formato de Excel que se deben combinar con sus bases de datos de Access. Desea importar estas hojas de cálculo de Excel a su base de datos a medida que…

Ver la entrada original 702 palabras más

DIRECCION (función DIRECCION) – MS EXCEL


Informática Educativa

dir1

En este artículo se describen la sintaxis de la fórmula y el uso de la función (función: fórmula ya escrita que toma un valor o valores, realiza una operación y devuelve un valor o valores. Utilice funciones para simplificar y acortar fórmulas en una hoja de cálculo, especialmente aquellas que llevan a cabo cálculos prolongados o complejos.)DIRECCION en Microsoft Excel. Puede encontrar vínculos a información sobre cómo trabajar con direcciones de correo o crear etiquetas postales en la sección Vea también.

Descripción

Puede usar la función DIRECCION para obtener la dirección de una celda en una hoja de cálculo, con los números específicos de fila y columna. Por ejemplo, DIRECCION(2;3) devuelve $C$2. Otro ejemplo, DIRECCION(77;300) devuelve $KN$77. Puede usar otras funciones, como FILA y COLUMNA, para proporcionar los argumentos (argumento: valor que proporciona información a una acción, un evento, un método, una propiedad, una función o…

Ver la entrada original 550 palabras más

Estructura general de un programa de C# (Guía de programación de C#)


Informática Educativa

C#

Visual Studio 2010

Los programas en C# pueden constar de uno o varios archivos.Cada archivo puede contener cero o varios espacios de nombres.Un espacio de nombres puede contener tipos como clases, structs, interfaces, enumeraciones y delegados, además de otros espacios de nombres.A continuación, se muestra el esqueleto de un programa en C# que contiene todos estos elementos.

………………………………………………………………………………………………………………………………………………………

// código

// A skeleton of a C# program

using System;

namespace YourNamespace

{

class YourClass

{

}

struct YourStruct

{

}

interface IYourInterface

{

}

delegate int YourDelegate();

enum YourEnum

{

}

namespace YourNestedNamespace

{

struct YourStruct

{

}

}

class YourMainClass

{

static void Main(string[] args)

{

//Your program starts here…

}

}

}

// FIN

…………………………………………………………………………………………………………………………………………………………

C#1

http://msdn.microsoft.com/es-es/library/w2a9a9s3(v=vs.100).aspx

Ver la entrada original

Creación de sitios Web…


Informática Educativa

Para crear una página Web se deben escribir programas. El lenguaje utilizado es el HTML (¿ qué quería decir?)

Se deben cumplir las siguientes etapas:

  1. Análisis
  2. Diseño
  3. Implementación
  4. Publicación
  5. Promoción
  6. Mantenimiento

Piense y comente que significa cada una de estas etapas.

Mi primer documento HTML:

Las páginas HTML se dividen en dos partes: la cabecera y el cuerpo. La cabecera incluye información sobre la propia página, como por ejemplo su título y su idioma. El cuerpo de la página incluye todos sus contenidos, como párrafos de texto e imágenes.

El cuerpo (llamado body en inglés) contiene todo lo que el usuario ve en su pantalla y la cabecera (llamada head en inglés) contiene todo lo que no se ve (con la única excepción del título de la página, que los navegadores muestran como título de sus ventanas).

A continuación se muestra el código HTML de una página web muy sencilla.

Abra…

Ver la entrada original 67 palabras más

PowerPoint 2013: la nube presente


Informática Educativa

De la misma manera en que hemos procedido con Word 2013 y Excel 2013, hoy nos toca repasar las novedades de la herramienta de presentación de la suite ofimática de Microsoft: PowerPoint 2013. Afortunadamente, las nuevas opciones incluidas dentro del programa le han dado un giro más intuitivo que hace que trabajar con presentaciones sea mucho más cómodo que antes.
Además, la presencia de algunas pequeñas adiciones a través de toda la plataforma hace una gran diferencia, a pesar de no resultar tan evidentes en una primera mirada. De esta manera, PowerPoint 2013 se suma a la serie de aciertos que viene resultando Office 2013, y hace que la actualización a esta última versión del paquete de productividad aparezca como la primera en muchos años en ser realmente apetecible.
Interfaz
Si han leídos mis anteriores reseñas sobre Office 2013, he de decirles que PowerPoint 2013 encierra los mismos cambios estéticos…

Ver la entrada original 810 palabras más

Convertir una hoja de cálculo de Excel en una base de datos de Access 2013


Informática Educativa

Prepare sus datos

001231excel1

Después de enviar sus tarjetas navideñas último año, ¿te haces una promesa que usted organice su lista de direcciones para hacer el proceso más fácil el año que viene? ¿Tiene una gran hoja de cálculo Excel que no se puede hacer ni pies ni cabeza? Tal vez tu libreta de direcciones tiene un aspecto como el que se muestra en el siguiente archivo. O, tal vez, a mantener su libreta de direcciones (¡oh!) Pedazos de papel.

Es el momento de cumplir esa promesa a sí mismo – organizar su lista de contactos en una base de datos de Microsoft Access . Es mucho más fácil de lo que imaginas y que sin duda estará encantado con los resultados. Este tutorial te guiará a través de todo el proceso paso a paso.

Si usted no tiene su propia hoja de cálculo y desea seguir con el tutorial, puede…

Ver la entrada original 65 palabras más

Excel 2013: función SUMAR.SI.CONJUNTO


Informática Educativa

Descripción
Agrega las celdas de un rango que cumpla con varios criterios. Por ejemplo, si desea sumar los números del rango A1:A20 solo si los números de B1:B20 correspondientes son mayores que cero (0) y los números de C1:C20 correspondientes son menores que 10, puede usar la siguiente fórmula:
=SUMAR.SI.CONJUNTO(A1:A20; B1:B20; “>0”; C1:C20; “32”, B4, “manzanas” o “32”.
rango_criterios2; criterios2; … Opcional. Rangos adicionales y sus criterios asociados. Se permiten hasta 127 pares de rangos/criterios.
Observaciones
Las celdas del argumento rango_suma se suman solo si se cumplen los criterios correspondientes especificados para esa celda. Por ejemplo, supongamos que una fórmula contiene dos argumentos rango_criterios. Si la primera celda de rango_criterios1 cumple con criterios1 y la primera celda de rango_criterios2 cumple con criterios2, se agrega la primera celda de rango_suma a la suma y así sucesivamente para todas las celdas restantes de los rangos especificados.
Las celdas del argumento rango_suma que…

Ver la entrada original 502 palabras más

Excel: función AGREGAR


Informática Educativa

Cuando en una celda de nuestra hoja de cálculo aparece un error de cualquier tipo (#N/A, #¡VALOR!, #¡DIV/0!, #¿NOMBRE?, #¡NUM!, #¡NULO!, #¡REF!) una sensación de frustración recorre nuestro cuerpo y nuestra mente. Pero es peor aun cuando comprobamos que otras fórmulas que teníamos relacionadas con esa celda errónea también devuelven un error.

…Y es que los errores se llevan fatal, generalmente, con fórmulas y funciones. Aunque, un momento… no con todas hay mala relación. Existe una función muy poco conocida y por su versatilidad y polivalencia es una especie de “navaja suiza” de las funciones y que además, es capaz de ignorar y convivir con los errores.

Se trata de la función AGREGAR y, aunque pueda parecer por su nombre que está dedicada sólo a “sumar”, no es así, sino que podemos asignarle cualquiera de las funciones de una lista interesante. Sólo tenemos que atender a su estructura:

=AGREGAR (Núm_función…

Ver la entrada original 94 palabras más

Tareas básicas para una aplicación de Access


ACCESS, Aplicación

Informática Educativa

Las aplicaciones de Access están creadas para que sea más sencillo compartir y colaborar en exploradores. Para crear y usar una aplicación de Access necesitará Access y un sitio de Office 365 o SharePoint Server 2013. Aquí encontrará más información sobre la creación de una aplicación de Access. Veamos rápidamente cómo crear una aplicación, agregar datos a ella y más pasos para personalizar y usar la aplicación.

Si está más interesado en trabajar con una base de datos de escritorio, consulte Tareas básicas para base de datos de escritorio en Access 2013.

Cómo crear una aplicación de una plantilla

Es más rápido empezar con una de las plantillas de aplicaciones de Access.
1.En la pantalla de inicio de Access, desplace hacia abajo para ver las plantillas incluidas. Las aplicaciones más populares como, por ejemplo, Seguimiento de activos, Contactos y Seguimiento de asuntos aparecen primero en la lista. Las aplicaciones que…

Ver la entrada original 351 palabras más

Excel: funciones relacionadas con el condicional: CONTAR.SI


La función CONTAR.SI cuenta el número de celdas dentro de un rango que cumplen un solo criterio especificado por el usuario

Informática Educativa

CONTAR.SI (función CONTAR.SI)

Descripción

La función CONTAR.SI cuenta el número de celdas dentro de un rango que cumplen un solo criterio especificado por el usuario. Por ejemplo, puede contar todas las celdas que comienzan con cierta letra, o bien todas las celdas que contienen un número mayor o menor que un número especificado por el usuario. Por ejemplo, suponga que tiene una hoja de cálculo que contiene una lista de tareas en la columna A y el primer nombre de la persona asignada a cada tarea en la columna B. Puede usar la función CONTAR.SI para contar cuántas veces aparece el nombre de una persona en la columna B y, de esa forma, determinar cuántas tareas tiene asignadas. Por ejemplo:

=CONTAR.SI(B2:B25,”Nancy”)

Nota Para contar celdas basándose en varios criterios, vea la función CONTAR.SI.CONJUNTO.

Sintaxis

CONTAR.SI(rango;criterios)

La sintaxis de la función CONTAR.SI tiene los siguientes argumentos (argumento: valor que proporciona…

Ver la entrada original 348 palabras más

Bases de datos de muestra incluidas en Access ( y SQL Server)


Bases de datos de muestra incluidas en Access ( y SQL Server).

La base de datos y proyecto Neptuno de Access (disponible con el comando Bases de datos de ejemplo en el menú Ayuda) contiene los datos de ventas de una compañía ficticia denominada Importadores Neptuno, que importa y exporta comestibles especiales de todo el mundo. Viendo los objetos de base de datos incluidos en la base de datos Neptuno, podrá desarrollar ideas para su propia aplicación de base de datos. También puede utilizar los datos de Neptuno para hacer pruebas con Access antes de escribir sus propios datos. Por ejemplo, puede practicar el diseño de consultas con la tabla Pedidos de Neptuno, ya que contiene los registros suficientes para generar resultados significativos.

MS ACCESS: Comprender macros


MS ACCESS: Comprender macros.

Una macro es una herramienta que permite automatizar tareas y agregar funcionalidad a formularios, informes y controles. Por ejemplo, si agrega un botón de comando a un formulario, asocia la propiedad de evento AlHacerClic del botón a una macro que contiene los comandos que desea que realice el botón cada vez que se haga clic en él.

Visitas del 21/01/2014


expe2

Mensajes y Páginas Populares

Estas entradas de tu sitio obtuvieron el mayor tráfico.  http://www.empiezoinformatica.wordpress.com

2014-01-14

Título Visitas
Página de inicio / Archivos More stats 56
Como sacar el IVA y calcularlo en Excel More stats 35
Plantillas de bases de datos para crear aplicaciones completas More stats 13
Planilla de Excel para Estado de Resultados More stats 12
Excel 2013: Seguimiento de proyectos More stats 9
Balance de comprobación – Excel More stats 8
Planilla Excel de Libro Diario More stats 8
Sistema de Facturación en Excel (Emisión, registro, pagos y más) More stats 8
Plantillas para manejar la contabilidad de una empresa o negocio usando excel More stats 8
En Microsoft Access 2010, puede crear bases de datos web y publicarlas en un sitio de SharePoint. More stats 6
Facturación con MS ACCESS More stats 6
Aplicaciones Cliente/ Servidor More stats 5
EXCEL 2010: Consolidar datos de varias hojas de cálculo en una sola hoja de cálculo More stats 5
MS ACCESS: consulta de parámetros More stats 5
ACCESS: Programa de contabilidad de propósito general para Pymes. More stats 5
Trabajar en modo de compatibilidad en Excel 2010 More stats 5
Exportar datos de un programa de VisualBasic.net a Excel More stats 4
Crear gráficos e informes de tabla dinámica con VBA en Excel 2010 More stats 4
Reglas de código: VB.NET – Kid’s Corner More stats 4
Interactuar (se lee en 5 minutos) entre Excel y Access More stats 3
EXCEL: TRABAJAR CON VARIOS LIBROS More stats 3
MS ACCESS para control de Inventarios More stats 3
Excel: Línea de tendencia polinómica More stats 3
Ejercicio en Publisher More stats 3
Otras entradas 145
Visitas totales a entradas en tu blog 366

¿Netbook o tablet?, ésa es la cuestión


notab

Diferencias y bondades
Antes de decidirse entre una u otra es necesario conocer sus particularidades y las prestaciones, para elegir la más adecuada según la actividad y las necesidades tecnológicas de cada empresa.
Las netbooks tienen teclado integrado con mayores opciones de sistema operativo tradicional y flexibilidad en la configuración (mayor memoria y disco duro). Asimismo suelen tener varios puertos USB, para adosarles teclados y ratones externos, y salidas de video para usarlas con monitores externos.
Las tablets, en cambio, presentan mayor comodidad de uso en situaciones donde los usuarios están de pie o necesitan ingresar información sin teclado. “Entre los pros de las netbooks se destaca que son más livianas que las notebooks, con capacidad similar para correr aplicativos existentes de forma móvil. Mientras que las tablets presentan nuevas formas de trabajo donde se requiere mucho consumo de información, con poca necesidad de editar documentos y correos”, resumió Mike Totah, gerente de Soluciones Corporativas de Dell Latin America.
Ente las contras Totah dice que las netbook no son tan poderosas como una notebook y no pueden correr programas que requieren utilización de gráficos intensivos. “Las tablets necesitan programas especialmente escritos para su sistema operativo, que en muchos casos requieren de conectividad constante para operar, y no tienen teclado físico, lo que puede ser incómodo para ingresar grandes cantidades de información”, detalló el ejecutivo de Dell.
Joan Ruiz Beck, gerente de marca para la línea de productos de Think en Lenovo Argentina, comentó que las netbooks fueron concebidas como equipos de bajo costo que permiten mayor movilidad. “Pensados, en principio, como un segundo dispositivo fueron ganando su lugar principalmente en las iniciativas educativas de acceso a Internet. Las tabletas, en cambio, son un nuevo concepto que revolucionará la forma en que los usuarios acceden a la información y viven la tecnología. Las tabletas representan lo último en tecnología y movilidad, y permiten a los usuarios mantenerse en interacción constante con las redes sociales y la Web en general. Lo que es más importante, implican un cambio ergonómico y de usabilidad”, resumió.
Actualmente, en el nivel local, Dell comercializa netbooks, pero en muy poco tiempo comenzará a ofrecer dos modelos de tablets: la Streak 5 y la Streak 7. Mientras que Lenovo Argentina también vende netbooks y tiene planeado comercializar, en los próximos meses, su nueva tableta LePad.
El más corp
Para elegir el dispositivo más adecuado para el sector empresario Totah recomienda analizar la utilidad que se le dará. Según él, las netbooks son cómodas para viajeros frecuentes que no desean cargar con el peso de una laptop y que sólo necesitan enviar y recibir correo, trabajar con programas de productividad y navegar por Internet. “Las tablets son más atractivas para empleados que están en movimiento, que necesitan recibir un alto volumen de información y no tienen que escribir demasiado”, dijo el gerente de Dell.
La seguridad es, sin duda, uno de los puntos de más interés dentro de las empresas. Las compañías consultadas aseguran que existen opciones de seguridad para ambas plataformas. Las netbooks cuentan con las tradicionales soluciones de encriptación de datos y servicios de rastreo para borrar información sensible de forma remota, lo mismo que las tablets. “Pero en este caso, no siempre cuentan con consolas centralizadas para la administración de las mismas. Asimismo, dependiendo de los programas que se utilizan en estos dispositivos, los datos no siempre están encriptados”, agregó Totah.
Otro factor es el costo, pero en esta oportunidad no es determinante ya que los precios de los dos equipos no suelen ser en extremo diferentes (excepto los subsidiados por las compañías de telefonía celular), pero debe considerarse que el costo para migrar al modelo de tablets está en el desarrollo de aplicativos nuevos específicamente realizados para aprovechar las ventajas de su plataforma. “Además, las empresas necesitarían un nuevo modelo para administrar las tablets que les incrementaría los costos, mientras que una netbook corriendo Windows 7 puede ser administrada usando el mismo modelo que utiliza la empresa para sus PC”, aseguró Totah, y comentó que en Dell planean, antes de fin de año, lanzar una tablet que ofrecerá la posibilidad de correr Windows 7.
Según el gerente de Lenovo, las netbooks fueron y son recomendadas como equipos para acceso a Internet y tareas básicas de ofimática. “Es difícil aún predecir el grado de penetración de las tablets en el sector corporativo, pero sin duda aquí el desafío y el límite están puestos del lado del software y no del hardware”, afirmó Ruiz Beck.
Por último, el informe de Deloitte predice: “Las empresas enfrentarán el reto de cuál tablet integrar al ambiente laboral. El precio será un factor importante así como sus funcionalidades, resistencia al uso rudo, seguridad (ya que son fáciles de hurtar) y costo de las aplicaciones empresariales”..

Fuente: Cintia Perazo http://www.lanacion.com.ar/1368832-netbook-o-tablet-esa-es-la-cuestion

Pasos básico en Excel


sec

Para comenzar, te ofrecemos una primera ejercitación muy sencilla.
En esta guía aprenderás a iniciar tu propia planilla electrónica, para lo cual crearás un nuevo libro sobre el cual trabajar. Al finalizar, podrás guardar tu primera planilla en la computadora.
Es muy importante realizar esta ejercitación paso a paso.

Paso 1
Para iniciar esta práctica deberás ejecutar Excel. Haciendo clic en el botón Inicio notarás que se despliega un menú del mismo nombre, en el cual deberás seleccionar la opción Todos los programas y, a continuación, hacer clic en Microsoft Office Excel 2007. Si no podés identificar esta última selección, aguardá unos segundos con el puntero del mouse sobre el menú para que éste se despliegue completamente.

Paso 2
Una vez iniciada la aplicación, te encontrarás con tu primera planilla electrónica, a la cual, por defecto, Excel denomina Libro1. Deberás guardar esta planilla con un nuevo nombre. Para hacerlo, tenés que hacer clic en el Botón de Office y posteriormente seleccionar la opción Guardar.
Verás una ventana en la que se te solicita ingresar un nombre para identificar tu planilla. En el cuadro de texto que aparece en la parte inferior central de la ventana, donde se te solicita el Nombre de archivo:, y donde dice “Libro1”, reemplazá este nombre por el nuevo, Mi planilla de Cálculo. Hecho esto, deberás hacer clic en el botón Guardar para que Excel grabe tu planilla en la ubicación elegida (en este caso, deberás grabarla dentro de la carpeta Mis Documentos).
Paso 3
Ahora deberás renombrar las hojas para identificar de un modo más claro su contenido. Para hacerlo tendrás que seleccionar la pestaña donde figura el nombre de la hoja haciendo clic derecho; a continuación, seleccioná la opción Cambiar nombre, y seguidamente escribí los nombres Empleados, Asistencias y Salarios, para las tres primeras hojas, y Gráficos para la cuarta. Otra forma de hacerlo es haciendo doble clic en la pestaña, cuando se selecciona el texto del nombre podrás cambiarlo por otro. Debería quedarte algo similar a esto:

Realizá la siguiente ejercitación paso a paso para lograr un buen resultado.

excel8

Paso 4
Para finalizar la guía será necesario que grabes la planilla de trabajo. Deberás entonces seleccionar el ítem Guardar como del Botón de Office haciendo clic sobre él. Al abrirse la ventana deberás escribir el nuevo nombre de la planilla en el cuadro de Nombre de Archivo. Para este trabajo hemos elegido el nombre “Mi planilla de cálculo corregida”.
Luego, cerrá la aplicación (recordá que podés cerrarla con la opción del botón de Office o con los botones de control de la ventana).

Fuente:
http://profmatiassivila.blogspot.com.ar/p/recurso-excel.html

Paso 1
Iniciá tu trabajo haciendo clic en el ícono de escritorio Excel, tal como se explicó en la guía pasada. Cuando te encuentres frente a la pantalla de Excel, seleccioná la opción Abrir del Botón de Office. En esta ventana encontrarás, dentro de la carpeta Mis Documentos, la planilla denominada “Mi planilla de cálculo”. Hacé clic sobre ella y luego sobre el botón Abrir que se encuentra en el ángulo inferior derecho de la ventana.

Paso2

Ahora deberás insertar una hoja entre la Hoja2 y la Hoja3. Para hacerlo tendrás que hacer clic sobre la pestaña de la Hoja3, luego, ir a la ficha Inicio, desplegar el menú Insertar y hacer clic sobre la opción Insertar hoja. Verás que se acaba de insertar una nueva hoja, a la cual Excel le asignó el nombre de Hoja4.

Paso 3
Ahora deberás renombrar las hojas para identificar de un modo más claro su contenido. Para hacerlo tendrás que seleccionar la pestaña donde figura el nombre de la hoja haciendo clic derecho; a continuación, seleccioná la opción Cambiar nombre, y seguidamente escribí los nombres Empleados, Asistencias y Salarios, para las tres primeras hojas, y Gráficos para la cuarta. Otra forma de hacerlo es haciendo doble clic en la pestaña, cuando se selecciona el texto del nombre podrás cambiarlo por otro. Debería quedarte algo similar a esto:

Principales desafíos y retos para el crecimiento de las Pymes en Latinoamérica.


empre

La importancia de las empresas pequeñas y medianas (PyMEs) en las economías latinoamericanas ha sido objeto de numerosos estudios de investigación. Representan más del 90% de las empresas de la región y, en particular, se destaca la fuerte incidencia que tienen en la provisión de fuentes de trabajo, por lo que conforman la base fundamental de la estructura del tejido social.
Es por ello que –prácticamente- todos los países de la región procuran articular políticas, planes y programas que hagan foco en la competitividad y productividad de las Pymes. No obstante ello, el diferencial de productividad que existe entre las Pymes y las grandes empresas resulta ser mucho mayor en Latinoamérica que la existente en los países desarrollados.
Este fenómeno puede ser observado de dos maneras diferentes, que conforman dos caras de una misma moneda: Las Pymes latinoamericanas se ven obligadas a enfrentar un sinnúmero de dificultades y obstáculos extra, que sus congéneres de los países desarrollados no tienen que afrontar. La otra forma de verlo, es que nuestras Pymes todavía presentan un potencial de desarrollo que, si se sabe aprovechar, hará que se amplíen las oportunidades de crecimiento para toda la región.

SUPERANDO OBSTÁCULOS + DETECTANDO OPORTUNIDADES Y AMENAZAS.

Los principales obstáculos para el crecimiento de las Pymes en la región son: el acceso al financiamiento a mediano y largo plazo, las regulaciones a la actividad económica, el costo de la energía y el costo creciente del m2 en las grandes urbes. Pero, sin lugar a dudas, la mayor preocupación radica en la capacidad para conseguir y retener a empleados cualificados, a un costo competitivo.
Los empresarios latinoamericanos coinciden en que el factor a desarrollar de mayor competitividad en la región se encuentra en la profesionalización de los recursos humanos, y no se equivocan: los grandes capitales de inversión en América Latina se han radicado en los países en los que existe la mejor calidad de mano de obra.
La principal barrera que tienen las PyMEs a nivel Latinoamérica es la de poder contar con personal calificado, capacitado e idóneo. Las Pymes pierden estos recursos en manos de empresas más grandes, que cuentan con más posibilidades de otorgar mayores salarios y beneficios.
En segundo tema que más preocupa a los empresarios es la falta de oportunidades de financiamiento a un costo competitivo, por lo que monitorear diariamente y con precisión el cash-flow y el capital de trabajo se torna una cuestión de supervivencia. Cuando los clientes solicitan comprar a crédito y con plazos más largos, las empresas incursionan en problemas financieros debido a la falta de liquidez. Operar con un reducido volumen de negocios los obliga a comprar a precios relativamente altos y a vender -con escaso margen- a precios relativamente bajos. Como consecuencia de ello, se ven en la imposibilidad de acumular excedentes reinvertibles, por lo que en la mayoría de los casos, reproducen precariamente sus existencias, remunerando de la misma manera a sus trabajadores. Podemos observar entonces que todos estos factores es encuentran íntimamente interrelacionados y que todos ellos atentan contra su crecimiento.
Asimismo, la inestabilidad política, sumado a la falta de reglas de juego claras por parte de los principales actores económicos, dificultan la formulación de planes a mediano y largo plazo en las empresas y esto afecta severamente las decisiones de inversión.

py2
Por otra parte, el exceso de regulaciones a la actividad económica, las trabas burocráticas, la asfixiante presión tributaria, una legislación laboral todavía deficiente, la corrupción, el retraso en la adecuación de la infraestructura y las prácticas de las empresas del denominado “sector informal” (léase: competencia desleal) completan el panorama.
Las Pymes tienen un importante potencial para desarrollar su competitividad.
Sólo el 30% de las empresas familiares sobreviven el traspaso a la segunda generación y apenas el 15% logra pasar a la tercera generación. La mayor parte de los modelos de negocio tradicionales de las pymes están en franco retroceso, debido principalmente a los cambios de paradigmas que impulsan la globalización y el avance de las tecnologías de la comunicación/información.
Para incrementar entonces la competitividad de las pymes, resulta imprescindible contemplar dos aspectos claves del cambio: disponer de fuerza laboral calificada y adoptar tecnologías de la información.
A diferencia de las grandes empresas, que poseen mayoritariamente cuadros profesionalizados, la incorporación de herramientas y tecnologías de Business Intelligence en las Pymes resulta -a todas luces- un territorio prácticamente inexplorado para la gran mayoría de las empresas (y un excelente nicho de consultoría para incursionar). Pareciera que existe la creencia generalizada de que estas prácticas sólo corresponden a las grandes empresas o que están reservadas a entornos altamente profesionalizados. Cualquier empresario pyme -medianamente informado- conoce las bondades de estas herramientas y desearía -sin lugar a dudas- implementarlas en su empresa, pero por algún motivo, lo posterga por las que considera otras prioridades, tal vez, porque lo estima tan inalcanzable -en costo y complejidad- como lo sería instalar un sistema SAP. Lejos de este prejuicio, la realidad indica que en la era de la híper-conectividad y de la transferencia de información, prácticamente cualquier tipo de conocimiento se encuentra al alcance de quien posea la inquietud necesaria, por lo que cualquier Ceo de una Pyme, con habilidades para el bootstrapping, puede aplicarlas en su empresa.
La nube o la tecnología Cloud Computing ha hecho posible, entre muchos otros méritos, que la Inteligencia de negocios o Business Intelligence (BI), anteriormente arma únicamente disponible en el arsenal de las grandes empresas por ser muy cara y compleja, pueda ser una herramienta accesible para las pymes. Esto es debido, principalmente, a que gracias a internet y las nuevas tecnologías, los softwares de BI Cloud Computing no necesitan inversión en hardware, ni software, ni licencias, lo que encarecía enormemente los Business Intelligence tradicionales. Por eso, hay muchas pequeñas y medianas empresas que pueden implantar su sistema de inteligencia de negocios, ya que, toda empresa, independientemente de su tamaño, precisa ser gestionada y tomar decisiones con respecto a sus ventas, compras, finanzas, etc. Además, los gastos excesivos de tener un Data Warehouse o servidor de almacenamiento de datos propios, se ahorran gracias a tenerlo en la nube, con la máxima seguridad.
Por otra parte y respecto del nivel de adopción de nuevas tecnologías, podemos decir que las Pymes recién ahora están empezando utilizar las redes sociales. Este medio les permite estar más cerca de sus clientes y proveedores y realizar campañas de ofertas. Las Pymes están descubriendo un nuevo canal para hacer negocios, en el cual se pueden poner al mismo nivel que el de una gran empresa.
El mercado latinoamericano está experimentando una curva de aprendizaje muy aguda en relación a la educación de sus consumidores, impulsado –principalmente- por el e-commerce. El consumidor se encuentra cada vez más informado y elige apartarse de la compra emocional o impulsiva, procurando adueñarse de sus propias decisiones en la web. Busca más, compara más y efectúa mejores decisiones de compra. Resulta precisamente en este medio en donde las pymes se encuentran en igualdad de condiciones de oferta respecto de las grandes empresas. Antes de la web, las grandes empresas se encontraban muy cómodas y estaban acostumbradas a gastar cuantiosas fortunas en los medios tradicionales para ahuyentar la aparición de nuevos competidores. Hoy, la web está emparejando la balanza a favor de las pymes y esto está empezando a ser un motivo de gran preocupación para los Ceos de las grandes empresas.
Asimismo, también podemos destacar que el avance de las tecnologías de la información genera un clima de negocios favorable para su apertura al comercio global, lo que le permite acceder a mercados que resultaban inimaginables años atrás. La perspectiva positiva respecto al comercio exterior ha crecido para las Pymes: están diversificando su portfolio de clientes y proveedores y esto las hace más fuertes ante un posible vaivén económico, los cuales se han tornado cíclicos en la mayoría de los países de la región.
Dentro de este contexto, Brasil (el país más influyente de la región) merece un párrafo aparte. Posee la tasa de crecimiento sostenida más fuerte y ha aumentado considerablemente su productividad en los últimos años, superando a Rusia y acercándose a países como China e India. Es el país más industrializado del bloque, seguido por México. No obstante ello, Brasil resulta ser el país de la región en donde menos se utilizan las redes sociales para potenciar el negocio, por lo que todavía presenta importantes posibilidades de desarrollo en ese aspecto.

py3

Pymes 2.0: Los nuevos empresarios del futuro

Actualmente, coexisten 2 modelos de negocios: las pymes de los rubros “tradicionales” y las denominadas Pymes 2.0
Las primeras deben coexistir en una lucha constante por la diferenciación, buscando constantemente nuevas e innovadoras formas de añadir valor o presentar nuevos servicios a sus clientes como método de diferenciación de la competencia. La mayor parte de este segmento ha efectuado, está efectuando o está por efectuar, algún tipo up-grade, en áreas tan diversas como: herramientas, instrumental y tecnologías, procesos, sistemas, ingeniería, canales de venta e-commerce, o bien se encuentran profesionalizando diversas áreas de la empresa, mediante la incorporación de nuevos recursos que introduzcan el know-how necesario. El tema radica en saber si está efectuando el up-grade correcto, en la magnitud requerida y con la velocidad necesaria. Incorporar un Custemer Service? Certificar normas de calidad? Balanced Scorecard? Web Services? Migrar a “la nube”? Móbile Services? ¿Quién guía al Ceo en estas decisiones? En el caso de las empresas familiares, este tipo de decisiones suele provocar un enfrentamiento generacional entre quienes mantienen la postura tradicional, que tantos frutos le ha dado, y la generación emergente, que defiende el cambio. A veces, la diferencia existente entre ambas posturas puede asemejarse a la que existe entre una brújula y un GPS. Más allá que este tipo de decisiones se tomen con mayor o menor atino, lo cierto es que, en su gran mayoría se toman “cuasi-intuitivamente” y no bajo el encuadre de una técnica específica de management que garantice la mejor decisión al respecto. A diferencia de los emprendedores que nos antecedieron, hoy contamos con muchas más respuestas a muchos más interrogantes que en el pasado, sin embargo, no existe igual cantidad de Ceos que se formulen las preguntas correctas para su empresa. La tendencia indica que los Ceos están recurriendo cada vez más a los servicios de consultoría especializada en pymes, para que los ayuden a realizar un diagnóstico profundo y los orienten en la elaboración de las estrategias más adecuadas para cada caso. Luego, los pasos subsiguientes (incorporar las técnicas, tecnologías y herramientas necesarias) muchas veces dependerá de la capacidad para obtener la financiación adecuada para materializar el proyecto. Si a todo esto le sumamos las dificultades propias del entorno y del mercado, el hecho de encarar este tipo de proyectos de actualización y modernización de la empresa (con la resistencia cultural que ello implica) se torna un proceso de una complejidad tal, que resultan muy pocas las empresas que logran atravesarlo sin dificultades.

py4
Como contrapartida a esta situación, existe un embrión de jóvenes entrepreneurs, recién egresados de la facultad, que salen a aventurarse en el mercado munidos de nuevos conocimientos y con un know-how más avanzado: son los creadores de una nueva e incipiente generación de pymes 2.0 que viene a dar respuesta y soluciones a nuevos paradigmas, que todavía no se encuentran plenamente instaurados en la sociedad o en los mercados, pero que ya crean tendencia.
Un ejemplo de ello lo representan las empresas de software, que realizan su start-up incorporando la más moderna tecnología, cuentan -a los sumo- con 4 personas o menos (incluido el dueño) y que, por el número de personas empleadas, bien podrían clasificarse como una microempresa, en la definición tradicional. La inversión en equipos puede no ser más de US$3.000, pero sus ventas pueden ser superiores al millón de dólares anuales. Muchas se localizan en la casa del dueño, no tienen rótulo físico (sólo electrónico) no obstante, manejan y generan uno de los capitales con mayor tasa de crecimiento en el mundo y pertenecen a la llamada “nueva economía”. Son altamente competitivas en la industria de los servicios informáticos, los videojuegos, y en el sector de software de aplicaciones.
El surgimiento de esta nueva generación de empresarios plantea otros interrogantes: ¿Qué clase de Ceos aportará la generación Y? Los Ceos de la generación X se convirtieron en self made man. Fueron testigos de la aparición del fax, las computadoras, internet, la caída del muro de Berlín y el surgimiento de la aldea global. Supieron adaptarse a todos estos cambios y demostraron una capacidad de resiliencia admirable. Como contrapartida, la generación Y no ha tenido que atravesar todos estos cambios y nacieron con la plataforma de la generación X ya asimilada, lo cual pone en duda si poseerán cualidades de “piloto de tormenta” ante una crisis. No poseen la experiencia de haberlas atravesado (con el consiguiente desarrollo de competencias que eso conlleva), pero sí han heredado el conocimiento brindado por las soluciones aportadas por la generación precedente. Considero que resulta falso plantear una antinomia entre ambas concepciones, dado que no resultan excluyentes, si no que deben contemplarse como experiencias complementarias. Como siempre, los más sabios serán los que logren combinar los aspectos más positivos y ventajosos de ambas generaciones.

py5

CONCLUSIONES

La globalización se ha convertido en un elemento clave para el crecimiento de las Pymes en América Latina. Esto trae aparejado, como conclusión lógica, que las mismas causas que actualmente se tornan en factores de éxito para algunos, se pueden convertir muy pronto en factores de fracaso para otros. Quienes posean la capacidad de reflejos para entender y adaptarse a estos cambios, desarrollando nuevas competencias en la empresa, serán los que tendrán mayores probabilidades de éxito.
La competitividad en las empresas Pyme es función directa de sus principios estratégicos, del bagaje cognoscitivo de su factor humano y de su organización. De esta conceptualización se deriva que la competitividad tiene como factores determinantes la capacidad de adecuarse constantemente a las nuevas condiciones del entorno, el cual -cada vez más- se encuentra determinado por factores tecnológicos más que por la oferta y la demanda, determinando el nivel temporal de su capacidad competitiva intrínseca.
Una empresa puede ser competitiva en el proceso de transformación y no serlo en el de distribución o tener gastos generales o financieros desproporcionados, o estar gravada por un exceso de personal, de estructura, etc.
La competitividad de las empresas Pymes reside en su capacidad para crear valor en el corto plazo. Esta creación de valor debe ampliarse a mediano plazo, lo que permitiría la permanencia de la empresa en el largo plazo.
Las mayores áreas de oportunidad están en construcción y servicios profesionales, que se brindan bajo la modalidad de outsourcing, en rubros tales como tecnología, mercadotecnia y consultoría/asesoría profesional.

• Fuente: Adrián Chiogna Publicado por Lic. Pablo S. Calderón Publicado en Management

Aprende a programar jugando.-


See on Scoop.itLas TIC en la Educación

Aprender a programar puede ser una tarea un tanto complicada para una persona que no tiene ninguna noción sobre lenguajes o sentencias de programación, pero con CodeCombat puedes comenzar a conocer el mundo de los programadores y si eres programador puedes pasar un rato divertido.

El juego consiste en en soldados que deben defenderse y atacar a sus enemigos, en el primer nivel hay un tutorial donde entenderás la mecánica del juego y como programar los movimientos y ataques de los personajes.

See on www.webbizarro.com

Excel: Estado de flujo de efectivo de 12 meses


flujoefectivo1

Objetivo
La información acerca de los flujos de efectivo es útil porque suministra a los usuarios de los estados financieros las bases para evaluar la capacidad que tiene la empresa para generar efectivo y equivalentes al efectivo, así como sus necesidades de liquidez. Para tomar decisiones económicas, los usuarios deben evaluar la capacidad que la empresa tiene para generar efectivo y equivalentes al efectivo, así como las fechas en que se producen y el grado de certidumbre relativa de su aparición.lyssetNIC 7
Métodos
Existen dos métodos para exponer este estado. El método directo y el indirecto.
• El directo expone las principales clases de entrada y salida bruta en efectivo y sus equivalentes, que aumentaron o disminuyeron a estos.
• El método indirecto parte del resultado del ejercicio y a través de ciertos procedimientos se convierte el resultado devengado en resultado percibido.
El resultado que se obtiene puede ser positivo o negativo. La importancia de este estado es que nos muestra si la empresa genera o consume fondos en su actividad productiva. Además permite ver si la empresa realiza inversiones en activos de largo plazo como bienes de uso o inversiones permanentes en otras sociedades.
Finalmente el estado muestra la cifra de fondos generados o consumidos por la financiación en las cuales se informa sobre el importe de fondos recibidos de prestadores de capital externos o los mismos accionistas y los montos devueltos por vía de reducción de pasivos o dividendos.
Este estado es seguido y analizado con mucha atención por los analistas que estudian a las empresas ya que de él surge una explicación de las corrientes de generación y uso de los fondos, lo cual permite conjeturar sobre el futuro de la empresa

Descripción de la plantilla Excel
Use esta plantilla para describir el flujo de efectivo de los doce últimos meses de su empresa. Los gráficos de resumen y los minigráficos facilitan la visualización del artículo.

http://office.microsoft.com/es-ar/templates/estado-de-flujo-de-efectivo-de-12-meses-TC103458072.aspx

Excel 2013 Gráficos recomendados – Cómo Seleccionar, Insertar y Formato


“Gráficos Recomendados” es una característica que ilustra el hecho de que mientras que las funciones nuevas que se han incorporado en Excel 2013, no se meten con la usabilidad. Básicamente esta opción intuitiva muestra sólo la ruptura de los tipos de gráficos que tal vez relacionadas con la información que ha introducido en Excel. Así que incluso si usted no es bueno en hacer tablas, esta función le ayudará a encontrar el más adecuado y sin irrumpir en toda la pantalla.

He aquí cómo usted puede utilizar esta herramienta. Resalta la información que desea trabajar en MS Excel 2013. A continuación, haga clic en “Insertar”, seguido de “Gráficos recomendados”. Ahora verá un cuadro de diálogo en la pantalla que tiene todas las opciones de gráficos. Si hace clic en un gráfico, usted tendrá una vista previa de cómo aparecerán los datos en ella. Para crear un gráfico, simplemente haga clic en “OK” y su trabajo será hecho.

Si se acuerda de las versiones anteriores de Excel, la selección de un gráfico haría 3 fichas adicionales que aparecen en la pestaña Herramientas Gráficas. Eran Diseño, Presentación y Formato. Ahora es suficiente con las fichas Diseño y formato que componen la interfaz de Excel más despejado. Sin mencionar, que también tendrá un conjunto adicional de los iconos en la esquina superior derecha de la tabla seleccionada.

Estos botones relacionados con Microsoft Excel 2013 son los “elementos gráficos”, “Estilos de gráfico” y “Filtros gráficos”, y pulsando les permite utilizar las opciones de formato adicionales. Por ejemplo, mediante el uso de “elementos gráficos” se pueden agregar o quitar elementos como títulos de los ejes, mientras que con “Estilos de gráfico” puede cambiar el color de la carta. Por último, los datos filtrados se pueden ver con una vista previa en vivo a través de “Filtros de gráficos”.

Las siguientes tres imágenes gráficas ilustran cómo Gráficas recomendados pueden ser beneficiosos en el rápido análisis de ventas por trimestre información para su equipo. La imagen firstt sólo tiene los datos para cada trimestre por nuestro personal de ventas.

http://www.learningcomputer.com/microsoft-excel-tutorial/excel-2013.html

grafico1

grafico2

grafico3

Crear gráficos e informes de tabla dinámica con VBA en Excel 2010


Crear gráficos e informes de tabla dinámica con VBA en Excel 2010

obtenga información acerca de cómo usar Visual Basic para Aplicaciones (VBA) en Microsoft Excel 2010 con el fin de crear y manipular gráficos e informes de tabla dinámica. El uso de código para crear informes y gráficos de tabla dinámica puede ayudarle a realizar estas tareas varias veces y con mayor eficacia.
Información general sobre el uso de VBA con gráficos e informes de tabla dinámica
Crear un informe de tabla dinámica mediante VBA
El informe de tabla dinámica creado por la macro del libro de ejemplo CreatePivot del PivotTablesAndCharts se muestra en la figura 1.

Figura 1. Informe de tabla dinámica

    vba

    Tal como se muestra en las líneas de código siguiente, la macro CreatePivot activa la hoja de cálculo y luego usa el método PivotTableWizard (en inglés) para iniciar el proceso de creación del informe de tabla dinámica.

    VBA
    ActiveWorkbook.Sheets(“Employees”).Select
    Range(“A1”).Select
    Set objTable = Sheet1.PivotTableWizard

    Si presiona F8 en el editor de código para recorrer código de la macro CreatePivot línea por línea, verá que la línea de código que llama al método PivotTableWizard agrega una nueva hoja de cálculo al libro y luego crea el nuevo informe de tabla dinámica en esa hoja. Si presiona F8 en el editor de código para recorrer código de la macro CreatePivot línea por línea, verá que la línea de código que llama al método PivotTableWizard agrega una nueva hoja de cálculo al libro y luego crea el nuevo informe de tabla dinámica en esa hoja.

    El método PivotTableWizard devuelve un objeto de Tabla dinámica (en inglés), que tiene asociada una colección de Campos dinámicos (en inglés). La macro CreatePivot continúa agregando objetos de Campo dinámico (en inglés) a la colección de Campos dinámicos para especificar los siguientes campos de informe de tabla dinámica.
    • Un campo de fila llamado DEPT
    • Un campo de columna llamado LOCATION
    • Un campo de datos basado en el campo SALARIO que usa la función SUM

    Click en:
    http://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx#CreatingPivotTable_Overview

Cómo utilizar tablas de datos de Microsoft Excel para analizar la información en una base de datos


excel

En este artículo se describe cómo utilizar las tablas de Microsoft Excel para analizar la información contenida en una base de datos.
Puede utilizar las funciones de base de datos en una entrada
y dos entradas
tablas para analizar los valores obtenidos en una base de datos, mediante comparación y criterios calculados.
Criterios de comparación
Criterios de comparación son los criterios más utilizados para extraer o analizar información de una base de datos de Microsoft Excel. El valor que se coloca en el encabezado de columna en el rango de criterios se compara con los registros de la base de datos. Si un registro coincide con ese valor, el registro se extraen o incluido en el grupo de registros que se va a analizar las funciones de base de datos.

Para crear una base de datos de ejemplo y un rango de criterios muestra, siga estos pasos:
1. Abra un nuevo libro.
2. En A1:C25 las celdas de una hoja de cálculo nueva, escriba la siguiente información

1. | A | B | C
2. —|————–|———|——–
3. 1 | Type of Soda |Month |Consumed
4. 2 | Pepup |January | 946
5. 3 | Diet Pepup |January | 762
6. 4 | Colo |January | 224
7. 5 | Diet Colo |January | 1
8. 6 | Splash |January | 715
9. 7 | Diet Splash |January | 506
10. 8 | Lime-Up |January | 354
11. 9 | Diet Lime-Up |January | 542
12. 10| Pepup |February | 910
13. 11| Diet Pepup |February | 894
14. 12| Colo |February | 926
15. 13| Diet Colo |February | 471
16. 14| Splash |February | 493
17. 15| Diet Splash |February | 276
18. 16| Lime-Up |February | 45
19. 17| Diet Lime-Up |February | 301
20. 18| Pepup |March | 840
21. 19| Diet Pepup |March | 442
22. 20| Colo |March | 409
23. 21| Diet Colo |March | 205
24. 22| Splash |March | 109
25. 23| Diet Splash |March | 263
26. 24| Lime-Up |March | 603
27. 25| Diet Lime-Up |March | 555

1. Seleccione las celdas A1:C25.
2. En el menú Insertar , elija nombrey, a continuación, haga clic en definir.
3. Escriba la base de datos y, a continuación, haga clic en Aceptar .
4. Para el rango de criterios de ejemplo, escriba los datos siguientes en E1:G1 de celdas de la hoja de cálculo:

5. | E | F | G
6. —|————–|——|——–
7. 1 | Type of Soda |Month |Consumed
8. 2 | | |
9.

10. Seleccione las celdas E1:G2.
11. En el menú Insertar , seleccione nombre y, a continuación, haga clic en definir .
12. Escriba criterios y, a continuación, haga clic en Aceptar .

Criterios de comparación
http://support.microsoft.com/kb/282851

Excel VBA Programación


Esta sección es para los usuarios que quieren obtener el máximo rendimiento de Excel VBA.
Excel Programación VBA no es difícil, pero sí es necesario saber las palabras clave utilizadas en Excel VBA.

1 Variables: Excel VBA utiliza variables como cualquier otro lenguaje de programación. Aprenda cómo declarar e inicializar una variable de excel vba de tipo Integer, String, Double, Boolean y fecha.

2 de manipulación de cadenas: Hay muchas funciones en Excel VBA que podemos utilizar para manipular cadenas. En este capítulo se puede encontrar una revisión de las funciones más importantes.

3 Cálculo: Cálculo con Excel VBA y sumar, restar, multiplicar y dividir valores como usted está acostumbrado a hacer en Excel.

4 Si Entonces Declaración: En muchas situaciones solo deseas Excel VBA para ejecutar ciertas líneas de código cuando se cumple una condición específica. El caso Then le permite hacer esto. En lugar de múltiples Si Then, puede utilizar Select Case.

5 Las células: en lugar del objeto Range más comunes también podríamos utilizar células. Uso de células es particularmente útil cuando se quiere recorrer rangos.

6 Loop: Lazo es una de las técnicas de programación más potentes. Un bucle (o bucle For Next) en Excel VBA le permite recorrer una serie de datos con sólo unas pocas líneas de código.
7 Operadores lógicos: ¿Desea ejecutar código en Excel Visual Basic cuando se cumplan las condiciones más? O sólo uno? ¿O no? Los operadores lógicos son lo que usted necesita! Los operadores lógicos como AND, OR y no se utilizan a menudo en Excel VBA.

8 Alcance: El objeto Range que es la representación de una celda (o celdas) de la hoja de cálculo es el objeto más importante de Excel VBA. Tiene muchas propiedades y métodos y que son esenciales para manipular el contenido de la hoja de cálculo Excel. En este capítulo usted descubrirá las propiedades y métodos del objeto Range Excel VBA más útiles. Ellos le permiten obtener el control de la hoja de cálculo Excel.

9 Eventos: Este capítulo le enseña cómo libro del programa y los eventos de hoja de cálculo. Los eventos son acciones realizadas por los usuarios que desencadenan Excel VBA para ejecutar una macro. Por ejemplo, cuando se abre un libro o cuando se cambia algo en una hoja de cálculo de Excel, Excel VBA puede ejecutar automáticamente una macro.

10 Matriz: Matriz VBA Excel es un grupo de variables. Se puede hacer referencia a una variable (elemento) de una matriz utilizando el nombre de la matriz y el número de índice.

11 Fecha y hora: Fechas y horas en Excel VBA se pueden manipular de muchas maneras. Ejemplos sencillos se dan en este capítulo.

12 Funciones y Sub: La diferencia entre una función y un sub en Excel VBA es que una función puede devolver un valor y un submarino no puede. En este capítulo vamos a ver un ejemplo sencillo de una función y un sub. Funciones y subs van a ser muy útil a medida que aumenta el tamaño del programa.
http://www.excel-vba-easy.com/

Excel: Descomposición de la rentabilidad financiera – ROE (return on equity)


El ratio de rentabilidad financiera ROE (return on equity) mide el beneficio neto generado por las inversiones realizadas por los propietarios de la empresa. (ROE = BºNeto % / C.Propios). Es por tanto muy útil para los socios o accionistas porque les permite evaluar y comparar sus inversiones con otras opciones de inversión.

A efectos de obtener un mayor grado de análisis podemos descomponer la rentabilidad financiera en varios factores, (ver fórmulas en la imagen adjunta, clic para aumentar), lo que será útil para los gestores de la empresa, porque les permitirá actuar sobre las variables más importantes, o sobre la combinación de las mismas, con el objetivo de obtener la máxima rentabilidad.
Por una parte están los ratios que dependen de la gestión económica:
• Rotación de activos (Ventas/Activo)
• Margen (BAII/Ventas)
Y por otra, los ratios de gestión financiera:
• Apalancamiento financiero. (Activo/C.Propios x BAI/BAII)
• Efecto fiscal (Bº Neto/BAI)

El valor de estos ratios dependerá de la estructura financiera y de la gestión de la propia empresa, pero también del sector al que pertenezca. Por ejemplo, las empresas industriales, con gran volumen de activos, la rotación de lo mismos será baja, por lo que el origen de su beneficio será el margen y el resto de variables. En las empresas de servicios, con pequeño volumen de activo, la rotación es alta y por tanto el beneficio vendrá por esta vía.

La aplicación Excel calcula los cuatro componentes a partir de los datos agrupados del balance y cuenta de resultados.
ver planilla:
https://empiezoinformatica.files.wordpress.com/2013/08/copia-de-analisis_de_balances.xls

Clases, atributos y métodos en Visual Basic (código)


micoche

Diseñamos una clase CCoche que representa coches( carros, autos).

Incluímos los atributos marca, modelo y color, y los métodos que simulen, enviando mensajes, las acciones de arrancar el motor, cambiar de velocidad, acelerar, frenar y parar el motor.

micoche1

Exportar datos de un programa de VisualBasic.net a Excel


VB_a_xls

http://www.vb-mundo.com/exportar-datos-de-un-programa-de-visualbasic-net-a-excel/ 

En este artículo se muestra cómo automatizar Microsoft Excel y cómo rellenar un rango de celdas con un Textbox y con un listview.

1. Iniciaremos Microsoft Visual Studio .NET.

2. En el menú Archivo, haga clic en Nuevo y, después, en Proyecto. Seleccione Aplicación para Windows en los tipos de proyecto de Visual Basic. De forma predeterminada, se crea Form1.

VB_a_xls2

4. En el Form1 he agregado un TextBox  y un ListView que son los usare para exportar los datos a Excel. Y un botón que es el encargado de generar la acción.

VB_a_xls3

5 . En el código del botón agregare todo el código,  es bastante sencillo y lo he comentado para aclarar que funciona cada línea importante.

Visual Basic   copy code

  • ‘Variables locales
  •  
  • Dim oExcel As Object
  • Dim oBook As Object
  • Dim oSheet As Object
  •  
  • ‘Iniciar un nuevo libro en Excel
  •  
  • oExcel = CreateObject(“Excel.Application”)
  •  
  • oBook = oExcel.Workbooks.Add
  •  
  • ‘Agregar datos a las celdas de la primera hoja en el libro nuevo
  •  
  • oSheet = oBook.Worksheets(1)
  •  
  • ‘ Agregamos Los datos que queremos agregar
  •  
  • oSheet.Range(“A3”).Value = TextBox1.Text
  •  
  • ‘ Esta celda tendra los datos del textbox
  •  
  • oSheet.Range(“A10”).Value = “CODIGO”
  •  
  • ‘ estas celdas por defecto solo seran para identificar cada columna
  •  
  • oSheet.Range(“B10”).Value = “TIPO”
  •  
  • oSheet.Range(“C10”).Value = “DESCRIPCION”
  •  
  • oSheet.Range(“D10”).Value = “MODELO”
  •  
  • oSheet.Range(“E10”).Value = “REGIS”
  •  
  • oSheet.Range(“F10”).Value = “DISPO”
  •  
  • ‘Desde aqui empezaremos a exportar la lista
  •  
  • If ListView1consul2.Items.Count > 0 Then
  •  
  • ‘ primero verificamos cuantas filas tiene la lista
  •  
  • Dim col As Integer = 11 empezaremos en el libro de excel a partir de la celda 11
  •  
  • Dim i As Integer ‘ for para empezar a recorrer la lista
  •  
  • For i = 0 To ListView1consul2.Items.Count
  •  
  • If i = ListView1consul2.Items.Count Then
  •  
  • Exit For
  •  
  • End If
  •  
  • ‘ estas son las columnas que usaremos y el contador nos ira cargando una a una cada fila
  •  
  • Dim a As String = “A” + col.ToString + “”
  •  
  • Dim b As String = “B” + col.ToString + “”
  •  
  • Dim c As String = “C” + col.ToString + “”
  •  
  • Dim d As String = “D” + col.ToString + “”
  •  
  • Dim j As String = “E” + col.ToString + “”
  •  
  • Dim f As String = “F” + col.ToString + “”
  •  
  • oSheet.Range(a).Value = ListView1consul2.Items(i).SubItems.Item(0).Text.ToString
  •  
  • oSheet.Range(b).Value = ListView1consul2.Items(i).SubItems.Item(1).Text.ToString
  •  
  • oSheet.Range(c).Value = ListView1consul2.Items(i).SubItems.Item(2).Text.ToString
  •  
  • oSheet.Range(d).Value = ListView1consul2.Items(i).SubItems.Item(3).Text.ToString
  •  
  • oSheet.Range(j).Value = ListView1consul2.Items(i).SubItems.Item(4).Text.ToString
  •  
  • oSheet.Range(f).Value = ListView1consul2.Items(i).SubItems.Item(5).Text.ToString
  •  
  • col = col + 1
  •  
  • ListView1consul2.Items.Remove(ListView1consul2.Items.Item(i))
  •  
  • ‘ removemos cada el elemento esto es solo si desean hacerlo
  •  
  • ‘ otra opcion es poner el contador positivo y no eliminar el elemento de la lista
  •  
  • i = i − 1
  •  
  • Next
  •  
  • End If
  •  
  • ‘ hacemos visible el documento
  •  
  • oExcel.Visible = True
  •  
  • oExcel.UserControl = True
  •  
  • ‘Guardaremos el documento en el escritorio con el nombre prueba
  •  
  • oBook.SaveAs(Environ(“UserProfile”) & “\desktop\Prueba.xls”)

Aplicaciones de ejemplo de Visual Basic


vbasicnet

Visual Studio 2010     http://msdn.microsoft.com/es-es/library/5ekc8at3(v=vs.100).aspx

En la documentación de Visual Basic, un ejemplo es un proyecto de Visual Basic que se puede cargar y ejecutar en Visual Studio. Un ejemplo es un bloque pequeño de código que muestra una tarea de programación única y limitada.Un fragmento de código es un bloque de código insertado en el Editor de código mediante la característica Fragmentos de código IntelliSense.

Microsoft Visual Basic es un entorno de programación utilizado para crear aplicaciones gráficas de la familia Microsoft Windows de sistemas operativos. Microsoft Visual Basic 2010 es la versión actual.
Se trata de una serie de lecciones y ejemplos sobre cómo diseñar aplicaciones y crear programas informáticos que utilizan Microsoft Visual Basic 2010 Express y Microsoft Visual Studio 2010 (con el lado de Microsoft Visual Basic del medio ambiente).

Para crear un programa informático, llamado también una aplicación, se crea una serie de archivos y agruparlos en un conjunto llamado proyecto. Este contiene varios módulos, archivos, conjuntos (o librerías), y archivos de recursos.
Crear un proyecto
Una aplicación típica consiste en varios módulos, e incluso puede ser tan complejo como usted quiere. Para que sea más rápido y un poco más fácil para crear gráficamente una aplicación, que se necesita un buen ambiente de funcionamiento como Microsoft Visual Basic. Con ella, se puede crear un nuevo proyecto o abrir uno existente.
Para crear un proyecto de Visual Basic, puede mostrar el cuadro de diálogo Nuevo proyecto. Para abrir el cuadro de diálogo Nuevo proyecto:
• En la página de inicio, en la parte derecha del proyecto, haga clic en Crear …
• Si está utilizando Microsoft Visual Basic 2008 Express Edition, en el menú principal, puede hacer clic en Archivo -> Nuevo proyecto … Si está utilizando Microsoft Visual Basic 2008 Professional, en el menú principal, puede hacer clic en Archivo -> Nuevo -> Proyecto …
• En la barra de herramientas estándar, haga clic en el botón Nuevo proyecto
• Puede pulsar Ctrl + Shift + N
En el cuadro de diálogo Nuevo proyecto, seleccione Proyectos de Visual Basic, seleccione el tipo de proyecto, darle un nombre, especifique el directorio y haga clic en Aceptar.
Aprendizaje práctico: Creación de un proyecto
Ver: http://www.functionx.com/vb/Lesson02.

 

 

Ecuaciones (Visual Basic – Código)


La siguiente aplicación utiliza objetos de una clase CEcuacion para evaluar ecuaciones de la forma:

ax³ + bx² + cx + d

Una ecuación se puede ver como un objeto que envuelve el exponente del término de mayor grado, los coeficientes y los métodos que permitan manipularla.

Los objetos CEcuacion tendrán unos atributos que serán los coeficientes y unos métodos Ecuación y ValorPara para manipularlos.

El método ValorPara evaluará la ecuación para el valor de x pasado como argumento. Este método, utilizando la sentencia Return, devolverá como resultado el valor calculado. El tipo devuelto por el método

es Double.

Escribimos en en primer lugar  la clase CEcuacion

ecuaciones_class

Escribimos otro archivo fuente con un módulo MiSplicacion, que utilice la clas4e de objetos CEcuacion

ecuaciones

El procedimiento Main es por donde empieza a ejecutarse la aplicación.

Una vez escrito el programa se compila.

Después se ejecuta y observa los resultados

ecuaciones1

Objeto Program


program

Cuando se crean programas y se trabaja con varios objetos y operaciones que ofrece en el entorno .NET, es posible que desee controlar la ejecución de su programa. Puede utilizar el objeto Program para manipular la forma en que su programa se ejecuta

Puede controlar la ejecución de un programa mediante el objeto Program en Small Basic. Observe el ejemplo en pantalla.

  1. Primero, se usa la operación Directory para      mostrar el directorio actual del programa de ejecución. Para mostrar la      ruta al directorio, use el objeto TextWindow con la operación WriteLine.
  2. A continuación, para retrasar la ejecución      del programa por cinco segundos, se usa la operación Delay y se      define el parámetro de tiempo en milisegundos.
  3. La declaración Program.End() hace      que el programa termine.

Revise los resultados del programa haciendo clic en el botón Ejecutar de la barra de herramientas o presionando la tecla F5. La ventana de texto muestra el directorio del programa y, después de un retraso de cinco segundos, el programa termina.

TextWindow.WriteLine(“Carpeta del programa ” + Program.Directory)

TextWindow.WriteLine(“Este programa se ejecuta durante 5 segundos.”)

Program.Delay(5000)

Program.End()

Código Visual Basic graduado

program1

Controles en pantalla (Código Visual Basic 2010 Express)


controlsPara agregar controles en la pantalla se debe escribir una instrucción que contiene el objeto Controls con una operación adecuada. Veamos el ejemplo en la pantalla:

Primero usamos la operación AddTextBox del objeto Controls para agregar dos cuadros de texto que contienen el nombre del usuario. Debemos especificar las coordenadas X e Y de los cuadros de texto como parámetros.

Luego usamos la operación AddButton para agregar un botón a la ventana de gráficos. Además de las coordenadas X e Y también debemos especificar el título del botón como parámetro.

A continuación usamos la operación AddMultiLineTextBox para agregar otro cuadro de texto. Debemos especificar las coordenadas X e Y del cuadro de texto como parámetros.

En este ejemplo deseamos mostrar un mensaje en el cuadro de texto multilínea cuando se presione el botón Mostrar mensaje. Para esto usamos el evento ButtonClicked y creamos una subrutina para mostrar un mensaje en el cuadro de texto multilínea.

Revise los resultados de su programa haciendo clic en el botón Ejecutar de la barra de herramientas o presionando la tecla F5.

controls1

Microsoft Excel para la contabilidad


Microsoft Excel es una aplicación de software de hoja de cálculo que puede ser utilizado como una herramienta de contabilidad. Cuando se crea un documento de Excel, se asemeja a una cuadrícula formada por las celdas individuales. Una celda se identifica por su posición en una fila y una columna. Las filas se identifican por su número y las columnas se identifican con una letra. Si una celda es C3, se significa que la celda se encuentra en la fila C y en la tercera columna. Texto, números y cálculos se pueden insertar en la celda individual. Cuando se introduce un cálculo se indica que el programa haga el cálculo con números en las celdas que identificaste. La respuesta aparecerá en la celda en la que se encuentra el cálculo.

Instrucciones

excel1

Agrega una fila de números juntos para obtener la suma total. Puedes insertar la fecha de cada transacción. Si escribes el mes y año, el programa automáticamente lo abrevia. Por ejemplo “Marzo de 2008” se convierte en “Mar-08”. Junto a las fechas, escribe la cantidad de gastos para cada mes. Para agregar una columna, selecciona la fila con el cursor y haz clic en la “Auto-Suma” en la parte superior del menú, que se parece al símbolo ?.

excel2

Suma los totales de los gastos. Por ejemplo, si mantienes una hoja de cálculo con todos tus gastos de electricidad y agua para el año, es posible que desees un total del costo de tus servicios. Haz clic en la celda donde deseas que el total aparezca y se convertirá en el resultado. En la barra de menú, escribe la ecuación. En la foto de ejemplo, escribimos “=B14+E14”. Esto le dice al programa que debe sumar todos los números que están en la celda B14 y la E14.

excel3a

Deduce los gastos de tus ventas. En la foto de ejemplo, los gastos del negocio que tenía la persona sólo eran los servicios públicos y el alquiler. Estos gastos se incluyeron en dos filas y cada fila se ha calculado para dar un total. Los dos totales se añadieron luego juntos. En otra fila hay una lista de las ventas mensuales y la fila en que se sumaron. El programa puede ser instruido para deducir los gastos totales (D15) de las ventas totales (E15) para dar las ventas netas. Si alguna de las cantidades ha cambiado, como el cambio del gasto eléctrico en marzo, de $345 a $400, todos los totales se ajustarán automáticamente para reflejar la cantidad correcta.

De:

http://www.ehowenespanol.com/utilizar-microsoft-excel-contabilidad-como_63636/

Small Basic: Cómo utilizar las funciones trigonométricas


Nonki Takahashi   http://social.technet.microsoft.com/wiki/contents/articles/17744.small-basic-how-to-use-trigonometric-functions.aspx

TechNet Wiki

Imaginemos para dibujar el arco.
Asumir el centro del arco como x = 200, y = 300, comienzo ángulo a1 = -30 y terminar ángulo = -60.
En matemáticas, el eje y va para arriba. Pero en Small Basic Graphicswindow, el eje y desciende. Así, el ágnulo se vuelve opuesto..

trig1

                       

Si usted no utiliza la función trigonométrica de , utilice tan sólo 0, 30, 45, 60, 90…[grados]. Entre estos bordes se puede calcular la altura s de anchura c del triángulo mientras tres ángulos del triángulo r, c, tal como la foto de abajo tiene relación r2 = s2 + c2 .

Pero para cualquier ángulo, utilice la función trigonométrica (seno, coseno).

trig2

Asegúrese de que función trigonométrica necesita [radianes] pero [grados] para el lenguaje Small Basic

Puede utilizar Math.GetRadians(degree) para convertir de [grados] a [radianes].

Siguiendo el ejemplo de código muestra cómo no utilizar o cómo usar las funciones trigonométricas  para dibujar el arco.

gw = GraphicsWindow.Width

gh = GraphicsWindow.Height

DrawGrid()

x = 200

y = 300

r = 200

DrawArcwoTrigo()

Program.Delay()3000)

GraphicsWindow.Clear()

DrawGrid()

a1 = -30

a2 = -60

DrawArcwTrigo()

Sub DrawArcwoTrigo ‘ draw arc without trigonometric functions

GraphicsWindow.Title = “Arc without Trigonometric Functions”

c1 = r * Math.SquareRoot(3) / 2 ‘ a1 = -30

c2 = r / 2 ‘ a2 = -60

r2 = Math.Power(r, 2)

For c = c1 To c2 Step -1

s = Math.SquareRoot()r2 – Math.Power(c, 2))

x2 = x + c

y2 = y – s

If c = c1 Then

GraphicsWindow.PenColor = “Gray”

GraphicsWindow.DrawLine(x, y, x2, y2)

Else

GraphicsWindow.PenColor = “Black”

GraphicsWindow.DrawLine()x1, y1, x2, y2)

EndIf

If c – 1 < c2 Then

GraphicsWindow.PenColor = “Gray”

GraphicsWindow.DrawLine(x, y, x2, y2)

EndIf

x1 = x2

y1 = y2

EndFor

EndSub

Sub DrawArcwTrigo ‘ draw arc with trigonometric functions

GraphicsWindow.Title = “Arc with Trigonometric Functions”

For a = a1 To a2 Step -0.3

x2 = x + r * Math.Cos(Math.GetRadians()a))

y2 = y + r * Math.Sin(Math.GetRadians()a))

If a = a1 Then

GraphicsWindow.PenColor = “Gray”

GraphicsWindow.DrawLine(x, y, x2, y2)

Else

GraphicsWindow.PenColor = “Black”

GraphicsWindow.DrawLine()x1, y1, x2, y2)

EndIf

If a – 0.3 < a2 Then

GraphicsWindow.PenColor = “Gray”

GraphicsWindow.DrawLine(x, y, x2, y2)

EndIf

x1 = x2

y1 = y2

EndFor

EndSub

Sub DrawGrid

GraphicsWindow.PenColor = “MediumSeaGreen”

GraphicsWindow.BrushColor = “MediumSeaGreen”

For _x = 0 To gw Step 50

GraphicsWindow.DrawLine(_x, 0, _x, gh)

If gw – 50 < _x Then

GraphicsWindow.DrawText(_x + 4, 4, “x”)

Else

GraphicsWindow.DrawText(_x + 4, 4, _x)

EndIf

EndFor

For _y = 0 To gh Step 50

GraphicsWindow.DrawLine()0, _y, gw, _y)

If gh – 50 < _y Then

GraphicsWindow.DrawText()4, _y + 4, “y”)

Else

GraphicsWindow.DrawText()4, _y + 4, _y)

EndIf

EndFor

EndSub

 

Small Basic: cálculos matemáticos


math1

¿Le sucede que algunos cálculos matemáticos a veces le llevan demasiado tiempo ? ¡No se preocupe!

El objeto Math ofrece muchas funciones matemáticas que le servirán en sus programas.

Este objeto incluye las siguientes operaciones y propiedades:

math

Objeto  Math
La clase Math (matemáticas) proporciona muchos métodos útiles relacionados con las matemáticas.

Pi Abs ArcCos ArcSin ArcTan Ceiling Cos Floor GetDegrees GetRadians GetRandomNumber Log Max Min NaturalLog Power Remainder Round Sin SquareRoot Tan

Cálculo de la TIR con Excel


 

TIR es el acrónimo de Tasa Interna de Retorno (en inglés IRR: Internal Rate o Return) y se refiere a la tasa de rentabilidad que obtenemos de una inversión, al recibir a cambio posteriormente una serie de importes a lo largo de determinados períodos.

El cálculo de la TIR se utiliza para saber si una inversión es aceptable o no (es aceptable si el interés que obtenemos como resultado, es mayor que el interés que obtendríamos si invirtiéramos en otro proyecto).

Puesto que la fórmula de cálculo del TIR puede llegar a ser muy complicada (ver fórmula del TIR),

TIR1

Ft es el Flujo de Caja en el periodo t.
n es el número de periodos.
I es el valor de la inversión inicial.

en la práctica real se hace imprescindible la utilización de aplicaciones informáticas que realicen el cálculo. En este caso, Excel tiene una función que calcula de forma sencilla la TIR.

La TIR en Excel

En Excel, la TIR se calcula con la función TIR

=TIR (valores;[estimar])

  • Valores:  es el rango de      celdas donde están los valores de los cuales se quiere calcular la TIR. Los valores deben estar en el orden correcto y debe haber al menos      un valor positivo (si no es así, la función devuelve un      error). Las inversiones y los flujos de      rentabilidad negativa se ponen con signo negativo.
  • [Estimar]: es opcional y se refiere al      valor que estimamos aproximado a la tasa que obtendremos. Excel utiliza      una técnica iterativa para la que necesita un valor estimado para      iniciarla. Si no se le proporciona, Excel supone un 10 % (0,1).

Uno de los casos más frecuentes de cálculo de la TIR es el representado por la siguiente imagen, en la que podemos ver que la inversión es el primero de los flujos (en negativo, pues es una salida de dinero) y el resto de celdas del rango son los flujos de rentabilidad generados a lo largo de 4 períodos más (se omite el argumento “estimar“):

E3

En la imagen podemos ver como, con una inversión de 100.000 € y consiguiendo 4 flujos de rentabilidad (en 2.013, negativa), obtenemos una TIR del 2%. La interpretación de todo esto es que en 4 años, se ha obtenido una tasa de rentabilidad neta del 2%. Para decidir si es conveniente llevar a cabo el proyecto o la inversión, debemos asegurarnos de que el coste de oportunidad (tipo de interés que podemos conseguir de forma segura en una entidad financiera, por ejemplo) es inferior a dicho 2%. En caso de que la TIR sea inferior a lo que una entidad financiera nos puede remunerar, deberíamos invertir nuestro dinero en dicha entidad y no hacer la inversión.

José Manuel Pomares Medrano

http://temporaexcel.blogspot.com.ar/2011/10/calculo-de-la-tir-con-excel.html

Excel 2010: Mostrar fórmulas en lugar de resultados


Microsoft Excel 2010:  Consejos para principiantes
• Por Jill Duffy, Edward Mendelson

excel

Una sola pulsación permite alternar entre la visualización de Excel normal, que muestra los resultados de las fórmulas de la hoja de cálculo, y un modo de pantalla que muestra las fórmulas reales. El golpe de teclado es Ctrl-tilde (tilde es esta clave: ~), pulse una vez, y Excel muestra las fórmulas en lugar de resultados. Pulse otra vez, y los resultados aparecen de nuevo. Esto solo golpe de teclado es mucho más rápido de usar que el método alternativo de fórmulas que muestran, que es abrir el menú Archivo, vaya a Opciones, Opciones avanzadas y, a continuación, desplácese hacia abajo para ver las opciones para esta hoja de trabajo y marque la casilla junto a “Mostrar fórmulas en celdas en lugar de sus resultados calculados “. Desactive la casilla para mostrar los resultados de nuevo.
Consejo adicional: cuando se utiliza este truco para mostrar fórmulas en las celdas, seleccione una celda con una fórmula, Excel y describe las células que se hace referencia en la fórmula
http://www.pcmag.com/article2/0,2817,2386995,00.asp

Excel 2010: Agregar etiquetas de datos a un gráfico


Excel Total: Puedes agregar etiquetas de datos a un gráfico de Excel para ayudar a identificar los valores mostradas en cada punto de una serie de datos. Excel permite diferentes opciones para la colocación y formato de las etiquetas.

Sigue los siguientes pasos para agregar las etiquetas de datos a tu gráfico. Haz clic sobre cualquier lugar del área del gráfico que deseas modificar y selecciona la ficha Presentación y el comando Etiquetas de datos:

excel1

El menú se muestra con las siguientes opciones:

  • Ninguna. Ésta es la opción      predeterminada y significa que no habrá etiquetas de datos en el gráfico.
  • Centro. Coloca las etiquetas de      datos en el centro de cada punto de datos.
  • Extremo interno.  Posiciona las      etiquetas en el extremo interno superior de los puntos.
  • Base interior. Las etiquetas se      mostrarán en el extremo interior inferior.
  • Extremo externo. Coloca las etiquetas      por fuera de cada punto.

excel2

Selecciona la mejor opción del menú y Excel colocará las etiquetas de inmediato. Para personalizar aún más las etiquetas haz clic en la opción de menú Más opciones de la etiqueta de datos y se mostrará el cuadro de diálogo siguiente:

excel3

Puedes configurar a detalle las etiquetas, inclusive puedes especificar que en lugar del valor la etiqueta muestre el nombre de la serie o de la categoría. Una vez que hallas hecho los cambios apropiados haz clic en el botón Cerrar.

Recuerda que puedes remover fácilmente las etiquetas de datos del gráfico con solo seleccionar la opción Ninguno del menú Etiquetas de datos.

http://exceltotal.com/agregar-etiquetas-de-datos-a-un-grafico/

Introducción: Windows Workflow Foundation y ASP.NET


Windows Workflow Foundation es una gran tecnología para crear flujos de trabajo. Puede ser utilizado en combinación con diferentes tecnologías, por ejemplo, SharePoint, WCF, etc.. En este artículo se combinará el Windows Workflow Foundation con ASP.NET.

Tabla de Contenidos

El escenario

Para mantener las cosas fáciles, creamos una aplicación muy simple saludo. El usuario se escriba su nombre en un cuadro de texto, haga clic en un botón, y aparecerá un saludo con su nombre. ¿Suena simple? ¡ Es!

Archivo – nuevo – proyecto

Empiece creando un vacío solución Visual del estudio:

aspnet

El nombre lo que quieras. Ahora añadiremos dos proyectos para esta solución – una aplicación Web de ASP.NET vacío (Workflow.Web) y una Biblioteca de actividad (WorkflowLibrary).

asp1

asp2

Configurarlo

En el lado de nuestro flujo de trabajo

Por ahora, simplemente elimine el archivo Activity1.xaml.

En el lado de nuestro sitio web

Crear un nuevo formulario Web y asígnele el nombre  Default.aspx:

asp3

Necesitamos cuatro controles en nuestro sitio:

  • Una etiqueta, que sólo muestra “su nombre:”; no más funcionalidad
  • Un cuadro de texto donde el usuario puede escribir su nombre
  • Un botón, que activará el flujo de trabajo
  • Una etiqueta que muestra el resultado del flujo de trabajo, nuestro saludo

El código es espectacular; sólo necesita un evento click en el botón de control:

<%@ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”Default.aspx.cs” Inherits=”Workflow.Web.Default” %>

html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;

xmlns=”http://www.w3.org/1999/xhtml”&gt;
<title></title>
</head>
<body>
server”>
<div>
<asp:Label Text=”Your name: ” runat=”server” />
<asp:TextBox ID=”TextBoxName” runat=”server” />
<asp:Button ID=”ButtonCreateGreeting” Text=”Create greeting” runat=”server”
onclick=”ButtonCreateGreeting_Click” />
<br />
<asp:Label ID=”LabelGreeting” Text=”” runat=”server” />
</div>
</form>
</body>
</html>

 

continúa en español en:    http://social.technet.microsoft.com/wiki/contents/articles/5284.getting-started-windows-workflow-foundation-and-asp-net.aspx?CommentPosted=true#commentmessage

Ultima revisión:  Carsten Siemens  Capgemini  Socio    07/05/2013 23:02

Pilas y matrices en programación (explicación y código)


matriz                       pila

Trabajo de litdev (Scotland) Moderador Small Basic Forum

http://social.technet.microsoft.com/wiki/contents/articles/15066.small-basic-stack-basics.aspx

Queremos crear una matriz con todos los archivos de imagen jpg de un directorio y todos los subdirectorios, buscando todas las carpetas de forma recursiva.
Primero creamos un array (matriz) vacío para almacenar las rutas de los archivos de imagen y el número de archivos en el mismo (cero para empezar). También establecemos la carpeta de empezar a buscar y agregarlo a una pila que llamamos “folders” (carpetas). En este ejemplo, la ubicación de la carpeta de inicio es la carpeta donde está guardado el archivo Small Basic fuente (Program.Directory

images = “”

imageCount = 0

startFolder = Program.Directory

Stack.PushValue(“folders”,startFolder)

Ahora vamos a seguir trabajando mientras nosotros tenemos carpetas todavía para comprobar, o la pila todavía tiene algunas carpetas en el mismo. Nosotros usamos un bucle while para esto. Dentro del bucle, mientras que nosotros queremos  procesar la última carpeta añadida, por lo que se metió primero

While Stack.GetCount(“folders”) > 0

currentFolder = Stack.PopValue(“folders”)

‘ More work to do here

EndWhile

Ahora queremos procesar esta carpeta, primero tenemos todas las subcarpetas, de la carpeta de trabajo actual y empujar a estos en la pila para su posterior comprobación de que las while repite.

folders = File.GetDirectories(currentFolder)

For i = 1 To Array.GetItemCount(folders)

Stack.PushValue(“folders”,folders[i])

EndFor

Después de haber añadido las sub-carpetas para comprobar más tarde como se desenrolla la pila, nos encontramos con todos los archivos en la carpeta de trabajo actual y añadir otras que terminan en “. Jpg” a la lista de Array (matriz). Comprobamos el archivo por primera conversión a minúsculas, con el fin de incluir todas las variantes de caja de jpg a JPG etc

files = File.GetFiles(currentFolder)

For i = 1 To Array.GetItemCount(files)

fileName = files[i]

fileNameLower = Text.ConvertToLowerCase(fileName)

If (Text.EndsWith(fileNameLower,”.jpg”)) Then

imageCount = imageCount+1

images[imageCount] = fileName

EndIf

EndFor

 

Por último, imprimir los resultados, y por ahora es todo.

 

images = “”

imageCount = 0

startFolder = Program.Directory

Stack.PushValue(“folders”,startFolder)

While Stack.GetCount(“folders”) > 0

currentFolder = Stack.PopValue(“folders”)

folders = File.GetDirectories(currentFolder)

For i = 1 To Array.GetItemCount(folders)

Stack.PushValue(“folders”,folders[i])

EndFor

files = File.GetFiles(currentFolder)

For i = 1 To Array.GetItemCount(files)

fileName = files[i]

fileNameLower = Text.ConvertToLowerCase(fileName)

If (Text.EndsWith(fileNameLower,”.jpg”)) Then

imageCount = imageCount+1

images[imageCount] = fileName

EndIf

EndFor

EndWhile

For i = 1 To Array.GetItemCount(images)

TextWindow.WriteLine(images[i])

EndFor

MS Small Basic: overview of stack and matrix (code of Flight Reservation program)


reservavuelos

Of the Tutorial Small Basic Curriculum (3.2) , we take that :
An array (Array) can be multidimensional, but a stack (Stack object) has only one dimension. You can directly access any element of an array, but can only access the top element of the stack. That is, if you want to access the last element of the stack, you have to go through all the elements from the beginning.
An array is a variable type that can store multiple values ​​at once. If you want to store the names of five users, rather than to create 5 variables, you can use only one variable to store the five names
And remember that in Small Basic the Stack object  is used to store data as if it will stack plates. This object follows the principle: first in, first out

Let’s use the Array object, to write a program “Flight Reservation” (excellent example) that executes the following steps:

Reserve seating for 10 passengers.
 Display the name of each passenger and seat number
 Display the total number of seats available.
code:

  1. TextWindow.WriteLine(“Reservas de vuelos”)
  2. TotalAsientos = 10
  3. For i = 1 To TotalAsientos
  4.   TextWindow.Write(“Introduzca el nombre del pasajero: “)
  5.   nombre[i] = TextWindow.Read() 
  6.   TextWindow.WriteLine(“El número de asiento ” + i + ” está reservado para ” + nombre[i])
  7.   ObtenerDetalles()
  8. EndFor
  9.  
  10. Sub ObtenerDetalles
  11.   If Array.GetItemCount(nombre) = TotalAsientos Then
  12.     TextWindow.WriteLine(“¡No hay más asientos disponibles!”)
  13.   Else
  14.     Array.GetItemCount(nombre)
  15.     AsientosDisponibles = TotalAsientos – Array.GetItemCount(nombre)   
  16.     TextWindow.WriteLine(“Número de asientos disponibles: “+ AsientosDisponibles)
  17.     TextWindow.WriteLine(“”)   
  18.   EndIf
  19. EndSub

Ilustrativo juego en MS Small Basic (código)


mines

Microsoft Small Basic    Program Listing: FMN979-0 – by Nonki Takahashi

Challenge of the Month – May 2013

‘ Minesweeper for Small Basic 0.2
‘ Copyright (c) 2013 Nonki Takahashi. All rights reserved.

‘ History:
‘ 0.2 13/05/2013 Supported mouse right button. (FMN979-0)
‘ 0.1b 07/05/2013 Created. (FMN979)

GraphicsWindow.Title = “Minesweeper for Small Basic 0.2”
Init()
While “True”
Game()
playing = “True”
While playing
Program.Delay(500)
EndWhile
EndWhile
Sub Init
CRLF = Text.GetCharacter(13) + Text.GetCharacter(10)
nMines = 10
nCols = 9
nRows = 9
bgColor = “#949FB5”
cellColor = “#D6E3F3”
coverColor = “#4A64CF”
frameColor = “#222323”
markColor = “White”
flagColor = “Red”
color = “1=#414FBD;2=#206602;3=#AA0406;4=#020282;5=#790101;6=#06787F;7=#A70604;8=#AA0808;✸=Black;”
GraphicsWindow.BackgroundColor = bgColor
x0 = 31
y0 = 30
sizeX = 31
sizeY = 30
GraphicsWindow.Width = (nCols + 2) * sizeX
GraphicsWindow.Height = (nRows + 3) * sizeY
GraphicsWindow.BrushColor = “Black”
x = x0
y = y0 + (nRows + 0.5) * sizeY
GraphicsWindow.FontSize = sizeY
GraphicsWindow.DrawText(x, y – 0.12 * sizeY, “◯”)
GraphicsWindow.FontSize = sizeY * 0.8
GraphicsWindow.DrawText(x + 0.09 * sizeX, y + 0.02 * sizeY, “└”)
GraphicsWindow.FontSize = sizeY
x = x0 + (nCols – 1) * sizeX
GraphicsWindow.DrawText(x, y – 0.12 * sizeY, “✸”)
x = x0 + sizeX
GraphicsWindow.FontSize = sizeY * 0.6
oTime = Controls.AddTextBox(x, y)
Controls.SetSize(oTime, 2 * sizeX, sizeY)
x = x0 + (nCols – 3) * sizeX
oMines = Controls.AddTextBox(x, y)
GraphicsWindow.FontSize = sizeY
Controls.SetSize(oMines, 2 * sizeX, sizeY)
dirCol = “1=1;2=1;3=0;4=-1;5=-1;6=-1;7=0;8=1;”
dirRow = “1=0;2=-1;3=-1;4=-1;5=0;6=1;7=1;8=1;”
‘ The following line could be harmful and has been automatically commented.
‘ path = File.GetSettingsFilePath()
‘ The following line could be harmful and has been automatically commented.
‘ settings = File.ReadContents(path)
If settings[“nWins”] = “” Then
settings[“nWins”] = 0
EndIf
If settings[“nPlays”] = “” Then
settings[“nPlays”] = 0
EndIf
If settings[“record”] = “” Then
settings[“record”] = 999
EndIf
‘ The following line could be harmful and has been automatically commented.
‘ File.WriteContents(path, settings)
EndSub
Sub Game
time = 0
remain = nMines
covered = nCols * nRows
Controls.SetTextBoxText(oTime, time)
Controls.SetTextBoxText(oMines, remain)
CreateStage()
ShowStage()
waiting = “True”
Timer.Interval = 1000
Timer.Pause()
GraphicsWindow.MouseDown = OnMouseDown
EndSub
Sub OnMouseDown
GraphicsWindow.MouseDown = DoNothing
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
iCol = Math.Floor((x – x0) / sizeX) + 1
iRow = Math.Floor((y – y0) / sizeY) + 1
If cover[iCol][iRow] <> “” Then
If waiting Then
waiting = “False”
Timer.Tick = OnTick
Timer.Resume()
EndIf
If Mouse.IsLeftButtonDown Then
If toggle[iCol][iRow] <> 1 Then
OpenCover()
EndIf
Else
ToggleMark()
EndIf
EndIf
GraphicsWindow.MouseDown = OnMouseDown
EndSub
Sub DoNothing
OnMouseDown = “”
EndSub
Sub OnTick
time = time + 1
Controls.SetTextBoxText(oTime, time)
EndSub
Sub OpenCover
Shapes.Remove(question[iCol][iRow])
Shapes.Remove(flag[iCol][iRow])
Shapes.Remove(pole[iCol][iRow])
Shapes.Remove(cover[iCol][iRow])
cover[iCol][iRow] = “”
covered = covered – 1
If stage[iCol][iRow] = “” Then
If nMines < covered Then
checked = “”
OpenAdjacents()
EndIf
If nMines = covered Then
Win()
EndIf
ElseIf stage[iCol][iRow] = “✸” Then
Lose()
Else ‘ numbers
If covered = nMines Then
Win()
EndIf
EndIf
EndSub
Sub ToggleMark
toggle[iCol][iRow] = toggle[iCol][iRow] + 1
If toggle[iCol][iRow] = 3 Then
toggle[iCol][iRow] = 0
EndIf
If toggle[iCol][iRow] = 0 Then
Shapes.HideShape(question[iCol][iRow])
ElseIf toggle[iCol][iRow] = 1 Then
Shapes.ShowShape(flag[iCol][iRow])
Shapes.ShowShape(pole[iCol][iRow])
remain = remain – 1
Controls.SetTextBoxText(oMines, remain)
ElseIf toggle[iCol][iRow] = 2 Then
Shapes.HideShape(flag[iCol][iRow])
Shapes.HideShape(pole[iCol][iRow])
Shapes.ShowShape(question[iCol][iRow])
remain = remain + 1
Controls.SetTextBoxText(oMines, remain)
EndIf
EndSub
Sub Win
Timer.Pause()
If time < settings[“record”] Then
settings[“record”] = time
EndIf
settings[“nWins”] = settings[“nWins”] + 1
settings[“nPlays”] = settings[“nPlays”] + 1
‘ The following line could be harmful and has been automatically commented.
‘ File.WriteContents(path, settings)
SetMessage()
GraphicsWindow.ShowMessage(msg, “You win”)
time = 0
playing = “False”
EndSub
Sub Lose
Timer.Pause()
OpenMines()
settings[“nPlays”] = settings[“nPlays”] + 1
‘ The following line could be harmful and has been automatically commented.
‘ File.WriteContents(path, settings)
SetMessage()
GraphicsWindow.ShowMessage(msg, “You lose”)
time = 0
playing = “False”
EndSub
Sub SetMessage
msg = “Time: ” + time + ” sec” + CRLF
msg = msg + “High Score: ” + settings[“record”] + ” sec” + CRLF
msg = msg + “Game Play Times: ” + settings[“nPlays”] + CRLF
msg = msg + “Wins: ” + settings[“nWins”] + CRLF
msg = msg + “Rate: ” + Math.Floor(settings[“nWins”] / settings[“nPlays”] * 100) + ” %”
EndSub
Sub OpenAdjacents
‘ param iCol, iRow – space cell
checked[iCol][iRow] = “True”
For dir = 1 To 8
Stack.PushValue(“local”, iCol)
Stack.PushValue(“local”, iRow)
Stack.PushValue(“local”, dir)
iCol = iCol + dirCol[dir]
iRow = iRow + dirRow[dir]
If (1 <= iCol) And (iCol <= nCols) And (1 <= iRow) And (iRow <= nRows) Then
If checked[iCol][iRow] = “” Then
If cover[iCol][iRow] <> “” And toggle[iCol][iRow] <> 1 Then
Shapes.Remove(question[iCol][iRow])
Shapes.Remove(flag[iCol][iRow])
Shapes.Remove(pole[iCol][iRow])
Shapes.Remove(cover[iCol][iRow])
cover[iCol][iRow] = “”
covered = covered – 1
EndIf
If stage[iCol][iRow] = “” Then
OpenAdjacents()
Else
checked[iCol][iRow] = “True”
EndIf
EndIf
EndIf
dir = Stack.PopValue(“local”)
iRow = Stack.PopValue(“local”)
iCol = Stack.PopValue(“local”)
EndFor
EndSub
Sub OpenMines
For iRow = 1 To nRows
For iCol = 1 To nCols
If stage[iCol][iRow] = “✸” Then
Shapes.HideShape(cover[iCol][iRow])
EndIf
EndFor
EndFor
EndSub
Sub CreateStage
stage = “”
toggle = “”
For iMine = 1 To nMines
iCol = Math.GetRandomNumber(nCols)
iRow = Math.GetRandomNumber(nRows)
While stage[iCol][iRow] = “✸”
iCol = Math.GetRandomNumber(nCols)
iRow = Math.GetRandomNumber(nRows)
EndWhile
stage[iCol][iRow] = “✸”
EndFor
For iRow = 1 To nRows
For iCol = 1 To nCols
AddNumbers()
EndFor
EndFor
EndSub
Sub AddNumbers
If stage[iCol][iRow] = “✸” Then
For dir = 1 To 8
jCol = iCol + dirCol[dir]
jRow = iRow + dirRow[dir]
If (1 <= jCol) And (jCol <= nCols) And (1 <= jRow) And (jRow <= nRows) And (stage[jCol][jRow] <> “✸”) Then
stage[jCol][jRow] = stage[jCol][jRow] + 1
EndIf
EndFor
EndIf
EndSub
Sub ShowStage
GraphicsWindow.FontSize = sizeY
For iRow = 1 To nRows
For iCol = 1 To nCols
x = x0 + (iCol – 1) * sizeX
y = y0 + (iRow – 1) * sizeY
ShowCover()
ShowCell()
EndFor
EndFor
EndSub
Sub ShowCover
‘ param iCol, iRow – to show
‘ param x, y – left top coordinate
If cover[iCol][iRow] = “” Then
GraphicsWindow.BrushColor = coverColor
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = frameColor
cover[iCol][iRow] = Shapes.AddRectangle(sizeX, sizeY)
Shapes.HideShape(cover[iCol][iRow])
Shapes.Move(cover[iCol][iRow], x, y)
GraphicsWindow.BrushColor = flagColor
GraphicsWindow.PenWidth = 0
flag[iCol][iRow] = Shapes.AddTriangle(0, 0.2 * sizeY, 0.6 * sizeX, 0, 0.6 * sizeX, 0.4 * sizeY)
Shapes.HideShape(flag[iCol][iRow])
Shapes.Move(flag[iCol][iRow], x + 0.2 * sizeX, y + 0.2 * sizeY)
GraphicsWindow.BrushColor = markColor
pole[iCol][iRow] = Shapes.AddRectangle(0.1 * sizeX, 0.6 * sizeY)
Shapes.HideShape(pole[iCol][iRow])
Shapes.Move(pole[iCol][iRow], x + 0.7 * sizeX, y + 0.2 * sizeY)
question[iCol][iRow] = Shapes.AddText(“?”)
Shapes.HideShape(question[iCol][iRow])
Shapes.Move(question[iCol][iRow], x + 0.2 * sizeX, y – 0.12 * sizeY)
Else
Shapes.HideShape(flag[iCol][iRow])
Shapes.HideShape(pole[iCol][iRow])
Shapes.HideShape(question[iCol][iRow])
EndIf
Shapes.ShowShape(cover[iCol][iRow])
EndSub
Sub ShowCell
‘ param iCol, iRow – to show
‘ param x, y – left top coordinate
GraphicsWindow.BrushColor = cellColor
GraphicsWindow.FillRectangle(x, y, sizeX, sizeY)
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = frameColor
GraphicsWindow.DrawRectangle(x, y, sizeX, sizeY)
GraphicsWindow.BrushColor = color[stage[iCol][iRow]]
If stage[iCol][iRow] = “✸” Then
dx = 0
Else
dx = 0.2 * sizeX
EndIf
GraphicsWindow.DrawText(x + dx, y – 0.12 * sizeY, stage[iCol][iRow])
EndSub

‘ C opyright (c) Microsoft Corporation. All rights reserved.

Small Basic: Intermediate Challenge 1 (Sushi restaurant)


sushiNao

Program Listing:    JWF370    http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/bce001cb-ce65-4d23-8645-466098928115/

Intermediate Challenge 1

Write a program to display a menu that a till operator might use in a restaurant.  They click on the items the customer wants and it works out the bill.

………………………………………………………………………………………………………………………….

Code:

‘  Challenge of the month  May 2013     Restaurant  menu order   by  NaochanON

 

InitData()

GUI()

Controls.ButtonClicked=EnterData

Sub EnterData

btnnmb=Controls.LastClickedButton

nm=controls.GetButtonCaption(btnnmb)

if text.IsSubText(Btns,nm) Then  ‘

DNMB= Text.GetSubTextToEnd(btnnmb,7)                     ‘

Newconts= Menu[DNMB]

NewPrice= Price[DNMB]

DataEnter()

elseif  text.IsSubText(Newconts,nm) then

searchNo()

NN=NN+1

Order=order+NN+”: “+nm+”    “+Price[DNMB][PNMB]+CRLF

TotPrice=TotPrice+Price[DNMB][PNMB]

Mes=Order+CRLF+”   Price      = “+Totprice+CRLF

tax=math.floor(5*Totprice)/100

Mes=Mes+”   Tax(5%) = “+tax+CRLF

Mes=Mes+”   Total      = “+(Totprice+tax)+CRLF+CRLF+”   Thank you !”

Controls.SetTextBoxText(receipt,Mes)

EndIf

endsub

sub searchNo

For j=1 To Array.GetItemCount(Newconts)

If nm= Newconts[j] Then

PNMB=j

j=Array.GetItemCount(Newconts)

endif

EndFor

EndSub

Sub DataEnter

If NMB2<>0 Then

For j=1 To NMB2

Controls.HideControl(btn2[j])                  ‘

Controls.HideControl(btn3[j])

EndFor

EndIf

Shapes.Move(redrect,10,130+75*(DNMB-1))                            ‘  Red mark

‘————————————————————————————————————————-

NMB=Array.GetItemCount(Newconts)

GRXY=”W=500;H=”+(NMB*45)

GrayBox()

‘————————————————————————————————————————-

GraphicsWindow.BrushColor=”Navy”

For i=1 To NMB

btn2[i]=Controls.AddButton(Newconts[i],440,135+40*(i-1))         ‘  menu

btn3[i]=Controls.AddButton(“US$ “+NewPrice[i],760,135+40*(i-1))  ‘  price

Controls.SetSize(btn2[i],280,35)

Controls.SetSize(btn3[i],120,35)

EndFor

‘————————————————————————————————————————-

NMB2=NMB                                               ‘

endsub

Sub GrayBox

Shapes.Remove(GRBOX)

GraphicsWindow.BrushColor=”Lightgray”

GRBOX=Shapes.AddRectangle(GRXY[“W”],GRXY[“H”])           ‘  gray  box

Shapes.Move(GRBOX,400,120)

Shapes.SetOpacity(GRBOX,60)

EndSub

Sub GUI

GraphicsWindow.Width=Desktop.Width

GraphicsWindow.Height=Desktop.Height

GraphicsWindow.Top=0

GraphicsWindow.Left=0

GraphicsWindow.FontName=”Gergia”

GraphicsWindow.FontItalic=”true”

GraphicsWindow.DrawImage(back,0,0)                       ‘  background image

‘————————————————————————————————————————-

photo=Shapes.AddImage(Img)                               ‘  Sushi photo

Shapes.Zoom(photo,550/imgw,350/imgh)

Shapes.Move(photo,400,380)

Shapes.SetOpacity(photo,60)

‘————————————————————————————————————————-

GraphicsWindow.penColor=”Red”

GraphicsWindow.BrushColor=”Red”

redrect= Shapes.AddRectangle(30,30)

Shapes.Move(redrect,10,-100)

GraphicsWindow.FontSize=25

TTL=Shapes.AddText(” Sushi Restaurent  Order System  “)  ‘  Title

Shapes.Move(TTL,500,10)

‘————————————————————————————————————————-

GraphicsWindow.FontSize=25

GraphicsWindow.BrushColor=”Navy”

For i=1 To array.GetItemCount(Btns)

btn[i]= Controls.AddButton(Btns[i],50,125+75*(i-1))    ‘   Menu

Controls.SetSize(btn[i],250,55)

EndFor

‘————————————————————————————————————————-

GraphicsWindow.FontSize=16

receipt=Controls.AddMultiLineTextBox(1000,125)           ‘   receipt box

Controls.SetSize(receipt,350,600)

Shapes.SetOpacity(receipt,70)

EndSub

Sub InitData

back=ImageList.LoadImage(“C:\Windows\Web\Wallpaper\Scenes\img29.jpg”)

url= “http://farm7.static.flickr.com/6109/6245861119_1f06dabea8.jpg&#8221;

‘url=Flickr.GetRandomPicture(“Sushi”)

img= imagelist.LoadImage(url)

imgw= ImageList.GetWidthOfImage(img)

imgh= ImageList.GetHeightOfImage(img)

Btns=”1=Hot Appetizer;2=Cold Appetizer;3=Nigiri;4=Special Rolls;5=Sea Food;6=Dinner;7=Deserts&Beverage ”

‘————————————————————————————————————————-

Menu[1]=”1=Japanese Eggplant;2=Tempura;3=Softshell Crab;4=Crab Cake;5=Oyster Saute”

Menu[2]=”1=Crab and Shrimp Sunomono;2=Aji tako Salad;3=Salmon radish Roll;4=Tuna with rice Biscuit”

Menu[3]=”1=Crab;2=Eel Sea;3=Halibut;4=Mackerel;5=Octopus;6=Omelet;7=Salmon;8=Salmon Roe;9=Scallop;10=Sea Urchin;11=Squid;12=Tuna”

Menu[4]=”1=Alaskan Roll;2=Hawaian Roll;3=Mexican Roll;4=Eel Roll;5=Avocado Roll”

Menu[5]=”1=Salmon;2=Scallops;3=Sea Bass;4=Tuna;5=Monk Fish;6=Black Cod;7=Yellow tail”

Menu[6]=”1=Chicken Teriyaki;2=Assorted Tempura;3=Sushi Deluxe;4=Assorted Sashimi Plate;5=Chirashi Sushi”

Menu[7]=”1=Ice Cream;2=Soda;3=Cola;4=Hot Tea;5=Cold Tea”

‘————————————————————————————————————————-

Price[1]=”1=7.00;2=7.00;3=8.50;4=9.50;5=7.00″

Price[2]=”1=7.00;2=9.50;3=9.50;4=10.50″

Price[3]=”1=3.50;2=5.00;3=4.50;4=3.50;5=4.00;6=3.00;7=4.00;8=5.00;9=4.50;10=7.50;11=3.75;12=4.50″

Price[4]=”1=12.00;2=12.50;3=11.50;4=10.50;5=7.50″

Price[5]=”1=12.00;2=14.00;3=16.50;4=15.50;5=13.00;6=13.50;7=14.50″

Price[6]=”1=12.00;2=13.00;3=22.00;4=24.50;5=22.50″

Price[7]=”1=2.50;2=1.50;3=1.50;4=2.00;5=1.50″

CRLF= Text.GetCharacter(13)+Text.GetCharacter(10)

EndSub

Small Basic: picture of the earth and the moon (código). Scaled distances


 

earth

Nonki Takahashi  This is my sample of community suggestion 1 (2) Draw a picture of the earth and the moon. (with scaled distances)

http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/bce001cb-ce65-4d23-8645-466098928115/

……………………………………………………………………………………………………………

re = 6378 ‘ equatorial radius of the earth [km]

rm = 1738 ‘ equatorial radius of the moon [km]

ro = 834400 ‘ radius of the orbit of the moon [km]

km = 1 / rm ‘ [px/km]

GraphicsWindow.BackgroundColor = “Black”

‘ draw the earth

GraphicsWindow.BrushColor = “Blue”

x = 40

y = 200

r = re * km

GraphicsWindow.FillEllipse(x – r, y – r, 2 * r, 2 * r)

GraphicsWindow.BrushColor = “Gray”

GraphicsWindow.DrawText(x – r, y + 10, “the earth”)

‘ draw the moon

GraphicsWindow.BrushColor = “Silver”

x = x + ro * km

r = rm * km

GraphicsWindow.FillEllipse(x – r, y – r, 2 * r, 2 * r)

GraphicsWindow.BrushColor = “Gray”

GraphicsWindow.DrawText(x – r, y + 10, “the moon”)

Small Basic: Triángulos y punto medio de una recta (código)


pendiente

Trazado de triángulos con base en la recta que pasa (corta) a otra recta por su punto medio

código:

  1. ‘ x1 < o > x2
  2. TextWindow.WriteLine(“Input      x1”)
  3. x1 = TextWindow.ReadNumber()
  4. TextWindow.WriteLine(“Input      y1”)
  5. y1 = TextWindow.ReadNumber()
  6. TextWindow.WriteLine(“Input      x2”)
  7. x2 = TextWindow.ReadNumber()
  8. TextWindow.WriteLine(“Input      y2”)
  9. y2 = TextWindow.ReadNumber()
  10. ‘ m is the slope of the line
  11. m =      (y2-y1) / (x2-x1)
  12. x =      (x1 + x2)/2
  13. y=      (y1 + y2)/2
  14. TextWindow.WriteLine(“the      slope of the line is :  ” + m)
  15. GraphicsWindow.PenWidth = 1
  16. GraphicsWindow.PenColor =      “Red”
  17. GraphicsWindow.DrawLine(x1, y1,      x2, y2)
  18. GraphicsWindow.PenWidth= 1
  19. GraphicsWindow.PenColor=      “Blue)
  20. GraphicsWindow.DrawEllipse(x1,y1,      10,10)
  21. GraphicsWindow.DrawEllipse(x2,y2,      10,10)
  22. GraphicsWindow.PenWidth = 1
  23. GraphicsWindow.PenColor =      “Red”
  24. GraphicsWindow.DrawBoundText(x,      y,20, ” medio “)
  25. GraphicsWindow.DrawLine(x, y, x      + 200, y)
  26. GraphicsWindow.DrawLine(x, y, x      – 200, y)
  27. GraphicsWindow.PenColor =      “Cyan”
  28. GraphicsWindow.DrawLine(x +      200, y, x1, y1)
  29. GraphicsWindow.DrawLine(x –      200, y, x1, y1)
  30. GraphicsWindow.DrawLine(x +      200, y, x2, y2)
  31. GraphicsWindow.DrawLine(x –      200, y, x2, y2)
  32. ‘ slope = m = (y2 – y1) / (x2 –      x1) = elevation / traveled.  for x1      different from  x2
  33. tangent      = y2-y1 / x2-x1
  34. ‘      distance = d
  35. a= Math.Power(x2- x1, 2)
  36. b =      Math.Power(y2-y1, 2)
  37. c = a + b
  38. d = Math.SquareRoot(c)
  39. TextWindow.WriteLine(“the      distance is : “

Visual Basic: Area de un triángulo (código)


areatri1

Se pide ingresar la base y altura de un triángulo, y el programa calcula el área y lo grafica.  Graduado (convertido)  del programa en  Small Basic  WGZ319   Editado por  Nonki Takahashi

  1. Module areatriModule
  2. Dim base, height, area, cm, size, x, y, k, pxBase, pxHeight, x1, y1, x2, y2, x3, y3, triangle As Primitive
  3. Sub Main()
    1. ‘Area of a triangle
    2. TextWindow.Write(“enter the value of the base of the triangle: “)
    3. base = TextWindow.ReadNumber()
    4. TextWindow.Write(“enter the value of the height of the triangle: “)
    5. height = TextWindow.ReadNumber()
    6. area = (base * height) / 2
    7. TextWindow.WriteLine(“The area is ” + Area)
  4. cm = 24 ‘ [px/cm]
  5. size = 12 ‘ [cm]
  6. GraphicsWindow.Width = cm * size
  7. GraphicsWindow.Height = cm * size
  8. GraphicsWindow.Top = TextWindow.Top + 150
  9. GraphicsWindow.Left = TextWindow.Left + 50
  10. GraphicsWindow.BackgroundColor = “LightGray”
  11. DrawGrid()
  12. DrawTriangle()
  13. End Sub
  14. Sub DrawGrid()
    1. GraphicsWindow.PenColor = “DimGray”
    2. For x = 0 To cm * size Step cm

i.   GraphicsWindow.DrawLine(x, 0, x, cm * size)

  1. Next
  2. For y = 0 To cm * size Step cm

i.   GraphicsWindow.DrawLine(0, y, cm * size, y)

  1. Next
  2. End Sub
  3. Sub DrawTriangle()
    1. GraphicsWindow.PenColor = “Black”
    2. GraphicsWindow.BrushColor = “MediumSeaGreen”
    3. k = 0.3 ‘ 0 <= k <= 1
    4. pxBase = base * cm
    5. pxHeight = height * cm
    6. x1 = pxBase * k
    7. y1 = 0
    8. x2 = pxBase
    9. y2 = pxHeight
    10. x3 = 0
    11. y3 = y2
    12. triangle = Shapes.AddTriangle(x1, y1, x2, y2, x3, y3)
    13. Shapes.Move(triangle, cm, cm)
    14. End Sub
    15. End Module

Small Basic: Area de un triángulo (código)


areatri

Se pide ingresar la base y altura de un triángulo, y el programa calcula el área y lo grafica.  Edited by Nonki Takahashi

  1. ‘  Program Listing WGZ319
  1. ‘Area of a triangle
  2. TextWindow.Write(“enter the value of the base of the triangle: “)
  3. base = TextWindow.ReadNumber()
  4. TextWindow.Write(“enter the value of the height of the triangle: “)
  5. height = TextWindow.ReadNumber()
  6. area = (base * height) / 2
  7. TextWindow.WriteLine(“The area is ” + Area)
  1. cm = 24 ‘ [px/cm]
  2. size = 12 ‘ [cm]
  3. GraphicsWindow.Width = cm * size
  4. GraphicsWindow.Height = cm * size
  5. GraphicsWindow.Top = TextWindow.Top + 150
  6. GraphicsWindow.Left = TextWindow.Left + 50
  7. GraphicsWindow.BackgroundColor = “LightGray”
  8. DrawGrid()
  9. DrawTriangle()
  1. Sub DrawGrid
  2. GraphicsWindow.PenColor = “DimGray”
  3. For x = 0 To cm * size Step cm
  4. GraphicsWindow.DrawLine(x, 0, x, cm * size)
  5. EndFor
  6. For y = 0 To cm * size Step cm
  7. GraphicsWindow.DrawLine(0, y, cm * size, y)
  8. EndFor
  9. EndSub
  1. Sub DrawTriangle
  2. GraphicsWindow.PenColor = “Black”
  3. GraphicsWindow.BrushColor = “MediumSeaGreen”
  4. k = 0.3 ‘ 0 <= k <= 1
  5. pxBase = base * cm
  6. pxHeight = height * cm
  7. x1 = pxBase * k
  8. y1 = 0
  9. x2 = pxBase
  10. y2 = pxHeight
  11. x3 = 0
  12. y3 = y2
  13. triangle = Shapes.AddTriangle(x1, y1, x2, y2, x3, y3)
  14. Shapes.Move(triangle, cm, cm)
  15. EndSub

Small basic and tablet compatibility


tablet

know if the small basic is compatible tablets equipped with windows 7 or 8.

Windows 7 tablets: run Small Basic fine on the desktop / with Silverlight

Windows 8 tablets (except ARM): run Small Basic fine on the desktop / with Silverlight

Windows 8 ARM tablets: do not run Small Basic at all (even with Silverlight)

Edited by gungan37

Proposed As Answer by litdevMicrosoft Community Contributor

Marked As Answer by Ed Price – MSFTMicrosoft Employee

http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/cfdb6219-ea5b-4722-82b7-729888074993

Otros recursos adicionales en Small Basic


examplesb
Si desea avanzar a la programación en C # o VB.NET sin dejar de utilizar sus habilidades de SB estos tutoriales le muestran cómo.

by NaochanON Wednesday Editado, 27 de febrero 2013 07:58
Hice 2 manuales y 2 listas de programas de ejemplo (continuación).
1) Para los usuarios japoneses. Manual Japonés (日本语) * corregida ver1.01
https://docs.google.com/file/d/0B8mzGh2PVjd-RnRQZHdYRE42THc/edit
2) Para el resto de los usuarios. Inglés Manual * corregida ver1.01
https://docs.google.com/file/d/0B8mzGh2PVjd-bjlxVjVnV3lsNlE/edit
3) programas de ejemplo (hecho por NaochanON)
https://docs.google.com/file/d/0B8mzGh2PVjd-eTlYSDNBX1lXd2s/edit
La extensión no se utiliza en los programas escritos en el manual básicamente.
La próxima vez voy a crear ejemplo con la extensión.
4) los programas publicados en este tema “Pon su código fuente de ejemplo aquí y rasgos de nuestros blogs!”

https://docs.google.com/file/d/0B8mzGh2PVjd-UEd2S3NWUWFvV2c/edit
Espero que estos manuales ayuden a su programación.

gracias.

http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/8b995743-071a-4eb0-abe3-2d05de90c018

La ecuación de la línea recta que muestra los ejes X e Y


easy

Pregunta:   Después de resolver la ecuación y = ax + b, ¿cómo puede Gráficor una línea recta en los ejes X e Y como Excel? – carlosfmur1948

Respuesta:   Tienes que dibujar cada segmento de línea y los ejes y etiquetado etc usando GraphicsWindow.DrawLine, y dando las coordenadas en píxeles – esto puede requerir un poco de conversión. Es necesario para calcular las coordenadas de los dos extremos del segmento de línea que se está dibujando, usando la ecuación o cualquier otro método es el adecuado.
Casualmente, yo estaba pensando en escribir una extensión de trazado simple en lugar de vertimiento datos a Excel a través de un archivo de texto que es lo que tengo que hacer si quiero una parcela de SmallBASIC.
Easy Graph  por NaoChanON

http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/4f6b079a-c2c2-41f2-b38d-85ebcf9981ef/

Empezando con Small Basic


a2

Microsoft Small Basic pone la diversión en la programación de computadoras. Con un entorno de desarrollo que es muy fácil de dominar, que facilita a los estudiantes de todas las edades en el mundo de la programación

Lea el FAQ Small Basic

Descarga Small Basic

Utilice la Guía de inicio para comenzar a aprender Small Basic

Utilice el programa de estudios para ampliar su conocimiento

Lea los capítulos de muestra de libros electrónicos a bucear profundamente en Small Basic

Hacer preguntas en los foros

Manténgase informado acerca de Small Basic leyendo nuestro blog

http://social.technet.microsoft.com/wiki/contents/articles/15889.get-started-with-small-basic.aspx

Small Basic Desafío mes de Abril/ 2013 (código)


a2

  1. 1.      Community Suggestion 2 (By Nonki)
  2. http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/7239821c-161c-4328-b29d-7c55e40b11b9
  3. 3.      Draw a picture of  cars  (Moving)   TJV532 

 

 ´ Challenge of the month April 2013 Moving Cars by NaochanON

shapecars()
shapes_Add()

While “true”
L_Cars_Moving()
R_Cars_Moving()
Program.Delay(50)
endwhile

Sub L_Cars_Moving
For L=1 To 5
For i=1 To 9
Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])-Vx[L],Shapes.GetTop(SHP[L][i][“obj”]))
EndFor
If Shapes.GetLeft(SHP[L][1][“obj”])<-200 Then
DDX=Math.GetRandomNumber(400)
For i=1 To 9
Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+1300+DDX,Shapes.GetTop(SHP[L][i][“obj”]))
EndFor
EndIf
EndFor
EndSub

Sub R_Cars_Moving
For L=6 To 10
For i=1 To 9
Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+Vx[L],Shapes.GetTop(SHP[L][i][“obj”]))
EndFor
If Shapes.GetLeft(SHP[L][1][“obj”])>1300 Then
DDX=Math.GetRandomNumber(400)
For i=1 To 9
Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])-1400-DDX,Shapes.GetTop(SHP[L][i][“obj”]))
EndFor
EndIf
EndFor
EndSub

Sub shapecars
GraphicsWindow.BackgroundColor=”Darkgreen”
GraphicsWindow.Width=1200
GraphicsWindow.Height=700
GraphicsWindow.Top=0
GraphicsWindow.Left=20
GraphicsWindow.Hide()
X0 = 0  ‘ x offset
Y0 = 0  ‘ y offset
‘————————————– Left oriented cars ——————————————————————————–
s=0.55
start=1
End=9
For L=1 To 5
shp[L][1] = “func=rect;x=4;y=23;width=130;height=25;bc=#00F0CA;pc=#000000;pw=2;”
shp[L][2] = “func=ell;x=20;y=33;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
shp[L][3] = “func=ell;x=95;y=32;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
shp[L][4] = “func=rect;x=48;y=2;width=54;height=23;bc=#E0F0CA;pc=#000000;pw=2;”
shp[L][5] = “func=tri;x=41;y=5;x1=7;y1=0;x2=0;y2=17;x3=15;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
shp[L][6] = “func=tri;x=91;y=5;x1=9;y1=0;x2=0;y2=17;x3=18;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
shp[L][7] = “func=ell;x=0;y=26;width=11;height=12;bc=#FFFF00;pc=#FF0000;pw=2;”
shp[L][8] = “func=ell;x=58;y=5;width=10;height=15;bc=#6A5ACD;pc=#6A5ACD;pw=4;”
shp[L][9] = “func=rect;x=56;y=20;width=15;height=10;bc=#FF5ACD;pc=#6A5ACD;pw=4;”
Shapes_Add()
DX=Math.GetRandomNumber(L+2)*130
Y_Pos()
For i=start To end
shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+100+DX,Shapes.GetTop(SHP[L][i][“obj”])+DY-30)
EndFor
Vx[L]=2.5+Math.GetRandomNumber(20)/10
EndFor
‘————————————– Right oriented cars ——————————————————————————–
For L=6 To 10
shp[L][1] = “func=rect;x=6;y=83;width=130;height=25;bc=#E000CA;pc=#000000;pw=2;”
shp[L][2] = “func=ell;x=20;y=93;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
shp[L][3] = “func=ell;x=95;y=92;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
shp[L][4] = “func=rect;x=48;y=62;width=54;height=23;bc=#E0F0CA;pc=#000000;pw=2;”
shp[L][5] = “func=tri;x=41;y=65;x1=7;y1=0;x2=0;y2=17;x3=15;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
shp[L][6] = “func=tri;x=91;y=65;x1=9;y1=0;x2=0;y2=17;x3=18;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
shp[L][7] = “func=ell;x=128;y=86;width=11;height=12;bc=#FFFF00;pc=#FF0000;pw=2;”
shp[L][8] = “func=ell;x=85;y=61;width=10;height=15;bc=#6A5ACD;pc=#6A5ACD;pw=4;”
shp[L][9] = “func=rect;x=82;y=76;width=15;height=10;bc=#FF5ACD;pc=#6A5ACD;pw=4;”
Shapes_Add()
DX=Math.GetRandomNumber(L-3)*130
Y_Pos()
For i=start To end
shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+500-DX,Shapes.GetTop(SHP[L][i][“obj”])+DY-30)
EndFor
Vx[L]=2.5+Math.GetRandomNumber(20)/10
EndFor
‘ ‘———————————————————————————————————————-
GraphicsWindow.Show()
EndSub

Sub shapes_Add
For i = start To End
GraphicsWindow.PenWidth = SHP[L][i][“pw”]*s
GraphicsWindow.PenColor = SHP[L][i][“pc”]
GraphicsWindow.BrushColor = SHP[L][i][“bc”]
If SHP[L][i][“func”] = “rect” Then
SHP[L][i][“obj”] = Shapes.AddRectangle(SHP[L][i][“width”]*s, SHP[L][i][“height”]*s)
ElseIf SHP[L][i][“func”] = “ell” Then
SHP[L][i][“obj”] = Shapes.AddEllipse(SHP[L][i][“width”]*s, SHP[L][i][“height”]*s)
ElseIf SHP[L][i][“func”] = “tri” Then
SHP[L][i][“obj”] = Shapes.AddTriangle(SHP[L][i][“x1”]*s, SHP[L][i][“y1”]*s, SHP[L][i][“x2”]*s, SHP[L][i][“y2”]*s, SHP[L][i][“x3”]*s, SHP[L][i][“y3”]*s)
ElseIf SHP[L][i][“func”] = “line” Then
SHP[L][i][“obj”] = Shapes.AddLine(SHP[L][i][“x1”]*s, SHP[L][i][“y1”]*s, SHP[L][i][“x2”]*s, SHP[L][i][“y2”]*s)
EndIf
Shapes.Move(SHP[L][i][“obj”], X0 + SHP[L][i][“x”]*s, Y0 + SHP[L][i][“y”]*s)
Shapes.Rotate(SHP[L][i][“obj”], SHP[L][i][“angle”])
EndFor
endsub

Sub Y_Pos
Again:
DY=(Math.GetRandomNumber(12)-1)*60
If Text.IsSubText(SDY,DY) Then
Goto Again
EndIf
SDY=SDY+DY+”;”
endsub

¿Quién hace +1 en posts de Blogger?


See on Scoop.itLas TIC en la Educación

Blog dedicado a la informática en el que se tratarán temas sobre diseño gráfico, diseño web, utilidades para hacer tus blogs más profesionales, páginas web interesantes, utilidades para windows y messenger, redes sociales, etc…

See on elblogdelainformatica10.blogspot.com.es

Bienvenidos al Desafío mensual SmallBASIC! (Abril/ 2013)- código


trafico
Desafío Física: Editado por litdevMicrosoft Community Contributor, Moderador
http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/7239821c-161c-4328-b29d-7c55e40b11b9
Escriba un programa para controlar un semáforo en un cruce donde los coches llegan de diferentes direcciones a diferentes velocidades. Si quieres un reto aún más luego añadir unas cruces de la red de carreteras y controlar  todas las luces. Las luces se pueden detectar cuando una cola se está acumulando.
Un reto difícil para algunos de ustedes puede que deseen trabajar juntos en esto.

Programa Listing TRK448-1    Editado por NaochanON

  1. ‘  Challenge of the month April 2013  …   Physics Challenge   //  Trafic  ….     by  NaochanON
  2. ‘  TRK448-1
  3. Shapes_Init()
  4. GUI()
  5. shapecars()
  1. While “true”
  2. L_Cars_Moving()
  3. R_Cars_Moving()
  4. Up_Cars_Moving()
  5. Down_Cars_Moving()
  6. RemainTime()
  7. Program.Delay(50)
  8. endwhile
  1. Sub  X_AvoidCollision
  2. For LL=(DN+2) To (DN+cars+1)
  3. If  LL<>L Then
  4. If Math.abs(Shapes.GetLeft(SHP[LL][1][“obj”])-Shapes.GetLeft(SHP[L][1][“obj”]))<160*s Then ‘  next car
  5. Vx[LL]=Vx[L]            ‘  same speed // avoid collision
  6. EndIf
  7. EndIf
  8. EndFor
  9. EndSub
  1. Sub  Y_AvoidCollision
  2. For LL=(2*cars+2+DN) To (3*cars+1+DN)
  3. If  LL<>L Then
  4. If Math.abs( Shapes.Gettop(SHP[LL][1][“obj”]) – Shapes.Gettop(SHP[L][1][“obj”]) )<140*s Then ‘  next car
  5. Vy[LL]=Vy[L]            ‘  same speed // avoid collision
  6. EndIf
  7. EndIf
  8. EndFor
  9. EndSub
  1. Sub RNDXSpeed
  2. Vx[L]= Vx[L-1]+Math.GetRandomNumber(10)/10
  3. Vx[DN+2]=4.5
  4. EndSub
  1. Sub RNDYSpeed
  2. Vy[L]= Vy[L-1]+Math.GetRandomNumber(10)/10
  3. Vy[DN+2*cars+2]=3.5
  4. EndSub
  1. Sub L_Cars_Moving
  2. DN=0
  3. For L=2 To (cars+1)
  4. Xpos[L]=Shapes.GetLeft(SHP[L][1][“obj”])
  5. ‘———————————————   Restart  ———————————————————————————————–
  6. If  LRNotice=”OK” And  -2000<Xpos[L] and Vx[L]<0.35 then        ‘    if   signal becomes “Blue”
  7. RNDXSpeed()                                                   ‘   new speed
  8. EndIf
  9. ‘———————————————   Yellow Signal  ——————————————————————————————-
  10. If  LRNotice=”Notice” And RemTime<=24 and  625<Xpos[L]  and Xpos[L]<675  then ‘//  Notice Area
  11. Vx[L]=Vx[L]*0.5                                                  ‘   speed down
  12. elseIf  LRNotice=”Notice” And  550<Xpos[L]  and Xpos[L]<625  then   ‘    Signal = “Yellow”
  13. Vx[L]=Vx[L]+0.75                                                 ‘   speed down
  14. EndIf
  15. ‘———————————————   Red Signal  ——————————————————————————————-
  16. If  LRNotice=”NG” And  625<Xpos[L]  and Xpos[L]<675  then       ‘    Signal = “Red”
  17. Vx[L]=0                                                       ‘   speed down
  18. EndIf
  19. ‘———————————————   car move  // avoid collision   ———————————————————————–
  20. For i=start To end
  21. Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])-Vx[L],Shapes.GetTop(SHP[L][i][“obj”]))
  22. EndFor
  23. X_AvoidCollision()                                              ‘   speed  control
  24. ‘———————————————–   go over left    next position  ————————————————————————-
  25. If Xpos[L]<-(300+135*L) Then
  26. RNDX=1300 -Xpos[L]+ 135*L*2
  27. For i=start To end
  28. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+Rndx,Shapes.GetTop(SHP[L][i][“obj”]))
  29. endfor
  30. RNDXSpeed()
  31. endif
  32. EndFor
  33. EndSub
  1. Sub R_Cars_Moving
  2. DN=cars
  3. For L=(cars+2) To (2*cars+1)
  4. Xpos[L]=Shapes.GetLeft(SHP[L][1][“obj”])
  5. ‘———————————————   Restart  ———————————————————————————————–
  6. If  LRNotice=”OK” And  -2000<Xpos[L] and Vx[L]<0.35 then       ‘    if   signal becomes “Blue”
  7. RNDXSpeed()                                                  ‘   new speed
  8. EndIf
  9. ‘———————————————   Yellow Signal  ——————————————————————————————-
  10. If  LRNotice=”Notice” And RemTime<=24 and  370<Xpos[L]  and Xpos[L]<400  then  ‘    Notice area
  11. Vx[L]=Vx[L]*0.5                                              ‘   speed down
  12. elseIf  LRNotice=”Notice” And  345<Xpos[L]  and Xpos[L]<420  then
  13. Vx[L]=Vx[L]+0.75                                             ‘   speed down
  14. EndIf
  15. ‘———————————————   Red Signal  ——————————————————————————————-
  16. If  LRNotice=”NG” And  365<Xpos[L]  and Xpos[L]<390  then      ‘    Signal = “Red”
  17. Vx[L]=0                                                      ‘   speed down
  18. EndIf
  19. ‘———————————————   car move  // avoid collision   ———————————————————————–
  20. For i=start To end
  21. Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+Vx[L],Shapes.GetTop(SHP[L][i][“obj”]))
  22. EndFor
  23. X_AvoidCollision()                                             ‘   speed  control
  24. ‘———————————————–   go over left    next position  ————————————————————————-
  25. If 1000+135*L<Xpos[L] Then
  26. RNDX=-(Xpos[L]+ 135*L*2)
  27. For i=start To end
  28. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+Rndx,Shapes.GetTop(SHP[L][i][“obj”]))
  29. endfor
  30. RNDXSpeed()
  31. endif
  32. EndFor
  33. EndSub
  1. Sub Up_Cars_Moving
  2. DN=0
  3. For L=(2*cars+2) To (3*cars+1)
  4. Ypos[L]=Shapes.Gettop(SHP[L][1][“obj”])
  5. ‘———————————————   Restart  ———————————————————————————————–
  6. If  UDNotice=”OK” And  -2000<Ypos[L] and Vy[L]<0.35 then        ‘    if   signal becomes “Blue”
  7. RNDYSpeed()                                                   ‘   new speed
  8. EndIf
  9. ‘———————————————   Yellow Signal  ——————————————————————————————-
  10. If  UDNotice=”Notice” And RemTime<=3 and  425<Ypos[L]  and Ypos[L]<450  then  ‘    Notice Area
  11. Vy[L]=Vy[L]*0.75                                              ‘   speed down
  12. elseIf  UDNotice=”Notice” And  350<Ypos[L]  and Ypos[L]<440  then  ‘    Signal = “Yellow”
  13. Vy[L]=Vy[L]+0.75                                              ‘   speed down
  14. EndIf
  15. ‘———————————————   Red Signal  ——————————————————————————————-
  16. If  UDNotice=”NG” And  425<Ypos[L]  and Ypos[L]<450  then       ‘    Signal = “Red”
  17. Vy[L]=0                                                       ‘   speed down
  18. EndIf
  19. ‘———————————————   car move  // avoid collision   ———————————————————————–
  20. For i=1 To 8
  21. Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”]),Shapes.GetTop(SHP[L][i][“obj”])-VY[L])
  22. EndFor
  23. Y_AvoidCollision()                                              ‘   speed  control
  24. ‘———————————————–   go over left    next position  ————————————————————————-
  25. If Ypos[L]< -135*(L-2*cars) Then
  26. RNDY=600 -Ypos[L]+ 135*(L-2*cars)*2
  27. For i=start To end-1
  28. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”]),Shapes.GetTop(SHP[L][i][“obj”])+RNDY)
  29. endfor
  30. RNDYSpeed()
  31. endif
  32. EndFor
  33. EndSub
  1. Sub Down_Cars_Moving
  2. DN=cars
  3. For L=(3*cars+2) To (4*cars+1)
  4. Ypos[L]=Shapes.Gettop(SHP[L][1][“obj”])
  5. ‘———————————————   Restart  ———————————————————————————————–
  6. If  UDNotice=”OK” And  -2000<Ypos[L] and Vy[L]<0.35 then       ‘    if   signal becomes “Blue”
  7. RNDYSpeed()                                                  ‘   new speed
  8. EndIf
  9. ‘———————————————   Yellow Signal  ——————————————————————————————-
  10. If  UDNotice=”Notice” And RemTime<=3 and  180<Ypos[L]  and Ypos[L]<205  then  ‘   Notice Area
  11. Vy[L]=Vy[L]*0.75                                             ‘   speed down
  12. elseIf  UDNotice=”Notice” And  165<Ypos[L]  and Ypos[L]<250  then  ‘    Signal = “Yellow”
  13. Vy[L]=Vy[L]+0.75                                             ‘   speed down
  14. EndIf
  15. ‘———————————————   Red Signal  ——————————————————————————————-
  16. If  UDNotice=”NG” And  180<Ypos[L]  and Ypos[L]<205  then      ‘    Signal = “Red”
  17. Vy[L]=0                                                      ‘   speed down
  18. EndIf
  19. ‘———————————————   car move  // avoid collision   ———————————————————————–
  20. For i=1 To 8
  21. Shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”]),Shapes.GetTop(SHP[L][i][“obj”])+VY[L])
  22. EndFor
  23. Y_AvoidCollision()                                             ‘   speed  control
  24. ‘———————————————–   go over left    next position  ————————————————————————-
  25. If Ypos[L]> 700+135*(L-3*cars-1) Then
  26. RNDY=-Ypos[L]- 135*(L-3*cars-1)*2
  27. For i=start To end-1
  28. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”]),Shapes.GetTop(SHP[L][i][“obj”])+RNDY)
  29. endfor
  30. RNDYSpeed()
  31. endif
  32. EndFor
  33. EndSub
  1. Sub RemainTime
  2. CycleTime=40                                                ‘    LR ; 40 sec   UD ; 40 sec
  3. DT=(Clock.ElapsedMilliseconds-t0)/1000                      ‘   Elapsed time ;  sec
  4. RemTime=text.GetSubText(1000+math.round(CycleTime-DT),2,3)  ‘   Remained time  ( Count down)
  5. For k=21 To 24
  6. Shapes.SetText( SHP[1][K][“obj”],RemTime)                 ‘   show  remained time
  7. EndFor
  8. If (CycleTime/2>DT and DT>=CycleTime/2-10)  Then            ‘   LR trafic  ;  Yellow signal blinking
  9. blink_LR_Yellow()
  10. elseIf (CycleTime>DT and DT>=CycleTime-10)  Then            ‘   UD trafic  ;  Yellow signal blinking
  11. blink_UD_Yellow()
  12. elseIf CycleTime/2+1>DT and DT>=CycleTime/2 Then            ‘  UD trafic  ;  Can Go !  Signals for UD  :Blue
  13. UD_Trafic_Go()
  14. elseIf CycleTime+1>DT and DT>=CycleTime Then                ‘  LR trafic  ;  Can Go !   Signals for LR  :Blue
  15. LR_Trafic_Go()
  16. t0= Clock.ElapsedMilliseconds                             ‘  CycleTime reset
  17. DT=0
  18. EndIf
  19. endsub
  1. Sub LR_Trafic_Go
  2. LRNotice=”OK”
  3. UDNotice=”NG”
  4. ON[“R”]=”1=1;2=1;3=0;4=0″
  5. ON[“Y”]=”1=0;2=0;3=0;4=0″
  6. ON[“B”]=”1=0;2=0;3=1;4=1″
  7. LightON()
  8. endsub
  1. Sub blink_LR_Yellow
  2. LRNotice=”Notice”
  3. UDNotice=”NG”
  4. ON[“R”]=”1=1;2=1;3=0;4=0″
  5. ON[“Y”]=”1=0;2=0;3=1;4=1″   ‘  for  LR
  6. ON[“B”]=”1=0;2=0;3=0;4=0″
  7. LightON()
  8. Program.Delay(20)
  9. ON[“Y”]=”1=0;2=0;3=0;4=0″   ‘
  10. LightON()
  11. EndSub
  1. Sub blink_UD_Yellow
  2. LRNotice=”NG”
  3. UDNotice=”Notice”
  4. ON[“R”]=”1=0;2=0;3=1;4=1″
  5. ON[“Y”]=”1=1;2=1;3=0;4=0″  ‘  for UD
  6. ON[“B”]=”1=0;2=0;3=0;4=0″
  7. LightON()
  8. Program.Delay(20)
  9. ON[“Y”]=”1=0;2=0;3=0;4=0″   ‘
  10. LightON()
  11. EndSub
  1. Sub UD_Trafic_Go
  2. LRNotice=”NG”
  3. UDNotice=”OK”
  4. ON[“R”]=”1=0;2=0;3=1;4=1″
  5. ON[“Y”]=”1=0;2=0;3=0;4=0″
  6. ON[“B”]=”1=1;2=1;3=0;4=0″
  7. LightON()
  8. endsub
  1. Sub AllClear
  2. ON[“R”]=”1=0;2=0;3=0;4=0″
  3. ON[“Y”]=”1=0;2=0;3=0;4=0″
  4. ON[“B”]=”1=0;2=0;3=0;4=0″
  5. LightON()
  6. endsub
  1. Sub LightON
  2. For k=1 To 4     ‘  1,2   Left  Upper &  Right Lower    3 ,4  Right  Upper &  Left Lower
  3. shapes.SetOpacity(SHP[1][5*(K-1)+3][“obj”],10+90*ON[“R”][K])  ‘  Red
  4. shapes.SetOpacity(SHP[1][5*(K-1)+4][“obj”],10+90*ON[“Y”][K])  ‘  Yellow
  5. shapes.SetOpacity(SHP[1][5*(K-1)+5][“obj”],10+90*ON[“B”][K])  ‘  Blue
  6. endfor
  7. EndSub
  1. Sub Shapes_Init
  2. X0 = 250  ‘ x offset
  3. Y0 = 150  ‘ y offset
  4. ‘———————————————————————————————————————-
  5. shp[1][1] = “func=rect;x=213;y=50;width=26;height=85;bc=#3B9440;pc=#3B9440;pw=2;”   ‘  Left  Upper
  6. shp[1][2] = “func=rect;x=224;y=135;width=8;height=16;bc=#000000;pc=#000000;pw=2;”   ‘  Pole
  7. shp[1][3] = “func=ell;x=220;y=80;width=14;height=15;bc=#FF0000;pc=#FF0000;pw=2;”    ‘  Red
  8. shp[1][4] = “func=ell;x=220;y=98;width=14;height=15;bc=#FFFF00;pc=#FFFF00;pw=2;”    ‘  Yellow
  9. shp[1][5] = “func=ell;x=220;y=116;width=14;height=14;bc=#0000FF;pc=#0000FF;pw=2;”   ‘  Blue
  10. ‘———————————————————————————————————————-
  11. shp[1][6] = “func=rect;x=364;y=269;width=26;height=85;bc=#3B9440;pc=#3B9440;pw=2;”  ‘  Right Lower
  12. shp[1][7] = “func=rect;x=373;y=252;width=8;height=16;bc=#000000;pc=#000000;pw=2;”
  13. shp[1][8] = “func=ell;x=371;y=310;width=14;height=14;bc=#FF0000;pc=#FF0000;pw=2;”   ‘  Red
  14. shp[1][9] = “func=ell;x=371;y=292;width=14;height=14;bc=#FFFF00;pc=#FFFF00;pw=2;”   ‘  Yellow
  15. shp[1][10] = “func=ell;x=371;y=274;width=14;height=14;bc=#0000FF;pc=#0000FF;pw=2;”  ‘  Blue
  16. ‘———————————————————————————————————————-
  17. shp[1][11] = “func=rect;x=378;y=116;width=85;height=20;bc=#3B9440;pc=#3B9440;pw=2;”  ‘  Right Upper
  18. shp[1][12] = “func=rect;x=355;y=124;width=22;height=8;bc=#000000;pc=#000000;pw=2;”
  19. shp[1][13] = “func=ell;x=418;y=119;width=14;height=14;bc=#FF0000;pc=#FF0000;pw=2;”   ‘  Red
  20. shp[1][14] = “func=ell;x=400;y=119;width=14;height=14;bc=#FFFF00;pc=#FFFF00;pw=2;”   ‘  Yellow
  21. shp[1][15] = “func=ell;x=382;y=119;width=14;height=14;bc=#0000FF;pc=#0000FF;pw=2;”   ‘  Blue
  22. ‘———————————————————————————————————————-
  23. shp[1][16] = “func=rect;x=145;y=259;width=85;height=24;bc=#3B9440;pc=#3B9440;pw=2;”  ‘  Left  Lower
  24. shp[1][17] = “func=rect;x=231;y=267;width=16;height=8;bc=#000000;pc=#000000;pw=2;”
  25. shp[1][18] = “func=ell;x=177;y=263;width=14;height=14;bc=#FF0000;pc=#FF0000;pw=2;”   ‘  Red
  26. shp[1][19] = “func=ell;x=194;y=263;width=14;height=14;bc=#FFFF00;pc=#FFFF00;pw=2;”   ‘  Yellow
  27. shp[1][20] = “func=ell;x=213;y=263;width=14;height=14;bc=#0000FF;pc=#0000FF;pw=2;”   ‘  Blue
  28. ‘———————————————————————————————————————-
  29. shp[1][21] = “func=text;x=216;y=60;text=120;bc=#FF0000;fs=14;fn=Coulier New;”        ‘   Remaining time  #1  Left Upper
  30. shp[1][22] = “func=text;x=366;y=330;text=120;bc=#FF0000;fs=14;fn=Coulier New;”       ‘   Remaining time  #1  Right Lower
  31. shp[1][23] = “func=text;x=438;y=116;text=120;bc=#FF0000;fs=14;fn=Coulier New;”        ‘   Remaining time  #2  Right Upper
  32. shp[1][24] = “func=text;x=151;y=262;text=120;bc=#FF0000;fs=14;fn=Coulier New;”        ‘   Remaining time  #1  Left Lowerer
  33. EndSub
  1. Sub shapecars
  2. ‘————————————–  Left oriented cars ——————————————————————————–
  3. s=0.55
  4. start=1
  5. End=9
  6. cars=5
  7. For L=2 To (cars+1)
  8. shp[L][1] = “func=rect;x=4;y=23;width=130;height=25;bc=#00F0CA;pc=#000000;pw=2;”
  9. shp[L][2] = “func=ell;x=20;y=33;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
  10. shp[L][3] = “func=ell;x=95;y=32;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
  11. shp[L][4] = “func=rect;x=48;y=2;width=54;height=23;bc=#E0F0CA;pc=#000000;pw=2;”
  12. shp[L][5] = “func=tri;x=41;y=5;x1=7;y1=0;x2=0;y2=17;x3=15;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
  13. shp[L][6] = “func=tri;x=91;y=5;x1=9;y1=0;x2=0;y2=17;x3=18;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
  14. shp[L][7] = “func=ell;x=0;y=26;width=11;height=12;bc=#FFFF00;pc=#FF0000;pw=2;”
  15. shp[L][8] = “func=ell;x=58;y=5;width=10;height=15;bc=#6A5ACD;pc=#6A5ACD;pw=4;”
  16. shp[L][9] = “func=text;x=80;y=5;text=”+(L-1)+”;bc=#FF0000;fs=22;fn=Coulier New;”
  17. Shapes_Add()
  18. For i=start To end
  19. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+700+(L-2)*160,Shapes.GetTop(SHP[L][i][“obj”])+210)
  20. EndFor
  21. RNDXSpeed()
  22. EndFor
  23. ‘————————————– Right oriented cars ——————————————————————————–
  24. For L=(cars+2) To (2*cars+1)
  25. shp[L][1] = “func=rect;x=6;y=83;width=130;height=25;bc=#E000CA;pc=#000000;pw=2;”
  26. shp[L][2] = “func=ell;x=20;y=93;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
  27. shp[L][3] = “func=ell;x=95;y=92;width=23;height=23;bc=#9D756A;pc=#000000;pw=2;”
  28. shp[L][4] = “func=rect;x=48;y=62;width=54;height=23;bc=#E0F0CA;pc=#000000;pw=2;”
  29. shp[L][5] = “func=tri;x=41;y=65;x1=7;y1=0;x2=0;y2=17;x3=15;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
  30. shp[L][6] = “func=tri;x=91;y=65;x1=9;y1=0;x2=0;y2=17;x3=18;y3=17;bc=#E0F0CA;pc=#E0F0CA;pw=2;”
  31. shp[L][7] = “func=ell;x=128;y=86;width=11;height=12;bc=#FFFF00;pc=#FF0000;pw=2;”
  32. shp[L][8] = “func=ell;x=85;y=61;width=10;height=15;bc=#6A5ACD;pc=#6A5ACD;pw=4;”
  33. shp[L][9] = “func=text;x=60;y=60;text=”+(L-cars-1)+”;bc=#FF0000;fs=22;fn=Coulier New;”
  34. Shapes_Add()
  35. For i=start To end
  36. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])-200-(L-cars-2)*160,Shapes.GetTop(SHP[L][i][“obj”])+125)
  37. EndFor
  38. RNDXSpeed()
  39. EndFor
  40. ‘—————————————Up oriented cars ——————————————————————————-
  41. end2=8
  42. For L=(2*cars+2) To (3*cars+1)
  43. shp[L][1] = “func=ell;x=2;y=0;width=34;height=93;bc=#DBD229;pc=#DBD229;pw=2;”
  44. shp[L][2] = “func=ell;x=2;y=7;width=11;height=7;bc=#FF0000;pc=#FF0000;pw=2;”
  45. shp[L][3] = “func=ell;x=25;y=7;width=11;height=7;bc=#FF0000;pc=#FF0000;pw=2;”
  46. shp[L][4] = “func=rect;x=31;y=19;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  47. shp[L][5] = “func=rect;x=1;y=19;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  48. shp[L][6] = “func=rect;x=0;y=60;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  49. shp[L][7] = “func=rect;x=31;y=60;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  50. shp[L][8] = “func=text;x=12;y=35;text=”+(L-2*cars-1)+”;bc=#FF0000;fs=22;fn=Coulier New;”
  51. Shapes_Add()
  52. For i=start To end2
  53. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+260,Shapes.GetTop(SHP[L][i][“obj”])+500+(L-(2*cars+2))*160)
  54. EndFor
  55. RNDYSpeed()
  56. EndFor
  57. ‘—————————————Down oriented cars ——————————————————————————-
  58. For L=(3*cars+2) To (4*cars+1)
  59. shp[L][1] = “func=ell;x=2;y=0;width=34;height=93;bc=#E090CA;pc=#DBD229;pw=2;”
  60. shp[L][2] = “func=ell;x=2;y=77;width=11;height=7;bc=#FF0000;pc=#FF0000;pw=2;”
  61. shp[L][3] = “func=ell;x=25;y=77;width=11;height=7;bc=#FF0000;pc=#FF0000;pw=2;”
  62. shp[L][4] = “func=rect;x=31;y=19;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  63. shp[L][5] = “func=rect;x=1;y=19;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  64. shp[L][6] = “func=rect;x=0;y=60;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  65. shp[L][7] = “func=rect;x=31;y=60;width=6;height=14;bc=#000000;pc=#6A5ACD;pw=2;”
  66. shp[L][8] = “func=text;x=12;y=40;text=”+(L-3*cars-1)+”;bc=#FF0000;fs=22;fn=Coulier New;”
  67. Shapes_Add()
  68. For i=start To end2
  69. shapes.Move(SHP[L][i][“obj”],Shapes.GetLeft(SHP[L][i][“obj”])+320,Shapes.GetTop(SHP[L][i][“obj”])-130-( L – (3*cars+2) )*160)
  70. EndFor
  71. RNDYSpeed()
  72. EndFor
  73. ‘ ‘———————————————————————————————————————-
  74. GraphicsWindow.Show()
  75. t0= Clock.ElapsedMilliseconds   ‘   start tim
  76. EndSub
  1. Sub GUI
  2. GraphicsWindow.Title=” Trafic Signals and Car action  “
  3. GraphicsWindow.top=10
  4. GraphicsWindow.Left=20
  5. GraphicsWindow.Hide()
  6. GraphicsWindow.Width=1200
  7. GraphicsWindow.Height=700
  8. GraphicsWindow.BackgroundColor=”DarkGreen”
  9. GraphicsWindow.BrushColor=”Gray”
  10. GraphicsWindow.PenColor=”Gray”
  11. GraphicsWindow.FillEllipse(50,-50,1000,770)
  12. GraphicsWindow.BrushColor=”DarkGreen”
  13. GraphicsWindow.PenColor=”DarkGreen”
  14. GraphicsWindow.FillEllipse(100,-10,900,680)
  15. GraphicsWindow.BrushColor=”Gray”
  16. GraphicsWindow.PenColor=”Gray”
  17. GraphicsWindow.FillRectangle(-100,300,1400,100)
  18. GraphicsWindow.FillRectangle(500,-100,100,1000)
  1. GraphicsWindow.BrushColor=”White”
  2. GraphicsWindow.PenColor=”White”
  3. For i=1 To 20
  4. GraphicsWindow.FillRectangle(30+(i-1)*100,350-5,30,5)
  5. GraphicsWindow.FillRectangle(550,-30+(i-1)*80,5,30)
  6. endfor
  7. GraphicsWindow.FillRectangle(475,300,5,30)
  8. GraphicsWindow.FillRectangle(625,370,5,30)
  9. GraphicsWindow.FillRectangle(500,418,35,5)
  10. GraphicsWindow.FillRectangle(565,275,35,5)
  11. STPX=”1=475;2=625;3=500;4=565″      ‘  stop Line
  12. STPY=”1=300;2=370;3=418;4=275″
  13. ‘———————————————————————————————————————-
  14. s=1
  15. L=1
  16. start=1
  17. End=24
  18. Shapes_Add()
  19. AllClear()
  20. LR_Trafic_Go()
  21. EndSub
  1. Sub shapes_Add
  2. For i = start To End
  3. GraphicsWindow.PenWidth = SHP[L][i][“pw”]*s
  4. GraphicsWindow.PenColor = SHP[L][i][“pc”]
  5. GraphicsWindow.BrushColor = SHP[L][i][“bc”]
  6. If SHP[L][i][“func”] = “rect” Then
  7. SHP[L][i][“obj”] = Shapes.AddRectangle(SHP[L][i][“width”]*s, SHP[L][i][“height”]*s)
  8. ElseIf SHP[L][i][“func”] = “ell” Then
  9. SHP[L][i][“obj”] = Shapes.AddEllipse(SHP[L][i][“width”]*s, SHP[L][i][“height”]*s)
  10. ElseIf SHP[L][i][“func”] = “tri” Then
  11. SHP[L][i][“obj”] = Shapes.AddTriangle(SHP[L][i][“x1”]*s, SHP[L][i][“y1”]*s, SHP[L][i][“x2”]*s, SHP[L][i][“y2”]*s, SHP[L][i][“x3”]*s, SHP[L][i][“y3”]*s)
  12. ElseIf shp[L][i][“func”] = “text” Then
  13. fs = shp[L][i][“fs”]
  14. GraphicsWindow.FontSize = fs * s
  15. GraphicsWindow.FontName = shp[L][i][“fn”]
  16. shp[L][i][“obj”] = Shapes.AddText(shp[L][i][“text”])
  17. EndIf

Shapes.Move(SHP[L][i][“obj”], X0 + SHP[L][i][“x”]*s, Y0 + SHP[L][i][“y”]*s)

EndFor

endsub

Guerra aérea – 1942 (código)


aer1

Microsoft Small Basic  Program Listing:   ID: KJW676  http://smallbasic.com/smallbasic.com/program/?ZZD394

  1. ‘ 1942 like Game ID: KJW676
    ‘ Copyright (C) 2010, Laurent GIRAUD laurent.giraud1@free.fr
    ‘ License: MIT license http://www.opensource.org/licenses/mit-license.php
    ‘most of Game artwork created by Ari Feldman ari@arifeldman.com”
    ‘ and others grabed from free web sprites‘————————-
    ‘replace by your directory path
    ‘Path =”file://C:/Users/Laurent/Desktop/small basic/images1942/”
    Path= “http://imode.free.fr/images1942/&#8221;
    ‘replace by your directory path
    ‘————————-‘ Game area controls
    gameWidth  = 640
    gameHeight = 480
    fps = 50
    bgs = 2 ‘backgroundspeed
    Player_Lives = 10

    nbrisland = 5 ‘nomber of island images
    islandcount = 5 ‘nomber of island in the wall field

    ‘ Window title
    gameTitle = “1942, Score: ”

    GraphicsWindow.Hide()
    GraphicsWindow.Title = gameTitle + “0”
    GraphicsWindow.CanResize = “False”
    GraphicsWindow.Width = gameWidth
    GraphicsWindow.Height = gameHeight

    ‘Presentation
    ‘ todo

    ‘ Start game
    Init()
    define_paths()
    TimePlay = 0
    pathNBR = 1
    ‘create_enemies1()
    Play()

    ‘ Setup world
    Sub Init
    GraphicsWindow.Hide()

    Mouse.HideCursor()
    ‘ addImage in the right order is needed to define the shapes depth

    island4= ImageList.LoadImage(Path + “island4.png”)
    island1= ImageList.LoadImage(Path + “island1.png”)
    island2= ImageList.LoadImage(Path + “island2.png”)
    island3= ImageList.LoadImage(Path + “island3.png”)
    island5= ImageList.LoadImage(Path + “island5.png”)
    player0 = ImageList.LoadImage(Path + “myplane1.png”)
    background = ImageList.LoadImage(Path + “fond.png”)
    bullet0 = ImageList.LoadImage(Path + “bullet.png”)
    enemy= ImageList.LoadImage(Path + “enemy1.png”)
    enemy2 = ImageList.LoadImage(Path + “enemy2.png”)
    enemy_expl1=ImageList.LoadImage(Path + “explo1.png”)
    enemy_expl2=ImageList.LoadImage(Path + “explo2.png”)
    player_expl=ImageList.LoadImage(Path + “explo2.png”)
    Enemy_bullet=ImageList.LoadImage(Path + “E_bullet.png”)
    end = ImageList.LoadImage(Path + “End.png”)

    enemy_Array = “EnemyArray” ‘Array that contain all the enemies
    ‘ every enemy in tha array has 5 informations
    ‘ TimeLine: each enemy has its own timeline
    ‘ PathNBR: the precalculated path defineing the movement
    ‘ the movement is decomposed in LineNbr differents lines
    ‘ each line is define in the enemy_path table with rotation, deltaY and deltaY
    ‘ PositonX, PositonY: position in space


    enemy_TimeLine = “EnemyTimeLine”
    enemy_line = “enemyLineNbr”
    enemy_PosX = “enemyPositonX”
    enemy_PosY = “enemyPositonY”
    enemy_PathNBR=”enemy_PathNBR”

    enemy_Nbr = 6
    enemy_Count = 0
    enemy_speed = 4
    ‘enemy_NextRemove = 1
    enemy_Life = 10
    player_size= 65
    enemy_size = 32
    enemy_ammo_size = 8
    player_bullet_size = 32

    island_Array = “Island array”
    IslandsPosition()
    create_level1()

    fond= Shapes.AddImage(background)
    Array.SetValue(island_Array,1,Shapes.AddImage(island1))
    Array.SetValue(island_Array,2,Shapes.AddImage(island2))
    Array.SetValue(island_Array,3,Shapes.AddImage(island3))
    Array.SetValue(island_Array,4,Shapes.AddImage(island4))
    Array.SetValue(island_Array,5,Shapes.AddImage(island5))
    For i = 6 to  islandcount
    Array.SetValue(island_Array,i,Array.getValue(island_Array,Math.Remainder(i,4)))
    Endfor

    player = Shapes.AddImage(player0)
    GraphicsWindow.FontSize = 20
    GraphicsWindow.BackgroundColor = “Grey”
    GraphicsWindow.PenColor = “Yellow”

    Player_Ammo = “Player_AmmoArray”
    Player_AmmoAge = “Player_AmmoAge”
    Player_AmmoMax = 50
    Player_AmmoCount = 0
    Player_Ammospeed = bgs +4
    Player_AmmoLife = 100

    Enemy_Ammo = “Enemy_AmmoArray”
    Enemy_AmmoAge = “Enemy_AmmoAge”
    Enemy_Ammo_Angle=”Enemy_Ammo_Angle”
    Enemy_AmmoMax = 30
    Enemy_AmmoCount = 0
    Enemy_Ammospeed = bgs +4
    Enemy_AmmoLife = 50
    Enemy_Agresivity = 200
    score = 0
    EndSub

    ‘ Main gane routine
    Sub Play
    GraphicsWindow.Show()

    ‘ Main loop
    play = 1
    pause = 0
    incx =0   ‘ X-axis increment for background
    incy = 0  ‘ Y-axis increment for background
    incbx = 0  ‘increment for bullets and all objects on X
    incby = 0 ‘increment for bullets and all objects on Y
    squadron = 1
    ‘ Island initial position
    j= 0

    For i= 1 To islandcount
    j=Math.Remainder(i,6)
    posy[i]= islandPos[j][2]
    posx[i]= islandPos[j][3]
    incislandx[i] = 0
    incislandy[i] = 0
    EndFor
    TimePlay = 0
    Shapes.Move(player, gameWidth/2 , gameHeight -80 )
    While(play = 1)
    Program.Delay(1000/fps)
    TimePlay = TimePlay +1

    If (pause = 0) Then
    If (TimePlay = level1[squadron][1]) then

    pathNBR = level1[squadron][2]
    enemyPosX1 = level1[squadron][3]  ‘X position
    enemyPosY1 = level1[squadron][4]  ‘Y position
    enemy_Nbr = level1[squadron][6]
    enemy_type = level1[squadron][7]
    if (level1[squadron][5]=1) then
    create_enemies_left()
    Else
    create_enemies_right()
    endif
    squadron = squadron + 1
    endif
    If (TimePlay > 4000) then
    Shapes.Move(Shapes.addImage(end), 230,200)
    Program.Delay(5000)
    Program.End()
    Endif
    moveall()

    GraphicsWindow.MouseMove = OnMouseMove
    GraphicsWindow.MouseDown = OnMouseDown

    AgePlayer_Ammo()

    EndIf
    EndWhile

    EndSub

    Sub OnMouseMove
    paddleX = GraphicsWindow.MouseX – player_size/2
    paddleY = GraphicsWindow.MouseY- player_size

    If (paddleX < 0) then
    paddleX = 0
    endif
    Shapes.Move(player, paddleX , paddleY )
    EndSub
    Sub OnMouseDown
    ShootX = GraphicsWindow.MouseX – 15 ‘ in order to be from the neck of the plane
    ShootY = GraphicsWindow.MouseY – 80
    Fire()
    EndSub

    Sub moveall
    incbx = 0
    incby =0
    GraphicsWindow.Title = gameTitle + score +” Lives:”+Player_Lives

    If (paddleX >(gameWidth-62) ) Then
    incx = incx – bgs
    incbx = incbx – bgs
    For i= 1 To islandcount
    incislandx[i] = incislandx[i] – bgs
    EndFor
    If (incx = -32 ) Then
    incx =0
    Endif
    Endif
    If (paddleX < 64 ) Then
    incx = incx + bgs
    incbx = incbx + bgs
    For i= 1 To islandcount
    incislandx[i] = incislandx[i] + bgs
    EndFor
    If (incx = 32 ) Then
    incx =0
    Endif
    Endif
    Shapes.Move(fond,incx -32 ,incy – 32)

    For i= 1 To islandcount
    islx = posx[i]+incislandx[i]
    isly = posy[i]+incislandy[i]
    Shapes.Move(Array.GetValue(island_Array,i),islx,isly)
    EndFor

    incy = incy + bgs
    incby = incby+ bgs
    For i= 1 To islandcount
    incislandy[i] = incislandy[i] + bgs
    EndFor

    If (incy = 32) Then
    incy =0
    Endif

    For i= 1 To islandcount
    If ((posy[i]+incislandy[i]) > (gameHeight+15)) Then ‘relaunch island if no more visible
    R= Math.Round(Math.GetRandomNumber(nbrisland))
    AA = Math.Remainder(TimePlay,6)
    ‘give new coordinates
    posx[i]= islandPos[AA][2]
    posy[i]= islandPos[AA][3]
    Shapes.move(Array.GetValue(island_Array,R),posx[i],posy[i])
    incislandy[i]=0
    incislandx[i]=0
    EndIf
    ENDFOR
    ‘ Move playerammo
    For i = 1 To Player_AmmoCount
    Player_Ammox = Shapes.GetLeft(Array.GetValue(Player_Ammo, i)) +incbx
    Player_Ammoy = Shapes.GetTop(Array.GetValue(Player_Ammo, i)) – Player_Ammospeed
    Shapes.Move(Array.GetValue(Player_Ammo, i), Player_Ammox, Player_Ammoy)
    Array.SetValue(Player_AmmoAge, i, Array.GetValue(Player_AmmoAge, i) + 1)
    EndFor
    ‘ Move Enemy ammo
    For iea = 1 To Enemy_AmmoCount
    dx =(Math.Sin((Array.GetValue(Enemy_Ammo_Angle, iea) )) * Enemy_Ammospeed)
    dy =(Math.Cos((Array.GetValue(Enemy_Ammo_Angle, iea) ))* Enemy_Ammospeed)
    Enemy_Ammox = Shapes.GetLeft(Array.GetValue(Enemy_Ammo, iea)) +dx+incbx
    Enemy_Ammoy = Shapes.GetTop(Array.GetValue(Enemy_Ammo, iea)) +dy+incby*0.1
    Shapes.Move(Array.GetValue(Enemy_Ammo, iea), Enemy_Ammox, Enemy_Ammoy)
    Array.SetValue(Enemy_AmmoAge, iea, Array.GetValue(Enemy_AmmoAge, iea) + 1)
    EndFor

    ‘ move ennemies
    For i=1 To enemy_Count
    ‘ move as TimeLine and Path say
    eNBR= Array.GetValue(enemy_PathNBR,i)
    uu =Array.GetValue(enemy_line,i)
    Time= Array.GetValue(enemy_TimeLine, i)
    etl=enemyPath[eNBR][1][uu]  ‘enemy own timeLine
    IF (Time=etl) Then  ‘it’s time to rotate enemy
    rr = enemyPath[eNBR][2][uu+1]
    Shapes.Rotate(Array.GetValue(enemy_Array,i),rr)
    EndIf
    IF (Time > etl)  Then
    uu = uu+1
    Array.SetValue(enemy_line,i,uu)    ‘ next line for enemy move
    EndIf
    xx1=Array.GetValue(enemy_PosX,i)
    yy1= Array.GetValue(enemy_PosY,i)
    xx = xx1+enemyPath[eNBR][3][uu]+incbx
    yy = yy1+enemyPath[eNBR][4][uu]+incby*0.1
    ‘ Randomly fire-enemy
    If (Math.GetRandomNumber(Enemy_Agresivity)=1) Then
    Enemy_ShootX = xx1 + 16
    Enemy_ShootY = yy1 + 4
    If (yy1 > 0 AND xx1 > 0 And yy1< gameHeight And xx1 < gameWidth) then
    ‘this avoid enemy fire from outside the screen
    fire_Enemy()
    Endif
    EndIf

    Shapes.Move(Array.GetValue(enemy_Array,i),xx,yy)
    Array.SetValue(enemy_PosX,i,xx)
    Array.SetValue(enemy_PosY,i,yy)
    Array.SetValue(enemy_TimeLine, i, Time + 1)
    If ((uu > enemyPath[eNBR][0][0]) And (Time > etl)) Then ‘ if last timelife remove the enemy sprite
    next_enemy_remove = i
    remove_enemy()
    endif
    Collision_pbe()
    Collision_ep()
    EndFor

    EndSub

    Sub RemovePlayer_Ammo
    Shapes.Remove(Array.GetValue(Player_Ammo, Player_Ammo_nextRemove))
    For iz = Player_Ammo_nextRemove To Player_AmmoCount – 1
    Array.SetValue(Player_Ammo, iz, Array.GetValue(Player_Ammo, iz+1))
    Array.SetValue(Player_AmmoAge, iz, Array.GetValue(Player_AmmoAge, iz+1))
    EndFor
    Array.RemoveValue(Player_Ammo, Player_AmmoCount)
    Array.RemoveValue(Player_AmmoAge, Player_AmmoCount)
    Player_AmmoCount = Player_AmmoCount – 1
    EndSub

    Sub RemoveEnemy_Ammo
    Shapes.Remove(Array.GetValue(Enemy_Ammo, Enemy_Ammo_nextRemove))
    For irea = Enemy_Ammo_nextRemove To Enemy_AmmoCount – 1
    Array.SetValue(Enemy_Ammo, irea, Array.GetValue(Enemy_Ammo, irea+1))
    Array.SetValue(Enemy_AmmoAge, irea, Array.GetValue(Enemy_AmmoAge, irea+1))
    Array.SetValue(Enemy_Ammo_Angle, irea, Array.GetValue(Enemy_Ammo_Angle,irea+1))

    EndFor
    Array.RemoveValue(Enemy_Ammo, Enemy_AmmoCount)
    Array.RemoveValue(Enemy_AmmoAge, Enemy_AmmoCount)
    Array.RemoveValue(Enemy_Ammo_Angle,Enemy_AmmoCount)
    Enemy_AmmoCount = Enemy_AmmoCount – 1
    EndSub

    Sub fire
    ‘ Remove additional player Ammo
    While(Player_AmmoCount > Player_AmmoMax )
    Player_Ammo_nextRemove = 1
    RemovePlayer_Ammo()
    EndWhile

    ‘ Add the player Ammo

    Player_AmmoCount = Player_AmmoCount + 1
    Array.SetValue(Player_Ammo, Player_AmmoCount, Shapes.AddImage(bullet0))
    Shapes.Move(Array.GetValue(Player_Ammo, Player_AmmoCount), ShootX, ShootY)
    EndSub

    Sub fire_Enemy
    ‘ Remove additional Enemy Ammo
    While(Enemy_AmmoCount > (Enemy_AmmoMax – 1))
    Enemy_Ammo_nextRemove = 1
    RemoveEnemy_Ammo()
    EndWhile

    ‘ Add the Enemy Ammo

    Enemy_AmmoCount = Enemy_AmmoCount + 1
    Array.SetValue(Enemy_Ammo, Enemy_AmmoCount, Shapes.AddImage(Enemy_bullet))
    Array.SetValue(Enemy_Ammo_Angle, Enemy_AmmoCount,Math.ArcTan((paddleX- Enemy_ShootX+player_size/2)/(paddleY-Enemy_ShootY)))
    Shapes.Move(Array.GetValue(Enemy_Ammo, Enemy_AmmoCount), Enemy_ShootX, Enemy_ShootY)
    EndSub

    ‘Check playerammo age
    Sub AgePlayer_Ammo
    While (Array.GetValue(Player_AmmoAge, 1) > Player_AmmoLife)
    Player_Ammo_nextRemove = 1
    RemovePlayer_Ammo()
    EndWhile
    EndSub
    ‘Check enemy ammo age
    Sub AgeEnemy_Ammo
    While (Array.GetValue(Enemy_AmmoAge, 1) > Enemy_AmmoLife)
    Enemy_Ammo_nextRemove = 1
    RemoveEnemy_Ammo()
    EndWhile
    EndSub

    Sub remove_enemy
    Shapes.remove(Array.GetValue(enemy_Array,next_enemy_remove))
    ‘ Remove all references from the arrays
    For ii = next_enemy_remove To enemy_Count – 1
    Array.SetValue(enemy_Array, ii, Array.GetValue(enemy_Array, ii+1))
    Array.SetValue(enemy_line, ii, Array.GetValue(enemy_line, ii+1))
    Array.SetValue(enemy_PosX, ii, Array.GetValue(enemy_PosX, ii+1))
    Array.SetValue(enemy_PosY, ii, Array.GetValue(enemy_PosY, ii+1))
    Array.SetValue(enemy_TimeLine, ii, Array.GetValue(enemy_TimeLine, ii+1))
    Array.SetValue(enemy_PathNBR, ii , Array.GetValue(enemy_PathNBR, ii+1))
    EndFor
    Array.RemoveValue(enemy_Array, enemy_Count)
    Array.RemoveValue(enemy_line, enemy_Count)
    Array.RemoveValue(enemy_PosX, enemy_Count)
    Array.RemoveValue(enemy_PosY, enemy_Count)
    Array.RemoveValue(enemy_TimeLine, enemy_Count)
    Array.RemoveValue(enemy_PathNBR,enemy_Count)
    enemy_Count = enemy_Count – 1
    EndSub

    Sub create_enemies_left

    TimeLine1 =0
    For i=1 To enemy_Nbr
    enemy_Count= enemy_Count + 1
    Array.SetValue(enemy_PathNBR,enemy_Count,pathNBR)
    If (enemy_type = 2) Then
    Array.SetValue(enemy_Array, enemy_Count,Shapes.AddImage(enemy2))
    Else
    Array.SetValue(enemy_Array, enemy_Count,Shapes.AddImage(enemy))
    EndIf
    Array.SetValue(enemy_line,enemy_Count,1)
    Array.SetValue(enemy_PosX, enemy_Count,enemyPosX1)
    Array.SetValue(enemy_PosY, enemy_Count,enemyPosY1)
    Array.SetValue(enemy_TimeLine, enemy_Count, TimeLine1)

    enemyPosX1 = enemyPosX1 – 64 ‘distance between ennemies
    TimeLine1 = TimeLine1 – 64 / enemy_speed
    EndFor
    For i=(enemy_Count-enemy_Nbr+1) To enemy_Count
    xxx=Array.GetValue(enemy_PosX,i)
    yyy= Array.GetValue(enemy_PosY,i)
    Shapes.Move(Array.GetValue(enemy_Array,i),xxx,yyy)
    EndFor
    EndSub
    Sub create_enemies_right

    TimeLine1 =0
    For i=1 To enemy_Nbr
    enemy_Count= enemy_Count + 1
    Array.SetValue(enemy_PathNBR,enemy_Count,pathNBR)
    Array.SetValue(enemy_Array, enemy_Count,Shapes.AddImage(enemy))
    Array.SetValue(enemy_line,enemy_Count,1)
    Array.SetValue(enemy_PosX, enemy_Count,enemyPosX1)
    Array.SetValue(enemy_PosY, enemy_Count,enemyPosY1)
    Array.SetValue(enemy_TimeLine, enemy_Count, TimeLine1)

    enemyPosX1 = enemyPosX1 + 64 ‘distance between ennemies
    TimeLine1 = TimeLine1 – 64 / enemy_speed
    EndFor
    For i=(enemy_Count-enemy_Nbr+1) To enemy_Count
    xxx=Array.GetValue(enemy_PosX,i)
    yyy= Array.GetValue(enemy_PosY,i)
    Shapes.Move(Array.GetValue(enemy_Array,i),xxx,yyy)
    EndFor
    EndSub
    Sub Collision_pbe   ‘for player-bullet and enemies

    For i1 = 1 To Player_AmmoCount
    ‘ player bullet position
    Player_Ammox = Shapes.GetLeft(Array.GetValue(Player_Ammo, i1))
    Player_Ammoy = Shapes.GetTop(Array.GetValue(Player_Ammo, i1))
    px1=Player_Ammox+player_bullet_size/3   ‘in order to have a more precise collison than the bullet image size
    py1=Player_Ammoy+player_bullet_size/3
    px2=px1+2*player_bullet_size/3
    py2=py1+2*player_bullet_size/3

    For i2 = 1 to enemy_Count
    ‘ enemy position

    ax1=Array.GetValue(enemy_PosX,i2)+enemy_size/4
    ay1=Array.GetValue(enemy_PosY,i2)+enemy_size/4

    ax2=ax1+3*enemy_size/4
    ay2=ay1+3*enemy_size/4

    If ( (ax1 < px1 And ax2 > px1) Or (ax1 < px2 And ax2 > px2) ) Then
    If ( (ay1 < py1 And ay2 > py1) Or (ay1 < py2 And ay2 > py2) ) Then
    ‘ collision between enemy nbr i2 and player bullet i
    ‘ remove bullet i and animate explosion and remove enemy i2
    Player_Ammo_nextRemove = i1
    RemovePlayer_Ammo()
    next_enemy_remove = i2
    remove_enemy()
    ‘ begin animation for explosion at coordinate ax1, ay1
    toto= Shapes.AddImage(enemy_expl1)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(30)
    Shapes.Remove(toto)
    toto= Shapes.AddImage(enemy_expl2)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(30)
    Shapes.Remove(toto)
    score = score +100
    EndIf
    EndIf
    EndFor

    Endfor

    EndSub

    Sub Collision_ep   ‘for enemies and player
    px1 = Shapes.GetLeft(player)
    py1 = Shapes.GetTop(player)
    px2 = px1 + player_size
    py2 = py1 + player_size

    ‘Shapes.Move(Shapes.AddRectangle(px2-px1 ,py2-py1), px1, py1)
    For i2 = 1 to enemy_Count
    ‘ enemy position

    ax1=Array.GetValue(enemy_PosX,i2)
    ay1=Array.GetValue(enemy_PosY,i2)

    ax2=ax1+enemy_size
    ay2=ay1+enemy_size
    ‘Shapes.Move(Shapes.AddRectangle(ax2-ax1 ,ay2-ay1), ax1, ay1)

    If ( (px1 < ax1 And px2 > ax1) Or (px1 < ax2 And px2 > ax2) ) Then
    If ( (py1 < ay1 And py2 > ay1) Or (py1 < ay2 And py2 > ay2) ) Then
    ‘ collision between enemy nbr i2 and player
    ‘ animate explosion and decrease lives
    next_enemy_remove = i2
    remove_enemy()
    ‘ begin animation for explosion at coordinate ax1, ay1
    toto= Shapes.AddImage(enemy_expl1)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(30)
    Shapes.Remove(toto)
    toto= Shapes.AddImage(player_expl)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(300)
    Shapes.Remove(toto)
    Player_Lives = Player_Lives -1
    If (Player_Lives = 0) THEN
    Program.End()
    EndIf
    EndIf
    EndIf
    EndFor
    px1 = paddleX
    py1 = paddleY
    px2 = px1 + player_size
    py2 = py1 + player_size
    ‘Shapes.Move(Shapes.AddRectangle(px2-px1 ,py2-py1), px1, py1)
    For i3 = 1 to Enemy_AmmoCount
    ‘ enemy position

    ax1=Shapes.GetLeft(Array.GetValue(enemy_Ammo,i3))
    ay1=Shapes.GetTop(Array.GetValue(enemy_Ammo,i3))

    ax2=ax1+enemy_ammo_size
    ay2=ay1+enemy_ammo_size
    ‘Shapes.Move(Shapes.AddRectangle(ax2-ax1 ,ay2-ay1), ax1, ay1)

    If ( (px1 < ax1 And px2 > ax1) Or (px1 < ax2 And px2 > ax2) ) Then
    If ( (py1 < ay1 And py2 > ay1) Or (py1 < ay2 And py2 > ay2) ) Then
    ‘ collision between enemy ammo nbr i3 and player
    ‘ animate explosion and decrease lives
    Enemy_Ammo_nextRemove = i3
    RemoveEnemy_Ammo()

    ‘ begin animation for explosion at coordinate ax1, ay1
    toto= Shapes.AddImage(enemy_expl1)
    Shapes.move(toto,paddleX+ player_size/2,paddleY+ player_size/2)
    Program.Delay(30)
    Shapes.Remove(toto)
    toto= Shapes.AddImage(player_expl)
    Shapes.move(toto,paddleX+ player_size/2,paddleY+ player_size/2)
    Program.Delay(300)
    Shapes.Remove(toto)
    Player_Lives = Player_Lives -1
    If (Player_Lives = 0) THEN
    Program.End()
    EndIf
    EndIf
    EndIf
    EndFor

    EndSub

    Sub IslandsPosition
    ‘ island positions, avoid randomGeneration and islands overlap
    islandPos[0][1]=1
    islandPos[0][2]=0
    islandPos[0][3]=-150

    islandPos[1][1]=1
    islandPos[1][2]=-Math.Round(gameWidth/2)
    islandPos[1][3]=-150

    islandPos[2][1]=2
    islandPos[2][2]=-2*Math.Round(gameWidth/3)
    islandPos[2][3]=-150

    islandPos[3][1]=1
    islandPos[3][2]=2*Math.Round(gameWidth/3)
    islandPos[3][3]=-150

    islandPos[4][1]=2
    islandPos[4][2]=gameWidth
    islandPos[4][3]=-150

    islandPos[5][1]=3
    islandPos[5][2]=Math.Round(gameWidth/3)
    islandPos[5][3]=-150

    islandPos[6][1]=3
    islandPos[6][2]=-gameWidth
    islandPos[6][3]=-150
    EndSub

    Sub define_paths
    enemyPath[0][0][0] = 3  ‘nbr of strait lines of path
    enemyPath[0][1][1] = 30  ‘from 0 to this in timeline
    enemyPath[0][1][2] = 100 ‘ from this to next in timeline
    enemyPath[0][1][3] = 400   ‘sprite goes up

    enemyPath[0][2][1] = 0 ‘first line rotation = 0
    enemyPath[0][2][2] = 45 ‘ second line rotation = 45
    enemyPath[0][2][3] = 45

    enemyPath[0][3][1] = enemy_speed ‘ first line x movment
    enemyPath[0][3][2] = enemy_speed ‘second line x movment
    enemyPath[0][3][3] = enemy_speed ‘ third line …

    enemyPath[0][4][1] = 0 ‘ first line y movment
    enemyPath[0][4][2] = enemy_speed
    enemyPath[0][4][3] = enemy_speed
    ‘———- second path
    enemyPath[1][0][0] = 4
    enemyPath[1][1][1] = 1
    enemyPath[1][1][2] = 1
    enemyPath[1][1][3] = 100
    enemyPath[1][1][4] = 400

    enemyPath[1][2][1] = 180
    enemyPath[1][2][2] = 135
    enemyPath[1][2][3] = 135
    enemyPath[1][2][4] = 90

    enemyPath[1][3][1] = -enemy_speed
    enemyPath[1][3][2] = -enemy_speed
    enemyPath[1][3][3] = -enemy_speed
    enemyPath[1][3][4] = 0

    enemyPath[1][4][1] = 0
    enemyPath[1][4][2] = 0
    enemyPath[1][4][3] = enemy_speed
    enemyPath[1][4][4] = enemy_speed
    ‘round r=5
    enemyPath[2][0][0]=21
    enemyPath[2][1][1]=50
    enemyPath[2][1][2]=55
    enemyPath[2][1][3]=60
    enemyPath[2][1][4]=65
    enemyPath[2][1][5]=70
    enemyPath[2][1][6]=75
    enemyPath[2][1][7]=80
    enemyPath[2][1][8]=85
    enemyPath[2][1][9]=90
    enemyPath[2][1][10]=95
    enemyPath[2][1][11]=100
    enemyPath[2][1][12]=105
    enemyPath[2][1][13]=110
    enemyPath[2][1][14]=115
    enemyPath[2][1][15]=120
    enemyPath[2][1][16]=125
    enemyPath[2][1][17]=130
    enemyPath[2][1][18]=135
    enemyPath[2][1][19]=140
    enemyPath[2][1][20]=145
    enemyPath[2][1][21]=350
    enemyPath[2][2][1]=0
    enemyPath[2][2][2]=18
    enemyPath[2][2][3]=36
    enemyPath[2][2][4]=54
    enemyPath[2][2][5]=72
    enemyPath[2][2][6]=90
    enemyPath[2][2][7]=108
    enemyPath[2][2][8]=126
    enemyPath[2][2][9]=144
    enemyPath[2][2][10]=162
    enemyPath[2][2][11]=180
    enemyPath[2][2][12]=198
    enemyPath[2][2][13]=216
    enemyPath[2][2][14]=234
    enemyPath[2][2][15]=252
    enemyPath[2][2][16]=-90
    enemyPath[2][2][17]=-72
    enemyPath[2][2][18]=-54
    enemyPath[2][2][19]=-36
    enemyPath[2][2][20]=-18
    enemyPath[2][2][21]=0
    enemyPath[2][3][1]=enemy_speed
    enemyPath[2][3][2]=0.95*enemy_speed
    enemyPath[2][3][3]=0.81*enemy_speed
    enemyPath[2][3][4]=0.59*enemy_speed
    enemyPath[2][3][5]=0.31*enemy_speed
    enemyPath[2][3][6]=0
    enemyPath[2][3][7]=-0.31*enemy_speed
    enemyPath[2][3][8]=-0.59*enemy_speed
    enemyPath[2][3][9]=-0.81*enemy_speed
    enemyPath[2][3][10]=-0.95*enemy_speed
    enemyPath[2][3][11]=-enemy_speed
    enemyPath[2][3][12]=-0.95*enemy_speed
    enemyPath[2][3][13]=-0.81*enemy_speed
    enemyPath[2][3][14]=-0.59*enemy_speed
    enemyPath[2][3][15]=-0.31*enemy_speed
    enemyPath[2][3][16]=0
    enemyPath[2][3][17]=0.31*enemy_speed
    enemyPath[2][3][18]=0.59*enemy_speed
    enemyPath[2][3][19]=0.81*enemy_speed
    enemyPath[2][3][20]=0.95*enemy_speed
    enemyPath[2][3][21]=enemy_speed
    enemyPath[2][4][1]=0
    enemyPath[2][4][2]=0.31*enemy_speed
    enemyPath[2][4][3]=0.59*enemy_speed
    enemyPath[2][4][4]=0.81*enemy_speed
    enemyPath[2][4][5]=0.95*enemy_speed
    enemyPath[2][4][6]=enemy_speed
    enemyPath[2][4][7]=0.95*enemy_speed
    enemyPath[2][4][8]=0.81*enemy_speed
    enemyPath[2][4][9]=0.59*enemy_speed
    enemyPath[2][4][10]=0.31*enemy_speed
    enemyPath[2][4][11]=0
    enemyPath[2][4][12]=-0.31*enemy_speed
    enemyPath[2][4][13]=-0.59*enemy_speed
    enemyPath[2][4][14]=-0.81*enemy_speed
    enemyPath[2][4][15]=-0.95*enemy_speed
    enemyPath[2][4][16]=-enemy_speed
    enemyPath[2][4][17]=-0.95*enemy_speed
    enemyPath[2][4][18]=-0.81*enemy_speed
    enemyPath[2][4][19]=-0.59*enemy_speed
    enemyPath[2][4][20]=-0.31*enemy_speed
    enemyPath[2][4][21]=0
    ‘round r=20
    enemyPath[3][0][0]=21
    enemyPath[3][1][1]=120
    enemyPath[3][1][2]=140
    enemyPath[3][1][3]=160
    enemyPath[3][1][4]=180
    enemyPath[3][1][5]=200
    enemyPath[3][1][6]=220
    enemyPath[3][1][7]=240
    enemyPath[3][1][8]=260
    enemyPath[3][1][9]=280
    enemyPath[3][1][10]=300
    enemyPath[3][1][11]=320
    enemyPath[3][1][12]=340
    enemyPath[3][1][13]=360
    enemyPath[3][1][14]=380
    enemyPath[3][1][15]=400
    enemyPath[3][1][16]=420
    enemyPath[3][1][17]=440
    enemyPath[3][1][18]=460
    enemyPath[3][1][19]=480
    enemyPath[3][1][20]=500
    enemyPath[3][1][21]=600
    enemyPath[3][2][1]=0
    enemyPath[3][2][2]=18
    enemyPath[3][2][3]=36
    enemyPath[3][2][4]=54
    enemyPath[3][2][5]=72
    enemyPath[3][2][6]=90
    enemyPath[3][2][7]=108
    enemyPath[3][2][8]=126
    enemyPath[3][2][9]=144
    enemyPath[3][2][10]=162
    enemyPath[3][2][11]=180
    enemyPath[3][2][12]=198
    enemyPath[3][2][13]=216
    enemyPath[3][2][14]=234
    enemyPath[3][2][15]=252
    enemyPath[3][2][16]=-90
    enemyPath[3][2][17]=-72
    enemyPath[3][2][18]=-54
    enemyPath[3][2][19]=-36
    enemyPath[3][2][20]=-18
    enemyPath[3][2][21]=0
    enemyPath[3][3][1]=enemy_speed
    enemyPath[3][3][2]=0.95*enemy_speed
    enemyPath[3][3][3]=0.81*enemy_speed
    enemyPath[3][3][4]=0.59*enemy_speed
    enemyPath[3][3][5]=0.31*enemy_speed
    enemyPath[3][3][6]=0
    enemyPath[3][3][7]=-0.31*enemy_speed
    enemyPath[3][3][8]=-0.59*enemy_speed
    enemyPath[3][3][9]=-0.81*enemy_speed
    enemyPath[3][3][10]=-0.95*enemy_speed
    enemyPath[3][3][11]=-enemy_speed
    enemyPath[3][3][12]=-0.95*enemy_speed
    enemyPath[3][3][13]=-0.81*enemy_speed
    enemyPath[3][3][14]=-0.59*enemy_speed
    enemyPath[3][3][15]=-0.31*enemy_speed
    enemyPath[3][3][16]=0
    enemyPath[3][3][17]=0.31*enemy_speed
    enemyPath[3][3][18]=0.59*enemy_speed
    enemyPath[3][3][19]=0.81*enemy_speed
    enemyPath[3][3][20]=0.95*enemy_speed
    enemyPath[3][3][21]=enemy_speed
    enemyPath[3][4][1]=0
    enemyPath[3][4][2]=0.31*enemy_speed
    enemyPath[3][4][3]=0.59*enemy_speed
    enemyPath[3][4][4]=0.81*enemy_speed
    enemyPath[3][4][5]=0.95*enemy_speed
    enemyPath[3][4][6]=enemy_speed
    enemyPath[3][4][7]=0.95*enemy_speed
    enemyPath[3][4][8]=0.81*enemy_speed
    enemyPath[3][4][9]=0.59*enemy_speed
    enemyPath[3][4][10]=0.31*enemy_speed
    enemyPath[3][4][11]=0
    enemyPath[3][4][12]=-0.31*enemy_speed
    enemyPath[3][4][13]=-0.59*enemy_speed
    enemyPath[3][4][14]=-0.81*enemy_speed
    enemyPath[3][4][15]=-0.95*enemy_speed
    enemyPath[3][4][16]=-enemy_speed
    enemyPath[3][4][17]=-0.95*enemy_speed
    enemyPath[3][4][18]=-0.81*enemy_speed
    enemyPath[3][4][19]=-0.59*enemy_speed
    enemyPath[3][4][20]=-0.31*enemy_speed
    enemyPath[3][4][21]=0

    ‘round r=10
    enemyPath[4][0][0]=21
    enemyPath[4][1][1]=110
    enemyPath[4][1][2]=120
    enemyPath[4][1][3]=130
    enemyPath[4][1][4]=140
    enemyPath[4][1][5]=150
    enemyPath[4][1][6]=160
    enemyPath[4][1][7]=170
    enemyPath[4][1][8]=180
    enemyPath[4][1][9]=190
    enemyPath[4][1][10]=200
    enemyPath[4][1][11]=210
    enemyPath[4][1][12]=220
    enemyPath[4][1][13]=230
    enemyPath[4][1][14]=240
    enemyPath[4][1][15]=250
    enemyPath[4][1][16]=260
    enemyPath[4][1][17]=270
    enemyPath[4][1][18]=280
    enemyPath[4][1][19]=290
    enemyPath[4][1][20]=300
    enemyPath[4][1][21]=500
    enemyPath[4][2][1]=0
    enemyPath[4][2][2]=18
    enemyPath[4][2][3]=36
    enemyPath[4][2][4]=54
    enemyPath[4][2][5]=72
    enemyPath[4][2][6]=90
    enemyPath[4][2][7]=108
    enemyPath[4][2][8]=126
    enemyPath[4][2][9]=144
    enemyPath[4][2][10]=162
    enemyPath[4][2][11]=180
    enemyPath[4][2][12]=198
    enemyPath[4][2][13]=216
    enemyPath[4][2][14]=234
    enemyPath[4][2][15]=252
    enemyPath[4][2][16]=-90
    enemyPath[4][2][17]=-72
    enemyPath[4][2][18]=-54
    enemyPath[4][2][19]=-36
    enemyPath[4][2][20]=-18
    enemyPath[4][2][21]=0
    enemyPath[4][3][1]=enemy_speed
    enemyPath[4][3][2]=0.95*enemy_speed
    enemyPath[4][3][3]=0.81*enemy_speed
    enemyPath[4][3][4]=0.59*enemy_speed
    enemyPath[4][3][5]=0.31*enemy_speed
    enemyPath[4][3][6]=0
    enemyPath[4][3][7]=-0.31*enemy_speed
    enemyPath[4][3][8]=-0.59*enemy_speed
    enemyPath[4][3][9]=-0.81*enemy_speed
    enemyPath[4][3][10]=-0.95*enemy_speed
    enemyPath[4][3][11]=-enemy_speed
    enemyPath[4][3][12]=-0.95*enemy_speed
    enemyPath[4][3][13]=-0.81*enemy_speed
    enemyPath[4][3][14]=-0.59*enemy_speed
    enemyPath[4][3][15]=-0.31*enemy_speed
    enemyPath[4][3][16]=0
    enemyPath[4][3][17]=0.31*enemy_speed
    enemyPath[4][3][18]=0.59*enemy_speed
    enemyPath[4][3][19]=0.81*enemy_speed
    enemyPath[4][3][20]=0.95*enemy_speed
    enemyPath[4][3][21]=enemy_speed
    enemyPath[4][4][1]=0
    enemyPath[4][4][2]=0.31*enemy_speed
    enemyPath[4][4][3]=0.59*enemy_speed
    enemyPath[4][4][4]=0.81*enemy_speed
    enemyPath[4][4][5]=0.95*enemy_speed
    enemyPath[4][4][6]=enemy_speed
    enemyPath[4][4][7]=0.95*enemy_speed
    enemyPath[4][4][8]=0.81*enemy_speed
    enemyPath[4][4][9]=0.59*enemy_speed
    enemyPath[4][4][10]=0.31*enemy_speed
    enemyPath[4][4][11]=0
    enemyPath[4][4][12]=-0.31*enemy_speed
    enemyPath[4][4][13]=-0.59*enemy_speed
    enemyPath[4][4][14]=-0.81*enemy_speed
    enemyPath[4][4][15]=-0.95*enemy_speed
    enemyPath[4][4][16]=-enemy_speed
    enemyPath[4][4][17]=-0.95*enemy_speed
    enemyPath[4][4][18]=-0.81*enemy_speed
    enemyPath[4][4][19]=-0.59*enemy_speed
    enemyPath[4][4][20]=-0.31*enemy_speed
    enemyPath[4][4][21]=0

    ‘round r=15 + exit down
    enemyPath[5][0][0]=27
    enemyPath[5][1][1]=120
    enemyPath[5][1][2]=125
    enemyPath[5][1][3]=150
    enemyPath[5][1][4]=165
    enemyPath[5][1][5]=180
    enemyPath[5][1][6]=195
    enemyPath[5][1][7]=210
    enemyPath[5][1][8]=225
    enemyPath[5][1][9]=240
    enemyPath[5][1][10]=255
    enemyPath[5][1][11]=270
    enemyPath[5][1][12]=285
    enemyPath[5][1][13]=300
    enemyPath[5][1][14]=315
    enemyPath[5][1][15]=330
    enemyPath[5][1][16]=345
    enemyPath[5][1][17]=360
    enemyPath[5][1][18]=375
    enemyPath[5][1][19]=390
    enemyPath[5][1][20]=405
    enemyPath[5][1][21]=600
    enemyPath[5][1][22]=615
    enemyPath[5][1][23]=630
    enemyPath[5][1][24]=645
    enemyPath[5][1][254]=660
    enemyPath[5][1][26]=675
    enemyPath[5][1][27]=800

    enemyPath[5][2][1]=0
    enemyPath[5][2][2]=18
    enemyPath[5][2][3]=36
    enemyPath[5][2][4]=54
    enemyPath[5][2][5]=72
    enemyPath[5][2][6]=90
    enemyPath[5][2][7]=108
    enemyPath[5][2][8]=126
    enemyPath[5][2][9]=144
    enemyPath[5][2][10]=162
    enemyPath[5][2][11]=180
    enemyPath[5][2][12]=198
    enemyPath[5][2][13]=216
    enemyPath[5][2][14]=234
    enemyPath[5][2][15]=252
    enemyPath[5][2][16]=-90
    enemyPath[5][2][17]=-72
    enemyPath[5][2][18]=-54
    enemyPath[5][2][19]=-36
    enemyPath[5][2][20]=-18
    enemyPath[5][2][21]=0

    enemyPath[5][2][22]=18
    enemyPath[5][2][23]=36
    enemyPath[5][2][24]=54
    enemyPath[5][2][25]=72
    enemyPath[5][2][26]=90
    enemyPath[5][2][27]=90

    enemyPath[5][3][1]=enemy_speed
    enemyPath[5][3][2]=0.95*enemy_speed
    enemyPath[5][3][3]=0.81*enemy_speed
    enemyPath[5][3][4]=0.59*enemy_speed
    enemyPath[5][3][5]=0.31*enemy_speed
    enemyPath[5][3][6]=0
    enemyPath[5][3][7]=-0.31*enemy_speed
    enemyPath[5][3][8]=-0.59*enemy_speed
    enemyPath[5][3][9]=-0.81*enemy_speed
    enemyPath[5][3][10]=-0.95*enemy_speed
    enemyPath[5][3][11]=-enemy_speed
    enemyPath[5][3][12]=-0.95*enemy_speed
    enemyPath[5][3][13]=-0.81*enemy_speed
    enemyPath[5][3][14]=-0.59*enemy_speed
    enemyPath[5][3][15]=-0.31*enemy_speed
    enemyPath[5][3][16]=0
    enemyPath[5][3][17]=0.31*enemy_speed
    enemyPath[5][3][18]=0.59*enemy_speed
    enemyPath[5][3][19]=0.81*enemy_speed
    enemyPath[5][3][20]=0.95*enemy_speed
    enemyPath[5][3][21]=enemy_speed
    enemyPath[5][3][22]=0.95*enemy_speed
    enemyPath[5][3][23]=0.81*enemy_speed
    enemyPath[5][3][24]=0.59*enemy_speed
    enemyPath[5][3][25]=0.31*enemy_speed
    enemyPath[5][3][26]=0
    enemyPath[5][3][27]=0

    enemyPath[5][4][1]=0
    enemyPath[5][4][2]=0.31*enemy_speed
    enemyPath[5][4][3]=0.59*enemy_speed
    enemyPath[5][4][4]=0.81*enemy_speed
    enemyPath[5][4][5]=0.95*enemy_speed
    enemyPath[5][4][6]=enemy_speed
    enemyPath[5][4][7]=0.95*enemy_speed
    enemyPath[5][4][8]=0.81*enemy_speed
    enemyPath[5][4][9]=0.59*enemy_speed
    enemyPath[5][4][10]=0.31*enemy_speed
    enemyPath[5][4][11]=0
    enemyPath[5][4][12]=-0.31*enemy_speed
    enemyPath[5][4][13]=-0.59*enemy_speed
    enemyPath[5][4][14]=-0.81*enemy_speed
    enemyPath[5][4][15]=-0.95*enemy_speed
    enemyPath[5][4][16]=-enemy_speed
    enemyPath[5][4][17]=-0.95*enemy_speed
    enemyPath[5][4][18]=-0.81*enemy_speed
    enemyPath[5][4][19]=-0.59*enemy_speed
    enemyPath[5][4][20]=-0.31*enemy_speed
    enemyPath[5][4][21]=0
    enemyPath[5][4][22]=0.31*enemy_speed
    enemyPath[5][4][23]=0.59*enemy_speed
    enemyPath[5][4][24]=0.81*enemy_speed
    enemyPath[5][4][25]=0.95*enemy_speed
    enemyPath[5][4][26]=enemy_speed
    enemyPath[5][4][27]=enemy_speed

    enemyPath[6][0][0]=3
    enemyPath[6][1][1]=1
    enemyPath[6][1][2]=80
    enemyPath[6][1][3]=200
    enemyPath[6][2][1]=0
    enemyPath[6][2][2]=90
    enemyPath[6][2][3]=-90
    enemyPath[6][3][1]=0
    enemyPath[6][3][2]=0
    enemyPath[6][3][3]=0
    enemyPath[6][4][1]=0
    enemyPath[6][4][2]=enemy_speed
    enemyPath[6][4][3]=-enemy_speed
    EndSub

    Sub create_level1   ‘this define the behavior of the différent squadron along the time play for level 1
    level1[1][1]=20    ‘when timeplay=level1[1][1]
    level1[1][2]= 2     ‘ lauch enemy with Path level1[1][2]
    level1[1][3]= -10   ‘ at x coordinate level1[1][3]
    level1[1][4] = 0      ‘ at y coordinate level1[1][4]
    level1[1][5] = 1      ‘ 1 for create enemy at the left side; 2 for the right side of screen
    level1[1][6] = 4      ‘level[1][6] is the number of enemies
    level1[1][7] = 1      ‘type of enemy

    level1[2][1]= 80
    level1[2][2]= 6
    level1[2][3]= gameWidth/2
    level1[2][4] = -500
    level1[2][5] = 1
    level1[2][6] = 3
    level1[2][7] = 1

    level1[3][1]= 150
    level1[3][2]= 0
    level1[3][3]= -10
    level1[3][4] = 0
    level1[3][5] = 1
    level1[3][6] = 6
    level1[3][7] = 2

    level1[4][1]= 280
    level1[4][2]= 4
    level1[4][3]= -10
    level1[4][4] = 0
    level1[4][5] = 1
    level1[4][6] = 3
    level1[4][7] = 2

    level1[5][1]= 410
    level1[5][2]= 6
    level1[5][3]= gameWidth/3
    level1[5][4] = -50
    level1[5][5] = 1
    level1[5][6] = 3
    level1[5][7] = 1

    level1[6][1]= 430
    level1[6][2]= 6
    level1[6][3]= 2*gameWidth/3
    level1[6][4] = -50
    level1[6][5] = 2
    level1[6][6] = 3
    level1[6][7] = 1

    level1[5][1]= 500
    level1[5][2]= 6
    level1[5][3]= gameWidth/3
    level1[5][4] = -50
    level1[5][5] = 1
    level1[5][6] = 6
    level1[5][7] = 2

    level1[6][1]= 590
    level1[6][2]= 5
    level1[6][3]= 100
    level1[6][4] = -80
    level1[6][5] = 1
    level1[6][6] = 3
    level1[6][7] = 3

    level1[7][1]= 690
    level1[7][2]= 6
    level1[7][3]= gameWidth/3
    level1[7][4] = -50
    level1[7][5] = 2
    level1[7][6] = 3
    level1[7][7] = 2
    For i= 1 To 10
    Level1[7+i][1]=700+50*i
    level1[7+i][2]= 6
    level1[7+i][3]=  math.GetrandomNumber(gameWidth)
    level1[7+i][4] = -50 +i
    level1[7+i][5] = math.GetrandomNumber(2)
    level1[7+i][6] = math.GetrandomNumber(3)
    level1[7+i][7] = math.GetrandomNumber(2)
    EndFor
    level1[18][1]= 1300
    level1[18][2]= 1
    level1[18][3]= gameWidth
    level1[18][4] = -10
    level1[18][5] = 2
    level1[18][6] = 6
    level1[18][7] = 2

    For i= 1 To 10
    Level1[18+i][1]=1330+50*i
    level1[18+i][2]= 4+math.GetrandomNumber(2)
    level1[18+i][3]=  math.GetrandomNumber(50)
    level1[18+i][4] = i
    level1[18+i][5] = 1
    level1[18+i][6] = math.GetrandomNumber(3)
    level1[18+i][7] = math.GetrandomNumber(2)
    EndFor
    For i= 1 To 10
    Level1[28+i][1]=1900+50*i
    level1[28+i][2]= 4+math.GetrandomNumber(2)
    level1[28+i][3]=  -math.GetrandomNumber(50)
    level1[28+i][4] = i
    level1[28+i][5] = 1
    level1[28+i][6] = math.GetrandomNumber(3)
    level1[28+i][7] = math.GetrandomNumber(2)
    EndFor
    For i= 1 To 10
    Level1[38+i][1]=2450+100*i
    level1[38+i][2]= 6
    level1[38+i][3]=  math.GetrandomNumber(gameWidth)
    level1[38+i][4] = -50 +i
    level1[38+i][5] = math.GetrandomNumber(2)
    level1[38+i][6] = math.GetrandomNumber(5)
    level1[38+i][7] = math.GetrandomNumber(2)
    EndFor

    EndSub

  2. // ‘ Copyright (c) Microsoft Corporation. All rights reserved.

TicTacToe v0.4- Copyright Nonki Takahashi (Microsoft Small Basic code)


a15

a16

Program Listing  MRB574

  1. ‘ TicTacToe v0.4

    ‘ RANDOM vs
    ‘ CENTER vs
    ‘ RUNORSTOP vs
    ‘ MONTECARLO vs
    ‘ HUMAN

    ‘ Copyright (c) 2010 NonkiTakahashi

    ‘ constants
    SPACE = 0 ‘ none
    TURN1 = 1 ‘ X
    TURN2 = 2 ‘ O
    OB = 3    ‘ out bound
    GMAX = 10 ‘ max number of games
    iRo = 3  ‘ number of ro (dimension)
    iNR = 0  ‘ number of record

    sVersion = “v0.4”  ‘ program version
    GraphicsWindow.Title = “TicTacToe ” + sVersion
    sFigure[1] = “X”
    sFigure[2] = “O”

    sEntry[1] = “HUMAN”
    sEntry[2] = “RANDOM”
    sEntry[3] = “CENTER”
    sEntry[4] = “RUNORSTOP”
    sEntry[5] = “MONTECARLO”
    iNE = 5  ‘ number of entries

    iTGMax = GMAX
    iE1 = 2
    iE2 = 2
    sPlayer[1] = sEntry[iE1]
    sPlayer[2] = sEntry[iE2]

    lMainMenu:
    GraphicsWindow.Clear()
    InitGame()
    If bStart <> “True” Then
    Program.End()
    EndIf

    GraphicsWindow.BrushColor = “SteelBlue”
    iSeed = 0
    bDebug = “False”

    lReplay:
    iT1 = 0 ‘ times X win
    iT2 = 0 ‘ times O win
    iTD = 0 ‘ times draw
    iTG = 0 ‘ times games
    iTW = 10 ‘ times work out for MONTECARLO

    lNextGame:
    GraphicsWindow.Clear()
    If iTG > 0 Then
    ShowResult()
    EndIf
    iS = 0  ‘ step
    InitBoard() ‘ initialize board
    SaveBoard() ‘ current board <- board
    DrawBoard()

    ‘ game start
    While “True”

    ‘ turn X (Player 1)
    iTurn = TURN1
    EachTurn()
    If sGame <> “continue” Then
    Goto lExit
    EndIf

    ‘ turn O (Player 2)
    iTurn = TURN2
    EachTurn()
    If sGame <> “continue” Then
    Goto lExit
    EndIf

    EndWhile

    lExit:
    GraphicsWindow.BrushColor = “SteelBlue”
    GraphicsWindow.DrawText(10, 10, sGame)
    If sGame = “X win” then
    GraphicsWindow.PenWidth = 2
    GraphicsWindow.PenColor = “SteelBlue”
    GraphicsWindow.DrawLine(iWX0, iWY0, iWX1, iWY1)
    iT1 = iT1 + 1
    ElseIf sGame = “O win” then
    GraphicsWindow.PenWidth = 2
    GraphicsWindow.PenColor = “SteelBlue”
    GraphicsWindow.DrawLine(iWX0, iWY0, iWX1, iWY1)
    iT2 = iT2 + 1
    Else
    iTD = iTD + 1
    EndIf
    iTG = iTG + 1
    If sGame = “X win” then
    Program.Delay(500)
    Else
    Program.Delay(1000)
    EndIf
    If iTG < iTGmax Then
    Goto lNextGame
    EndIf
    GraphicsWindow.BrushColor = “White”
    GraphicsWindow.FillRectangle(400, 20, 150, 150)
    GraphicsWindow.BrushColor = “SteelBlue”
    ShowResult()
    Continue()
    If bRestart Then
    Goto lReplay
    Else
    Goto lMainMenu
    EndIf

    ‘ EachTurn
    ‘ in: integer iTurn – 1 or 2
    ‘ in: string sPlayer[] – selected player
    Sub EachTurn
    GetPutList()  ‘ find next possible puts
    iS = iS + 1
    If sPlayer[iTurn] = “RANDOM” Then
    Random()
    ElseIf sPlayer[iTurn] = “CENTER” Then
    Center()
    ElseIf sPlayer[iTurn] = “RUNORSTOP” Then
    RunOrStop()
    ElseIf sPlayer[iTurn] = “MONTECARLO” Then
    WorkOut() ‘determine a from put list by MONTECARLO method
    ElseIf sPlayer[iTurn] = “HUMAN” Then
    Human()
    EndIf
    Sound.PlayClickAndWait()
    PutFigure()
    Record()    ‘ record game score
    RestoreBoard() ‘ board <- current board
    DrawBoard()
    Judge()
    EndSub

    ‘ Initialize Game
    ‘ work: integer iY1, iY2, iY3, iY4, iY5, idY
    Sub InitGame
    idY = 40
    iY1 = 50
    iY2 = iY1 + idY
    iY3 = iY2 + idY
    iY4 = iY3 + idY
    iY5 = iY4 + idY
    GraphicsWindow.FontSize = 18
    GraphicsWindow.BrushColor = “Black”
    GraphicsWindow.DrawBoundText(10, 10, 400, “TicTacToe ” + sVersion)
    GraphicsWindow.DrawText(10, iY1, “Main Menu”)
    GraphicsWindow.DrawText(10, iY2, “player 1 :”)
    GraphicsWindow.DrawText(10, iY3, “player 2 :”)
    GraphicsWindow.DrawText(10, iY4, “games :”)
    oTB1 = Controls.AddTextBox(120, iY2)
    oTB2 = Controls.AddTextBox(120, iY3)
    oTBG = Controls.AddTextBox(120, iY4)
    oBL1 = Controls.AddButton(“<“, 310, iY2)
    oBR1 = Controls.AddButton(“>”, 345, iY2)
    oBL2 = Controls.AddButton(“<“, 310, iY3)
    oBR2 = Controls.AddButton(“>”, 345, iY3)
    oBLG = Controls.AddButton(“<“, 310, iY4)
    oBRG = Controls.AddButton(“>”, 345, iY4)
    oBStart = Controls.AddButton(“Start”, 10, iY5)
    oBEnd = Controls.AddButton(“End”, 75, iY5)
    sPlayer[1] = sEntry[iE1]
    sPlayer[2] = sEntry[iE2]
    Controls.SetTextBoxText(oTB1, sPlayer[1])
    Controls.SetTextBoxText(oTB2, sPlayer[2])
    Controls.SetTextBoxText(oTBG, iTGMax)
    bStart = “”
    Controls.ButtonClicked = OnButtonClicked
    While bStart = “”
    Program.Delay(500)
    EndWhile
    EndSub

    Sub DrawGrid
    iX0 = 100
    iY0 = 100
    iX1 = 700
    iY1 = 500
    GraphicsWindow.PenColor = “Cyan”
    GraphicsWindow.PenWidth = 1
    For iX = iX0 To iX1 Step iX0
    For iY = iY0 To iY1 Step iY0
    GraphicsWindow.DrawLine(iX, 0, iX, iY1)
    GraphicsWindow.DrawLine(0, iY, iX1, iY)
    EndFor
    EndFor
    EndSub

    ‘ Continue ?
    Sub Continue
    iY1 = 200
    GraphicsWindow.FontSize = 18
    GraphicsWindow.BrushColor = “Black”
    oBC = Controls.AddButton(“Continue”, 400, iY1)
    oBM = Controls.AddButton(“Main”, 500, iY1)
    bRestart = “”
    Controls.ButtonClicked = OnButtonClicked2
    While bRestart = “”
    Program.Delay(500)
    EndWhile
    EndSub

    Sub OnButtonClicked
    oBu = Controls.LastClickedButton
    If oBu = oBStart Then
    bStart = “True”
    ElseIf oBu = oBEnd Then
    bStart = “False”
    ElseIf oBu = oBL1 Then
    iE1 = iE1 – 1
    If iE1 < 1 Then
    iE1 = iNE
    EndIf
    sPlayer[1] = sEntry[iE1]
    Controls.SetTextBoxText(oTB1, sPlayer[1])
    ElseIf oBu = oBR1 Then
    iE1 = iE1 + 1
    If iE1 > iNE Then
    iE1 = 1
    EndIf
    sPlayer[1] = sEntry[iE1]
    Controls.SetTextBoxText(oTB1, sPlayer[1])
    ElseIf oBu = oBL2 Then
    iE2 = iE2 – 1
    If iE2 < 1 Then
    iE2 = iNE
    EndIf
    sPlayer[2] = sEntry[iE2]
    Controls.SetTextBoxText(oTB2, sPlayer[2])
    ElseIf oBu = oBR2 Then
    iE2 = iE2 + 1
    If iE2 > iNE Then
    iE2 = 1
    EndIf
    sPlayer[2] = sEntry[iE2]
    Controls.SetTextBoxText(oTB2, sPlayer[2])
    ElseIf oBu = oBLG Then
    If itGMax > 1 Then
    iTGMax = iTGMax – 1
    Else
    iTGMax = GMAX
    EndIf
    Controls.SetTextBoxText(oTBG, iTGMax)
    ElseIf oBu = oBRG Then
    If iTGMax < GMAX Then
    iTGMax = iTGMax + 1
    Else
    iTGMax = 1
    EndIf
    Controls.SetTextBoxText(oTBG, iTGMax)
    EndIf
    EndSub

    Sub OnButtonClicked2
    oBu = Controls.LastClickedButton
    If oBu = oBC Then
    bRestart = “True”
    ElseIf oBu = oBM Then
    bRestart = “False”
    EndIf
    EndSub

    ‘ Player HUMAN
    ‘ in: integer iPX[], iPY[] – possible puts
    ‘ in: integer iNumPuts – entry count of possible puts
    ‘ work: integer i – index of possible puts
    ‘ work: integer iMX, iMY – mouse position
    ‘ out: integer iX, iY – next put
    Sub Human
    iX = iPX[1]
    iY = iPY[1]
    lCurrentMouse:
    Program.Delay(200)
    iMX = GraphicsWindow.MouseX
    iMY = GraphicsWindow.MouseY
    GetPosition()
    If Mouse.isLeftButtonDown Then
    Goto lCheckPut
    Else
    Goto lCurrentMouse
    EndIf
    lCheckPut:
    For i = 1 To iNumPuts
    If iPX[i] = iX And iPY[i] = iY Then
    Goto lReturnMouse
    EndIf
    EndFor
    Goto lCurrentMouse
    lReturnMouse:
    iX = iPX[i]
    iY = iPY[i]
    EndSub

    ‘ Get position of mouse clicked
    ‘ in: integer iMX, iMY – mouse position
    ‘ out: iX, iY – board position
    Sub GetPosition
    If iMX < 150 Then
    iX = 1
    ElseIf iMX < 250 Then
    iX = 2
    Else
    iX = 3
    EndIf
    If iMY < 150 Then
    iY = 1
    ElseIf iMY < 250 Then
    iY = 2
    Else
    iY = 3
    EndIf
    EndSub

    ‘ Record game score
    ‘ in: integer iX, iY – next put
    ‘ in: integer iS – stage
    ‘ out: iRX[], iRY[] – game score
    Sub Record
    iRX[iS] = iX
    iRY[iS] = iY
    EndSub

    ‘ Show game score to text window for debug
    ‘ in: integer iRX[], iRY[] – game score
    ‘ in: integer iS – put count (stage)
    ‘ work: integer i – index of game score
    Sub ShowRecord
    For i = 1 to iS
    TextWindow.Write(“[” + iRX[i] + “][” + iRY[i] + “],”)
    EndFor
    TextWindow.WriteLine(“”)
    EndSub

    ‘ Show possible puts list to text window for debug
    ‘ in: integer iNumPuts – entry count of possible puts
    ‘ in: integer iPX[], iPY[] – possible puts
    ‘ work: integer i – index of possible puts
    Sub ShowPutList
    For i = 1 To iNumPuts
    TextWindow.Write(“iPX[” + i + “]=” + iPX[i])
    TextWindow.WriteLine(“,iPY[” + i + “]=” + iPY[i])
    EndFor
    EndSub

    ‘ Save possible puts list
    ‘ in: integer iPX[], iPY[] – possible puts
    ‘ in: integer iNumPuts – entry count of possible puts
    ‘ work: integer i
    ‘ out: integer iSX[], iSX[] – saved possible puts
    ‘ out: integer iSNP – saved entry count of possible puts
    Sub SavePutList
    iSNP = iNumPuts
    For i = 1 To iSNP
    iSX[i] = iPX[i]
    iSY[i] = iPY[i]
    EndFor
    EndSub

    ‘ Restore possble puts list
    ‘ in: integer iSX[], iSY[] – saved possible puts
    ‘ in: integer iSNP – saved entry count of possible puts
    ‘ out: integer iPX[], iPY[] – (restored) possible puts
    ‘ out: iNumPuts – (restored) entry count of possible puts
    Sub RestorePutList
    iNumPuts = iSNP
    For i = 1 To iNumPuts
    iPX[i] = iSX[i]
    iPY[i] = iSY[i]
    EndFor
    EndSub

    ‘ Save current board
    ‘ in: integer iBoard[][] – board
    ‘ work: integer iX, iY
    ‘ out: integer iSaved[][] – saved current board
    Sub SaveBoard
    For iY = 1 To iRo
    For iX = 1 To iRo
    iSaved[iX][iY] = iBoard[iX][iY]
    EndFor
    EndFor
    EndSub

    ‘ Restore current board
    ‘ in: integer iRo – 3
    ‘ in: integer iSaved[] – saved current board
    ‘ work: integer iX, iY
    ‘ out: iBoard[] – (restored) board
    Sub RestoreBoard
    For iY = 1 To iRo
    For iX = 1 To iRo
    iBoard[iX][iY] = iSaved[iX][iY]
    EndFor
    EndFor
    EndSub

    ‘ Player MONTECARLO
    ‘ in: integer iS – stage
    ‘ in: integer iSNP – entry count of possible puts
    ‘ work: integer iSS – saved stage
    ‘ work: integer iTT – saved turn
    ‘ work: integer i – index of win counter
    ‘ work: integer iFP – first put
    ‘ work: integer iG – work out game count
    ‘ work: integer iTurn
    ‘ out: integer iX, iY
    Sub WorkOut
    SavePutList()
    iSS = iS ‘ save stage
    iTT = iTurn ‘ save turnFor i = 1 To iSNP ‘ instead of iNumPuts
    iWin[i] = 0 ‘ result clear
    EndFor
    For iG = 1 To iTW * iSNP
    iS = iSS – 1 ‘ temporaly stage
    RestoreBoard() ‘ board <- current board
    iTurn = TURN1
    If Math.Remainder(iS, 2) = 0 Then
    iTurn = TURN2
    Goto lNextO
    EndIf

    lNextX:
    ‘ turn X
    GetPutList()
    iS = iS + 1
    RunOrStop()
    If iS = iSS Then
    iFP = iNP ‘ first put
    EndIf
    iBoard[iX][iY] = TURN1
    Judge()
    If sGame <> “continue” Then
    Goto lEndGame
    EndIf

    lNextO:
    ‘ turn O
    GetPutList()
    iS = iS + 1
    RunOrStop()
    If iS = iSS Then
    iFP = iNP ‘ first put
    EndIf
    iBoard[iX][iY] = TURN2
    Judge()
    If sGame <> “continue” Then
    Goto lEndGame
    EndIf

    Goto lNextX

    lEndGame:
    If sGame = sFigure[iTurn] + ” win” Then
    iWin[iFP] = iWin[iFP] + 3 * (10 – iS)
    ElseIf sGame = “draw” then
    iWin[iFP] = iWin[iFP] + (10 – iS)
    Else
    iWin[iFP] = iWin[iFP] + 2 * (10 – iS)
    EndIf
    EndFor

    iMax = 0
    For i = 1 to iSNP ‘ instead of p
    If iWin[i] >= iMax Then
    iMax = iWin[i]
    iNP = i
    EndIf
    EndFor
    RestorePutList()
    iS = iSS ‘ restore stage
    iTurn = iTT ‘ restore turn
    iX = iPX[iNP]
    iY = iPY[iNP]
    EndSub

    ‘ Player RANDOM
    ‘ in: boolean bDebug – is debug ?
    ‘ in/out: integer iSeed – seed for random number debug version
    ‘ in: integer iNumPuts – number of possible puts
    ‘ work: integer iNP – index of possible puts
    ‘ out: integer iX, iY – next put
    Sub Random
    iNP = Math.GetRandomNumber(iNumPuts)
    If bDebug Then
    iSeed = iSeed + 1
    If iSeed > iNumPuts Then
    iSeed = 1
    EndIf
    iNP = iSeed
    EndIf
    iX = iPX[iNP]
    iY = iPY[iNP]
    EndSub

    ‘ Player CENTER
    ‘ in: integer iBoard[][] – board
    ‘ out: integer iX, iY – next put
    Sub Center
    If iBoard[2][2] = SPACE Then
    iX = 2
    iY = 2
    Else
    Random()
    EndIf
    EndSub

    ‘ Player RUNORSTOP
    ‘ in: integer iNumPuts – entry count of possible puts
    ‘ in: integer iPX[], iPY[] – possible puts
    ‘ work: integer iRun[] – count of run (ex. X_X for X)
    ‘ work: integer iStop[] – count of stop (ex. O_O for X)
    ‘ work: integer i – index of run and stop candidate
    ‘ work: integer iX0, iY0 – a possible put
    ‘ work: integer iMax – max count of run
    ‘ work: integer iX1, iY1, iX2, iY2 – points on a run
    ‘ out: integer iNP – final index of possble puts
    ‘ out: integer iX, iY – next put
    Sub RunOrStop
    ‘ clear run and stop candidate
    For i = 1 To iNumPuts
    iRun[i] = 0
    iStop[i] = 0
    EndFor
    ‘ set next of candidate
    For i = 1 To iNumPuts
    iX0 = iPX[i]
    If iX0 = 1 Then
    iX1 = 2
    iX2 = 3
    ElseIf iX0 = 2 Then
    iX1 = 1
    iX2 = 3
    Else ‘ iX0 = 3
    iX1 = 1
    iX2 = 2
    EndIf
    iY0 = iPY[i]
    If iY0 = 1 Then
    iY1 = 2
    iY2 = 3
    ElseIf iY0 = 2 Then
    iY1 = 1
    iY2 = 3
    Else ‘ iY0 = 3
    iY1 = 1
    iY2 = 2
    EndIf

    If iBoard[iX1][iY0] = iBoard[iX2][iY0] Then
    ‘ horizontal run or stop found
    If iBoard[iX1][iY0] = TURN1 Then
    ‘ X_X
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iRun[i] = iRun[i] + 1
    Else
    ‘ turn O
    iStop[i] = iStop[i] + 1
    EndIf
    EndIf
    If iBoard[iX1][iY0] = TURN2 Then
    ‘ O_O
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iStop[i] = iStop[i] + 1
    Else
    ‘ turn O
    iRun[i] = iRun[i] + 1
    EndIf
    EndIf
    EndIf
    If iBoard[iX0][iY1] = iBoard[iX0][iY2] Then
    ‘ vartical run or stop found
    If iBoard[iX0][iY1] = TURN1 Then
    ‘ X_X
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iRun[i] = iRun[i] + 1
    Else
    ‘ turn O
    iStop[i] = iStop[i] + 1
    EndIf
    EndIf
    If iBoard[iX0][iY1] = TURN2 Then
    ‘ O_O
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iStop[i] = iStop[i] + 1
    Else
    ‘ turn O
    iRun[i] = iRun[i] +1
    EndIf
    EndIf
    EndIf
    If iX0 = iY0 And iBoard[iX1][iY1] = iBoard[iX2][iY2] Then
    ‘ down run or stop found
    If iBoard[iX1][iY1] = TURN1 Then
    ‘ X_X
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iRun[i] = iRun[i] + 1
    Else
    ‘ turn O
    iStop[i] = iStop[i] + 1
    EndIf
    EndIf
    If iBoard[iX1][iY1] = TURN2 Then
    ‘ O_O
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iStop[i] = iStop[i] + 1
    Else
    ‘ turn O
    iRun[i] = iRun[i] + 1
    EndIf
    EndIf
    EndIf
    If iX0 + iY0 = 4 And iBoard[iX1][iY2] = iBoard[iX2][iY1] Then
    ‘ up run or stop found
    If iBoard[iX1][iY2] = TURN1 Then
    ‘ X_X
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iRun[i] = iRun[i] + 1
    Else
    ‘ turn O
    iStop[i] = iStop[i] + 1
    EndIf
    EndIf
    If iBoard[iX1][iY2] = TURN2 Then
    ‘ O_O
    If Math.Remainder(iS, 2) = 1 Then
    ‘ turn X
    iStop[i] = iStop[i] + 1
    Else
    ‘ turn O
    iRun[i] = iRun[i] + 1
    EndIf
    EndIf
    EndIf
    EndFor
    iMax = 0
    For i = 1 To iNumPuts
    If iRun[i] > iMax Then
    iMax = iRun[i]
    iNP = i
    EndIf
    EndFor
    If iMax > 0 Then
    Goto lReturnNP
    EndIf
    For i = 1 To iNumPuts
    If iStop[i] > iMax Then
    iMax = iStop[i]
    iNP = i
    EndIf
    EndFor
    If iMax > 0 Then
    Goto lReturnNP
    EndIf
    Random()
    lReturnNP:
    iX = iPX[iNP]
    iY = iPY[iNP]
    EndSub

    ‘ Show result of games
    ‘ in: integer iT1 – times X wins
    ‘ in: integer iT2 – times O wins
    ‘ in: integer iTD – times draw
    ‘ in: integer iTG – games
    ‘ in: string sPlayer[] – players logic names
    Sub ShowResult
    GraphicsWindow.DrawText(400, 20, sFigure[1] + ” win: ” + iT1 + ” (” + Math.Floor(iT1 / iTG * 100) + “%)”)
    GraphicsWindow.DrawText(400, 40, sFigure[2] + ” win: ” + iT2 + ” (” + Math.Floor(iT2 / iTG * 100) + “%)”)
    GraphicsWindow.DrawText(400, 60, “draw : ” + iTD + ” (” + Math.Floor(iTD / iTG * 100) + “%)”)
    GraphicsWindow.DrawText(400, 80, “games: ” + iTG)
    GraphicsWindow.DrawText(400, 120, sFigure[1] + “: ” + sPlayer[1])
    GraphicsWindow.DrawText(400, 140, sFigure[2] + “: ” + sPlayer[2])
    EndSub

    ‘ Check game end
    ‘ in: integer iNumPuts – entry count of possible puts
    ‘ in: integer iS – stage
    ‘ out: string sGame – game result “continue” or “X win” or “O win” or “draw”
    Sub Judge
    sGame = “continue”
    If iNumPuts <= 6 Then
    If Math.Remainder(iS, 2) = 1 Then
    iTurn = TURN1
    Else
    iTurn = TURN2
    EndIF
    CheckRun()
    If iNumPuts = 1 And sGame = “continue” Then
    sGame = “draw”
    EndIf
    EndIf
    EndSub

    ‘ Check Run
    ‘ in: integer iTurn
    ‘ in: integer iBoard[][] – board
    ‘ out: string sGame
    ‘ out: integer iWX0, iWY0, iWX1, iWY1 – line of win
    Sub CheckRun
    If iBoard[1][1] = iTurn And iBoard[2][1] = iTurn And iBoard[3][1] = iTurn Then
    iWX0 =  50
    iWY0 = 100
    iWX1 = 350
    iWY1 = 100
    sGame = sFigure[iTurn] + ” win”
    ElseIf iBoard[1][2] = iTurn And iBoard[2][2] = iTurn And iBoard[3][2] = iTurn Then
    iWX0 =  50
    iWY0 = 200
    iWX1 = 350
    iWY1 = 200
    sGame = sFigure[iTurn] + ” win”
    ElseIf iBoard[1][3] = iTurn And iBoard[2][3] = iTurn And iBoard[3][3] = iTurn Then
    iWX0 =  50
    iWY0 = 300
    iWX1 = 350
    iWY1 = 300
    sGame = sFigure[iTurn] + ” win”
    ElseIf iBoard[1][1] = iTurn And iBoard[1][2] = iTurn And iBoard[1][3] = iTurn Then
    iWX0 = 100
    iWY0 =  50
    iWX1 = 100
    iWY1 = 350
    sGame = sFigure[iTurn] + ” win”
    ElseIf iBoard[2][1] = iTurn And iBoard[2][2] = iTurn And iBoard[2][3] = iTurn Then
    iWX0 = 200
    iWY0 =  50
    iWX1 = 200
    iWY1 = 350
    sGame = sFigure[iTurn] + ” win”
    ElseIf iBoard[3][1] = iTurn And iBoard[3][2] = iTurn And iBoard[3][3] = iTurn Then
    iWX0 = 300
    iWY0 =  50
    iWX1 = 300
    iWY1 = 350
    sGame = sFigure[iTurn] + ” win”
    ElseIf iBoard[1][1] = iTurn And iBoard[2][2] = iTurn And iBoard[3][3] = iTurn Then
    iWX0 =  50
    iWY0 =  50
    iWX1 = 350
    iWY1 = 350
    sGame = sFigure[iTurn] + ” win”
    ElseIf iBoard[1][3] = iTurn And iBoard[2][2] = iTurn And iBoard[3][1] = iTurn Then
    iWX0 = 350
    iWY0 =  50
    iWX1 =  50
    iWY1 = 350
    sGame = sFigure[iTurn] + ” win”
    EndIf
    EndSub

    ‘ Get possible puts list
    ‘ in: integer iBoard[][] – board
    ‘ out: integer iNumPuts – entry count of possible puts
    ‘ out: integer iPX[], iPY[] – possible puts
    ‘ work: integer iNP – instead of x, y for iBoard[][]
    Sub GetPutList
    iNumPuts = 0
    For iNP = 0 To 8
    If iBoard[Math.Remainder(iNP, 3) + 1][Math.Floor(iNP / 3) + 1] = SPACE Then
    iNumPuts = iNumPuts + 1
    iPX[iNumPuts] = Math.Remainder(iNP, 3) + 1
    iPY[iNumPuts] = Math.Floor(iNP / 3) + 1
    EndIf
    EndFor
    EndSub

    ‘ Draw board on graphics window
    ‘ in: integer iRo – 3
    ‘ work: integer iX, iY
    Sub DrawBoard
    GraphicsWindow.PenWidth = 2
    GraphicsWindow.PenColor = “Black”
    GraphicsWindow.DrawLine(50, 150, 350, 150)
    GraphicsWindow.DrawLine(50, 250, 350, 250)
    GraphicsWindow.DrawLine(150, 50, 150, 350)
    GraphicsWindow.DrawLine(250, 50, 250, 350)
    GraphicsWindow.PenWidth = 4
    GraphicsWindow.PenColor = “Gray”
    For iY = 1 To iRo
    For iX = 1 To iRo
    If sFigure[iBoard[iX][iY]] = “O” Then
    GraphicsWindow.DrawEllipse(65 + (iX – 1) * 100, 65 + (iY – 1) * 100, 70, 70)
    ElseIf sFigure[iBoard[iX][iY]] = “X” Then
    GraphicsWindow.DrawLine(65 + (iX – 1) * 100, 65 + (iY – 1) * 100, 135 + (iX – 1) * 100, 135 + (iY – 1) * 100)
    GraphicsWindow.DrawLine(135 + (iX – 1) * 100, 65 + (iY – 1) * 100, 65 + (iX – 1) * 100, 135 + (iY – 1) * 100)
    EndIf
    EndFor
    EndFor
    EndSub

    ‘ Put figure onto board
    ‘ in: integer iSaved[][] – current board
    ‘ in: integer iRo – 3
    ‘ in: integer iX -x coordinate
    ‘ in: integer iY -y coordinate
    ‘ in: integer iTurn – 1 or 2
    ‘ in: string sAlpha[] – alphabet for SGF game score
    Sub PutFigure
    If (iX > 0 And iX <= iRo And iY > 0 And iY <= iRo) Then
    iSaved[iX][iY] = iTurn
    If (iTurn = TURN1) Then
    sLine = “;B[” + sAlpha[iX] + sAlpha[iY] + “]C[” + sFigure[TURN1] + “(” + iX + “,” + iY + “)]”
    OutputLine()
    ElseIf (iTurn = TURN2) Then
    sLine = “;W[” + sAlpha[iX] + sAlpha[iY] + “]C[” + sFigure[TURN2] + “(” + iX + “,” + iY + “)]”
    OutputLine()
    ElseIf (iTurn = SPACE) Then
    sLine = “;E[” + sAlpha[iX] + sAlpha[iY] + “]C[-(” + iX + “,” + iY + “)]”
    OutputLine()
    EndIf
    EndIf
    EndSub

    ‘ OutputLine
    ‘ in: string sLine – output line
    Sub OutputLine
    iNR = iNR + 1
    sRec[iNR] = sLine
    EndSub

    ‘ Get figure from board
    ‘ in: integer iSaved[][] – current board
    ‘ in: integer iX, iY – x, y coordinate
    ‘ out: integer iFigure – TURN1 or TURN2
    Sub GetFigure
    If (iX >= 1 And iX <= iRo And iY >= 1 And iY <= iRo) Then
    iFigure = iSaved[iX][iY]
    Else
    iFigure = OB
    EndIf
    EndSub

    ‘ Initialize board
    ‘ in: integer iRo – 3
    ‘ work: integer iX, iY, i
    ‘ out: integer iBoard – board
    ‘ out: string sAlpha[] – alphabet for SGF game score
    Sub InitBoard
    For iY = 1 To iRo
    For iX = 1 To iRo
    iBoard[iX][iY] = SPACE
    EndFor
    EndFor

    For i = 0 To iRo + 1
    iBoard[i][0] = OB
    iBoard[i][iRo + 1] = OB
    iBoard[0][i] = OB
    iBoard[iRo + 1][i] = OB
    EndFor

    For i = 0 To iRo
    ‘ alphabet for SGF game score
    sAlpha[i] = Text.GetSubText(” abcdefghijklmnopqrs”, i + 1, 1)
    EndFor
    EndSub
  2. //
    1. Final del formulario
  3. Copyright (c) Microsoft Corporation. All rights reserved.

Easy Graf making Controlbox data by NaoChanON (code/ código)


a13

Microsoft Small Basic

Program Listing:  pnz684      http://smallbasic.com/smallbasic.com/program/?pnz684
a14
  1. ‘ Easy Graf making Controlbox data Input version 2011/12/21 by NaoChanON GraphicsWindow.Top=30
    GraphicsWindow.Left=50
    GraphicsWindow.Width=1000
    GraphicsWindow.Height=600
    GraphicsWindow.BackgroundColor=”Lavender”
    GraphicsWindow.Show()
    Controls.ButtonClicked=Onclick

    TextBoX_Input()

    Sub OnClick
    name=””
    name=controls.LastClickedButton     ‘ Last button
    nm=controls.GetButtonCaption(name)  ‘ Button’s caption
    If nm=”Execute” Then
    get_data()
    init()
    Plot_Data()
    Regressionline()
    EndIf
    EndSub

    Sub TextBoX_Input
    GraphicsWindow.BrushColor=”Red”
    GraphicsWindow.FontSize=30
    GraphicsWindow.DrawText(80,5,” Input boxes and push execute “)
    EXEC=Controls.AddButton(“Execute”,230,540)
    Controls.SetSize(EXEC,300,50)
    GraphicsWindow.FontSize=20

    GraphicsWindow.BrushColor=”Navy”
    GraphicsWindow.FontSize=15
    GraphicsWindow.DrawText(30,50,”Graf Width,Height”)  ‘ Width and height
    GraphicsWindow.DrawText(30,70,”EXAM: 800,500″)
    GXYBOX= Controls.AddTextBox(230,50)
    Controls.SetSize(GXYBOX,100,40)
    Controls.SetTextBoxText(GXYBOX,”800,500″)

    GraphicsWindow.DrawText(30,120,”Min-X , Max-X”)    ‘ Min-X and Max-X
    GraphicsWindow.DrawText(30,140,”EXAM: 0,800″)
    MINMAXX= Controls.AddTextBox(230,120)
    Controls.SetSize(MINMAXX,100,40)
    Controls.SetTextBoxText(MINMAXX,”0,800″)

    GraphicsWindow.DrawText(30,190,”Min-Y , Max-Y”)     ‘Min-Y and Max-Y
    GraphicsWindow.DrawText(30,210,”EXAM: 0,500″)
    MINMAXY= Controls.AddTextBox(230,190)
    Controls.SetSize(MINMAXY,100,40)
    Controls.SetTextBoxText(MINMAXY,”0,500″)

    GraphicsWindow.DrawText(30,260,”Dividing X , Y”)   ‘ dividing number
    GraphicsWindow.DrawText(30,280,”EXAM: 4,5″)
    DivBOX= Controls.AddTextBox(230,260)
    Controls.SetSize(DivBOX,100,40)
    Controls.SetTextBoxText(DivBOX,”4,5″)

    GraphicsWindow.DrawText(30,330,”Label X”)         ‘ Label-X name
    GraphicsWindow.DrawText(30,350,”EXAM: Weight”)
    LABELXBOX=Controls.AddTextBox(230,330)
    Controls.SetSize(LABELXBOX,300,40)
    Controls.SetTextBoxText(LABELXBOX,” Label X “)

    GraphicsWindow.DrawText(30,400,”Label Y”)         ‘ Label-Y name
    GraphicsWindow.DrawText(30,420,”EXAM: Height”)
    LABELYBOX=Controls.AddTextBox(230,400)
    Controls.SetSize(LABELYBOX,300,40)
    Controls.SetTextBoxText(LABELYBOX,” Label Y “)

    GraphicsWindow.DrawText(30,470,”Title name”)        ‘ Title name
    GraphicsWindow.DrawText(30,490,”EXAM: Weight vs Height”)
    TTLBOX=Controls.AddTextBox(230,470)
    Controls.SetSize(TTLBOX,300,40)
    Controls.SetTextBoxText(TTLBOX,” Test Graph “)

    GraphicsWindow.DrawText(660,5,”Input X , Y data”)   ‘ X,Y data
    GraphicsWindow.DrawText(660,25,”EXAM: 50 , 100 enter”)
    GraphicsWindow.DrawText(720,45,”80 , 150 enter”)
    MBOX= Controls.AddMultiLineTextBox(700,80)
    Controls.SetSize(MBOX,100,500)
    Controls.SetTextBoxText(MBOX,” 50,100″)
    EndSub

    Sub get_data
    GWH=Controls.GetTextBoxText(GXYBOX)
    GWidth= Text.GetSubText(GWH,1,text.GetIndexOf(GWH,”,”)-1)    ‘ Gwidth
    GHeight=Text.GetSubTextToEnd(GWH,text.GetIndexOf(GWH,”,”)+1)  ‘Ghight

    MMX=Controls.GetTextBoxText(MINMAXX)
    MinX= Text.GetSubText(MMX,1,text.GetIndexOf(MMX,”,”)-1)     ‘ Min-X
    MaxX=Text.GetSubTextToEnd(MMX,text.GetIndexOf(MMX,”,”)+1)   ‘Max-X

    MMY=Controls.GetTextBoxText(MINMAXY)
    MinY= Text.GetSubText(MMY,1,text.GetIndexOf(MMY,”,”)-1)      ‘Min-Y
    MaxY=Text.GetSubTextToEnd(MMY,text.GetIndexOf(MMY,”,”)+1)    ‘Max-Y

    DXY=Controls.GetTextBoxText(DivBOX)
    XDiv= Text.GetSubText(DXY,1,text.GetIndexOf(DXY,”,”)-1)      ‘X-Dividing number
    YDiv=Text.GetSubTextToEnd(DXY,text.GetIndexOf(DXY,”,”)+1)    ‘Y-Dividing number

    LBLX=Controls.GetTextBoxText(LABELXBOX)            ‘ Label-X
    LBLY=Controls.GetTextBoxText(LABELYBOX)            ‘ Label-Y
    TTL=Controls.GetTextBoxText(TTLBOX)                ‘ Title name

    DatXY=Controls.GetTextBoxText(MBOX)               ‘ X-Y data
    Get_XYata()                                       ‘ Pick Up X,Y data from multilinetextbox

    EndSub

    Sub Get_XYata                           ‘ Pick Up X,Y data from multilinetextbox
    DatXY=Controls.GetTextBoxText(MBOX)
    If Text.GetCharacterCode(text.GetSubText(DatXY,Text.GetLength(datXY),1))=10 Then
    DatXY= text.GetSubText(DatXY,1,Text.GetLength(datXY)-2)  ‘ if DatXY -end = Chr$(13)+chr$(10) then delete
    EndIf

    For i=1 To Text.GetLength(DatXY)
    word1=text.GetSubText(datXY,i,1)
    If word1=text.GetCharacter(13) Then     ‘ delete chr$(13)
    word1=””
    ElseIf word1=text.GetCharacter(10) Then ‘ conversion Chr$(10) to “:” =delimiter
    word1=”:”
    EndIf
    midw=text.Append(midw,word1)
    EndFor
    midw=midw+”:”                 ‘ connect all word and add “:” =delimiter

    while midw<>””
    NN=NN+1
    midp1=Text.GetIndexOf(midw,”,”)
    midp2=Text.GetIndexOf(midw,”:”)
    px[NN]=Text.GetSubText(midw,1,midp1-1)              ‘ pick up X-data
    py[NN]=Text.GetSubText(midw,midp1+1,midp2-midp1-1)  ‘ pick up Y-data
    midw=Text.GetSubTextToEnd(midw,midp2+1)
    EndWhile
    EndSub

    Sub init
    GraphicsWindow.Clear()
    GraphicsWindow.top=50
    GraphicsWindow.Left=50
    GraphicsWindow.Width=1000
    GraphicsWindow.Height=650
    GraphicsWindow.Show()
    GraphicsWindow.BackgroundColor=”Lightcyan”
    GraphicsWindow.BrushColor=”Navy”
    GraphicsWindow.PenColor=”Red”

    ‘ Draw Rectangle
    GTop=60
    GLeft=150
    GraphicsWindow.DrawRectangle(Gleft,Gtop,GWidth,GHeight)

    ‘ Title and X,Y-labels
    GraphicsWindow.FontSize=30
    GTitle=Shapes.AddText(TTL)
    Shapes.Animate(GTitle,Gleft+150,Gtop-40,1000)
    LabelY=Shapes.AddText(LBLY)
    Shapes.Animate(LabelY,15,(Gtop+GHeight)/2,1500)
    Shapes.Rotate(LabelY,-90)
    LabelX=Shapes.AddText(LBLX)
    Shapes.Animate(LabelX,(Gleft+Gwidth)/2-20,Gtop+GHeight+40,2000)

    ‘ X—–Axis
    GraphicsWindow.FontSize=20
    GraphicsWindow.BrushColor=”Red”

    For i= 0 To XDiv
    For j=GTop To GTop+Gheight-5 Step 10
    GraphicsWindow.DrawLine(Gleft+i*(Gwidth/Xdiv),J,Gleft+i*(Gwidth/Xdiv),j+5)
    EndFor
    DivX=math.round(minX+i*((MaxX-minX)/Xdiv))
    GraphicsWindow.DrawText(Gleft+i*(Gwidth/Xdiv)-20,GTop+GHeight+10,DivX)
    EndFor

    ‘ Y—Axis
    For i= YDiv To 0 Step -1
    For j=GLeft To GLeft+Gwidth-5 Step 10
    GraphicsWindow.DrawLine(j,GTop+i*(GHeight/Ydiv),j+5,GTop+i*(GHeight/Ydiv))
    EndFor
    DivY=math.Round(MaxY-i*((MaxY-minY)/Ydiv))
    GraphicsWindow.DrawText(Gleft-40,GTop+i*(GHeight/Ydiv)-10,DivY)
    EndFor

    EndSub

    Sub  Plot_Data
    GraphicsWindow.PenColor=”Green”
    GraphicsWindow.PenWidth=3
    For i=1 To NN
    plotx=Gleft + (PX[i]-minX)*Gwidth/(MaxX-MinX)
    ploty=GTop + Gheight- (PY[i]-minY)*Gheight/(MaxY-MinY)
    sc[i]=Shapes.AddEllipse(10,10)
    Shapes.Animate(sc[i],plotx-5,ploty-5,1000)
    EndFor
    EndSub

    Sub Regressionline
    For i=1 To NN
    sumx=sumx+px[i]
    sumy=sumy+py[i]
    sumX2=sumX2+px[i]*px[i]
    sumXY=sumXY+px[i]*py[i]
    sumY2=sumY2+py[i]*py[i]
    EndFor

    slope=(NN*sumXY-sumx*sumy)/(NN*sumx2-sumx*sumx)  ‘ slope a
    slope=math.Round(slope*100)/100                   ‘ round a
    intercept=sumy/NN-slope*sumx/NN                  ‘ intercept b
    intercept=math.Round(intercept*100)/100          ‘ round b

    Reg_line=”y= “+slope+”X + “+intercept          ‘ y= aX+b
    sreg=Shapes.AddText(Reg_line)
    Shapes.Animate(sreg,Gleft+10,80,1500)

    regY1=slope*minx+intercept                ‘ X=MinX Y= intercept
    regY2=maxY*0.8                           ‘ Y=maxY*0.8
    regx2=(regY2-intercept)/slope             ‘ X at Y
    Gregx1=Gleft                                           ‘conversion x1=minX
    GregX2=Gleft + (regx2-minX)*Gwidth/(MaxX-MinX)         ‘ conversion x2
    Gregy1=GTop + Gheight- (regY1-minY)*Gheight/(MaxY-MinY) ‘ conversion y1
    Gregy2=GTop + Gheight- (regY2-minY)*Gheight/(MaxY-MinY) ‘ conversion y2

    slope2=(NN*sumXY-sumx*sumy)/(NN*sumY2-sumY*sumY)  ‘ slope c
    slope2=math.Round(slope2*100)/100                 ‘ round c
    Coefficient=Math.SquareRoot(slope*slope2)         ‘Correlation coefficient
    Coefficient=math.Round(Coefficient*1000)/1000
    scoef= Shapes.AddText(“Coefficient= “+Coefficient)
    Shapes.Animate(scoef,Gleft+10,100,1500)

    GraphicsWindow.PenColor=”Green”
    GraphicsWindow.DrawLine(Gregx1,GregY1,GregX2,GregY2)   ‘ draw regression Line

    EndSub

SNAKEBITE-SB


bivo

// // //

Microsoft Small Basic

Program Listing:  SNKBITE

‘ SNAKEBITE-SB
‘ by Davey~Wavey, v1 Nov. 2009
‘ Written for SmallBasic v0.7

‘ Inspired by the ZX81 game SNAKEBITE.

‘ Eat the snake by chewing off it’s tail. Eat all tail segments to progress to next level.
‘ Watch out though, you may just make it angry!

‘ Use the cursor keys to move around. (You can press any other key to stop moving!)

‘ NOTE: If it crashes a lot, try commenting out the ‘Sound.PlayChimes()’ line. SB doesn’t like sound!

‘ I’ve laid the code out so that all the normal routines used in a game are present. If you’re
‘ learning to write your own game, a similar setup should work well for you. Have fun!

‘ set up the permanent loop (Q key terminates when on intro screen)
While 1=1

‘ initialise game environment
environment()

‘ show intro
introScreen()

While lives > 0
‘ INITIALISE LEVEL

‘ Next line won’t play anything if we have already played the intro screen music!?!?!?!!!
‘ It also seems to cause the prog to crash more often when enabled.
‘Sound.Play (progDir + “\muzak.mid”)

levelConfig()           ‘ level maps can be found at end of program listing below – have fun designing some
paintLevel()
snakeSetup()
playerSetup()

‘ MAIN LOOP
While (snakeSize > 2) And lives > 0

‘ if snake ‘change direction’ delay has expired, try to change snake direction
If snakeMoveDelay = 0 Then
snakeDirection()          ‘ will only change direction at random times

moveSnake()
EndIf

‘ alternative method to check for key press – also delays movement of player
If playerMoveDelay = 0 Then
checkKeys()

movePlayer()

‘ Check for PLAYER COLLISIONS
playerCollisions()
EndIf

‘ ADJUST (or reset) DELAYS
‘ I admit this isn’t the best way to do this.
‘ To get accurate speed, you should be calculating the
‘ frames-per-second and using that to slow various elements down.
If snakeMoveDelay > 0 Then
snakeMoveDelay = snakeMoveDelay-1
Else
snakeMoveDelay = level[thisLevel][“snakeDelay”]
EndIf

If playerMoveDelay > 0 Then
playerMoveDelay = playerMoveDelay-1
Else
playerMoveDelay = playerDelay
EndIf

‘ test snake length increase – NOT CURRENTLY USED
‘If Mouse.IsLeftButtonDown=”True” AND processing=0 Then
‘ addSegment()
‘ElseIf Mouse.IsLeftButtonDown=”False” And processing=1 Then
‘ mUp()
‘EndIf

EndWhile  ‘ main level (or lives) loop

‘ next line is irrellevant as the Sound.Play command above doesn’t work!
‘Sound.Stop (progDir + “\muzak.mid”)

‘ if we still have some lives, then we must have eaten all the snake
If lives > 0 Then

moveSnake()   ‘ update tail position since snake length just decreased

GraphicsWindow.ShowMessage(“YEAH, YOU BEAT THIS SNAKE!!!”, “WHOOPIE!”)

‘ move to next level
thisLevel=thisLevel+1

‘ go back to level 1 if we’ve completed them all
If thisLevel>levels Then
thisLevel=1
EndIf

‘ increase player speed (by decreasing the delay) – player gets a slight advantage for each level cleared 🙂
If playerDelay > 20 Then
playerDelay = playerDelay – 10
EndIf

GraphicsWindow.Clear()
EndIf

EndWhile  ‘ lives > 0

‘ DEAD MEAT!

‘ next line doesn’t work!
‘Sound.Play (progDir + “\gameover.mid”)

GraphicsWindow.ShowMessage(“THAT PUNKY SNAKE BEAT YOU THIS TIME!!! You scored: “+score, “EATEN!!!”)

‘ next line is irrellevant as the Play command above doesn’t work!
‘Sound.Stop (progDir + “\gameover.mid”)

EndWhile

‘ =====================================================================
‘ =====================================================================
‘ ====================== S U B R O U T I N E S ==============================
‘ =====================================================================
‘ =====================================================================

Sub environment
‘ initialise the game environment

‘ progDir = Program.Directory + “\assets” ‘ this is used to locate the graphics and music used in the game
progDir = “http://smallbasic.com/drop/snakebite&#8221;

GraphicsWindow.Title  = “~S~N~A~K~E~B~I~T~E~ v1 for SmallBasic by Davey~Wavey, Nov 2009”
GraphicsWindow.BackgroundColor = “Black”
GraphicsWindow.Width  = 800       ‘ grass sprite is 128 x 128
GraphicsWindow.Height = 600       ‘ 4 x 128 plus status area
GraphicsWindow.Left   = desktop.Width/2-(GraphicsWindow.Width/2)  ‘ 800
GraphicsWindow.Top    = desktop.Height/2-(GraphicsWindow.Height/2)-100   ’50

gwTop     = 18                                                 ‘ set game window top offset
gwBottom  = gwTop+(4*128)
gwLeft    = (GraphicsWindow.Width/2)-(3*128)                  ‘ set game window left offset
gwRight   = gwLeft+(6*128)

‘ initialise game environment
thisLevel       = 1
score           = 0
lives           = 5
playerDelay     = 500   ‘ speed of player movement – lower value = faster player = easier (unless you go too fast!)
snakeMoveDelay  = 0     ‘ this gets set by each level and is the speed of the snake – lower = faster

angrySnake      = -1    ‘ a counter. if >0 it indicates that snake is angry (makes snake faster)
digestionDelay  = 0     ‘ delay to prevent multiple tail pieces being eaten at once.
processing      = 0     ‘ a flag used in sub processes to prevent multiple runs

player          = “”    ‘ blank player array
snake           = “”    ‘ blank snake array

‘Timer.Interval = 2 ‘ set interval to check for key presses
‘Timer.Tick = checkKeys

EndSub

‘ =====================================================================

Sub introScreen
‘ display the game intro screen and wait for Space to be pressed

GraphicsWindow.Clear()

‘ this Play command works, but then prevents any other music playing!?!?!
Sound.Play (progDir + “\intro.mid”)

‘ show intro graphic
img = ImageList.LoadImage(progDir + “\titleScreen_800x600.jpg”)
GraphicsWindow.DrawImage(img, 0,0 )

‘ wait for keypress
lastkey = “”
While lastkey <> “Space”
lastkey = GraphicsWindow.LastKey

If lastkey = “Q” Then
Program.End()
EndIf
EndWhile

Sound.Stop (progDir + “\intro.mid”)
Program.Delay(500)
EndSub

‘ =====================================================================

Sub paintLevel
‘ draw the level objects at the start of each level

‘ create a black rectangle over the whole graphics window so we can create a fade effect after the level has been drawn
GraphicsWindow.BrushColor   = “Black”
bbox                        = Shapes.AddRectangle( 800, 600 )
Shapes.SetOpacity           (bbox, 100)

‘ draw dirt
img = ImageList.LoadImage(progDir + “\status_800x70.png”)
For y = 0 to 600 Step 70
GraphicsWindow.DrawImage (img, 0, y)
EndFor

‘ draw the grass
img = ImageList.LoadImage(progDir + “\grass_128d.png”)
For x = 0 To 5
For y = 0 To 3
GraphicsWindow.DrawImage (img, (x*128)+gwLeft, (y*128)+gwTop)
EndFor
EndFor

‘ draw the flowers
img = ImageList.LoadImage(progDir + “\flower1_32.png”)
Shapes.SetOpacity(img, 20)
For x = 1 To 20
GraphicsWindow.DrawImage (img, ((Math.GetRandomNumber(24)-1)*32)+gwLeft, ((Math.GetRandomNumber(16)-1)*32)+gwTop )
EndFor
img = ImageList.LoadImage(progDir + “\flower2_32.png”)
Shapes.SetOpacity(img, 20)
For x = 1 To 10
GraphicsWindow.DrawImage (img, ((Math.GetRandomNumber(24)-1)*32)+gwLeft, ((Math.GetRandomNumber(16)-1)*32)+gwTop )
EndFor

‘ draw the level blocks
img = ImageList.LoadImage(progDir + “\wall_32.png”)
For my = 1 To 16
For mx = 1 To 24
block = text.GetSubText( level[thisLevel][my], mx, 1 )

‘ position WALLS
If block = “W” Then
GraphicsWindow.DrawImage (img, ((mx-1)*32)+gwLeft, ((my-1)*32)+gwTop) ‘ DrawRectangle( (mx-1)*32, (my-1)*32, 32, 32 )
EndIf

‘ position PLAYER
If block = “P” Then
player[“x”] = ((mx-1)*32+12)+gwLeft    ‘ calculate x,y from 32 x 32 level grid blocks
player[“startX”] = player[“x”]         ‘ remember start position for when player dies
player[“y”] = ((my-1)*32+12)+gwTop
player[“startY”] = player[“y”]
EndIf

‘ position SNAKE
If block = “S” Then
level[thisLevel][“snakeX”] = ((mx-1)*32+16)+gwLeft
level[thisLevel][“snakeY”] = ((my-1)*32+16)+gwTop
EndIf

EndFor
EndFor

‘ draw the border (using the snake body part)
img = ImageList.LoadImage(progDir + “\body_18.png”)
For y = 0 To 600 Step 530
For x=5 to 790 Step 18
‘ draw top and bottom border
GraphicsWindow.DrawImage ( img, x, y)
EndFor
EndFor
For x = 0 To 800 Step 784
For y = 15 to 530 Step 18
‘ draw left and right border
GraphicsWindow.DrawImage ( img, x, y)
EndFor
EndFor

‘ show status bar
status()

‘ fade the screen in
Shapes.Move (bbox, 0, 0)
For lwp = 100 To 0 Step -1
Shapes.SetOpacity(bbox, lwp)
Program.Delay(20)
EndFor

EndSub

‘ =====================================================================

Sub snakeSetup
‘ create the snake array and display snake in starting position

headPart    = ImageList.LoadImage(progDir + “\head_24.png”)
headAngryPart = ImageList.LoadImage(progDir + “\headAngry_24.png”)
headSize    = 22 ’24 ‘ radius of head
headOffset  = 11

bodyPart    = ImageList.LoadImage(progDir + “\body_18.png”)
bodySize    = 18 ’18
bodyOffset  = 9

tailPart    = ImageList.LoadImage(progDir + “\tail_16.png”)
tailSize    = 16 ’32 ’16
tailOffset  = 8

snake = “”
snake[0][“happySnake”] = Shapes.AddImage(headPart)
snake[0][“angrySnake”] = Shapes.AddImage(headAngryPart)
snakeSize = level[thisLevel][“snakeSize”]   ‘ this value will change during game as snake eats/is eaten

‘ remember current pen width
‘pw = GraphicsWindow.PenWidth
‘GraphicsWindow.PenWidth = 0

For snakePart = 1 to snakeSize

‘ create the snake segments
If snakePart = 1 Then
‘GraphicsWindow.BrushColor=”Brown”
snake[snakePart][“sprite”] = snake[0][“happySnake”]   ‘Shapes.AddEllipse(headSize,headSize) ‘ head
‘ Zoom for this shape has been done above

ElseIf snakePart <> snakeSize Then
‘GraphicsWindow.BrushColor=”Chocolate”
snake[snakePart][“sprite”] = Shapes.AddImage(bodyPart)  ‘Shapes.AddEllipse(bodySize,bodySize) ‘ body
Else
‘GraphicsWindow.BrushColor=”SandyBrown”
snake[snakePart][“sprite”] = Shapes.AddImage(tailPart)    ‘Shapes.AddEllipse(tailSize,tailSize) ‘ tail
EndIf

‘ locate snake on screen – probably needs to be part of each level config
snake[snakePart][“x”] = level[thisLevel][“snakeX”]
snake[snakePart][“y”] = level[thisLevel][“snakeY”]

‘ as all segments start at the same x,y we must increment the initial delay for each successive segment
If snakePart > 2 Then
snake[snakePart][“delay”] = ((snakePart-1)*(bodySize-4))+4
Else
snake[2][“delay”] = bodySize ’18
EndIf

EndFor

‘ set initial direction
snake[1][“moves”] = level[thisLevel][“snakeDir”]
snake[1][“delay”] = “0”   ‘ need to initialise delay for snake head – used to determine delay before direction change

‘ reinstate previous pen width
‘GraphicsWindow.PenWidth=pw
EndSub

‘ =====================================================================

Sub playerSetup
‘ create the player and display at start position

‘GraphicsWindow.BrushColor=”Lime”
img = ImageList.LoadImage(progDir + “\player2_24.png”)    ‘ from http://www.freeicons.dk
player[“sprite”] = Shapes.AddImage(img)    ‘Shapes.AddRectangle( 20,20 )
Shapes.Move( player[“sprite”], player[“x”]-11, player[“y”]-11 )     ‘ -11 offset instead of -12 works better!?!?!

playerMoveDelay  = playerDelay                     ‘ initialise player movement speed (delay)

EndSub

‘ =====================================================================

Sub snakeDirection
‘ check if snake is ready for a CHANGE of DIRECTION

‘ using the ‘delay’ element of the snake head (snake[1]) as a counter for the change direction delay
‘ this delay gets decreased in the moveSnake sub
If snake[1][“delay”] = 0  Then

‘ reset change direction delay
snake[1][“delay”] = level[thisLevel][“dirDelay”]

‘ yes, time for a direction change, but only 25% chance of changing
If Math.GetRandomNumber(4) <> 3 Then

‘ not yet – leave the snake going the same way and delay another direction change for a while
snake[1][“delay”] = level[thisLevel][“dirDelay”]

Else
‘ yep, let’s change direction
dir = Math.GetRandomNumber(4)

‘ EDGE BOUNCE – if snake is heading into window edge, force a direction change
‘If (dir = 1 And snake[1][“y”] < 20) Then
‘ dir = 3 ‘ go S
‘EndIf
‘If (dir = 3 And snake[1][“y”] > GraphicsWindow.Height-(20)) Then
‘ dir = 1 ‘ go N
‘EndIf
‘If (dir = 4 And snake[1][“x”] < 20) Then
‘ dir = 2 ‘ go E
‘EndIf
‘If (dir = 2 And snake[1][“x”] > GraphicsWindow.Width-(8+20)) Then
‘ dir = 4 ‘ go W
‘EndIf

‘ point snake head in appropriate direction
snake[1][“moves”] = dir

‘ reset delay until next direction change
snake[1][“delay”] = level[thisLevel][“dirDelay”]

EndIf

‘ ANGRY SNAKE calculation
‘ to slow this effect down, we’re only trying to instigate ‘angry mode’ at each direction change
If (level[thisLevel][“getAngry”] = 1) Then

‘ only try to instigate angry mode in snake is currently happy
If angrySnake < 0 Then
‘GraphicsWindow.Title=”HAPPY SNAKE {:-)”

rn = Math.GetRandomNumber(100)
If (rn = 7) Then
angrySnake = Math.GetRandomNumber(50)+20
level[thisLevel][“snakeDelay”] = level[thisLevel][“snakeDelay”]/2
EndIf

‘ if angrySnake counter has reached zero, reset snake speed back to normal
ElseIf angrySnake = 0 Then
level[thisLevel][“snakeDelay”] = level[thisLevel][“snakeDelay”]*2      ‘ set snake delay back to level setting

EndIf

If angrySnake > -1 Then
angrySnake = angrySnake-1     ‘ decrease angry snake counter
‘GraphicsWindow.Title=”ANGRY SNAKE }:-/”
EndIf

EndIf

EndIf   ‘ change direction delay=0

EndSub

‘ =====================================================================

Sub moveSnake
‘ move snake segments

For snakePart = 1 To snakeSize

‘ find out which direction we’re moving in
dir = text.GetSubText(snake[snakePart][“moves”], 1, 1)

‘ check if head is about to collide with a wall
If snakePart = 1 Then
shapes.Rotate(snake[1][“sprite”], ((dir-1)*90) )    ‘ point snake head in correct direction

snakeCollisions()
EndIf

‘ only move snakepart if it’s delay is zero – or this is the head, which always gets moved
If snakePart = 1 Or snake[snakePart][“delay”] = 0 Then

‘ take direction off moves list for this snake part
If snakePart > 1 Then
snake[snakePart][“moves”] = Text.GetSubTextToEnd(snake[snakePart][“moves”], 2)
EndIf

‘ add this movement onto next snake part’s movement list
If snakePart < snakeSize Then
snake[snakepart+1][“moves”] = text.Append(snake[snakepart+1][“moves”],dir)
EndIf

‘ update x,y co-ordinates of snake part
If dir = 1 Then
snake[snakePart][“y”] = snake[snakePart][“y”]-1      ‘ moving N

ElseIf dir = 2 Then
snake[snakePart][“x”] = snake[snakePart][“x”]+1      ‘ moving E

ElseIf dir = 3 Then
snake[snakePart][“y”] = snake[snakePart][“y”]+1      ‘ moving S

ElseIf dir = 4 Then
snake[snakePart][“x”] = snake[snakePart][“x”]-1      ‘ moving W
EndIf

‘ wrap snake at window edge
If snake[snakePart][“x”] < gwLeft Then
snake[snakePart][“x”] = gwRight
ElseIf snake[snakePart][“x”] > gwRight Then
snake[snakePart][“x”] = gwLeft
ElseIf snake[snakePart][“y”] < gwTop Then
snake[snakePart][“y”] = gwBottom-8
ElseIf snake[snakePart][“y”] > gwBottom-8 Then
snake[snakePart][“y”] = gwTop
EndIf

EndIf

‘ The offsets allow for the various snake segment sizes
If snakePart = 1 Then
offset=headOffset
ElseIf snakePart<>snakeSize Then
offset = bodyOffset
Else
offset = tailOffset
EndIf

‘ DRAW SNAKE PART in new position
shapes.Move(snake[snakePart][“sprite”], snake[snakePart][“x”]-offset, snake[snakePart][“y”]-offset )

‘ DECREASE SNAKE PART DELAY
If snake[snakePart][“delay”] > 0 Then
snake[snakePart][“delay”] = snake[snakePart][“delay”] – 1
EndIf

EndFor

‘ as snake gets shorter, processing speed increases, so we need to add a delay
If snakeSize < 7 Then   ‘level[thisLevel][“snakeSize”] Then
‘For snakePart = snakeSize To level[thisLevel][“snakeSize”]
Program.Delay (0.2*(level[thisLevel][“snakeSize”]-snakeSize))
‘EndFor
EndIf

EndSub

‘ =====================================================================

Sub snakeCollisions
‘ this is a recursive function
‘ it checks for a snake collision with a level object (i.e. a wall) in the current snake direction
‘ if it finds one, it chooses a new direction, then calls itself to check it for a collision
‘ after completing, ‘dir’ will have a direction that does not cause a collision

‘ Up
If dir = 1 Then
sx = math.Floor((snake[1][“x”]-gwLeft)/32)+1
sy = math.Floor(((snake[1][“y”]-gwTop)-(headSize/2))/32)+1

If Text.GetSubText( level[thisLevel][sy], sx, 1) = “W” Then
‘ choose a new direction then check it for collisions by recursing this sub
dir = Math.GetRandomNumber(4)
snakeCollisions()
EndIf

‘ Down
ElseIf dir = 3 Then
sx = math.Floor((snake[1][“x”]-gwLeft)/32)+1
sy = math.Floor(((snake[1][“y”]-gwTop)+(headSize/2))/32)+1

If Text.GetSubText( level[thisLevel][sy], sx, 1) = “W” Then
‘ choose a new direction then check it for collisions by recursing this sub
dir = Math.GetRandomNumber(4)
snakeCollisions()
EndIf

‘ Right
ElseIf dir = 2 Then
sx = math.Floor(((snake[1][“x”]-gwLeft)+(headSize/2))/32)+1
sy = math.Floor((snake[1][“y”]-gwTop)/32)+1

If Text.GetSubText( level[thisLevel][sy], sx, 1) = “W” Then
‘ choose a new direction then check it for collisions by recursing this sub
dir = Math.GetRandomNumber(4)
snakeCollisions()
EndIf

‘ Left
ElseIf dir = 4 Then
sx = math.Floor(((snake[1][“x”]-gwLeft)-(headSize/2))/32)+1
sy = math.Floor((snake[1][“y”]-gwTop)/32)+1

If Text.GetSubText( level[thisLevel][sy], sx, 1) = “W” Then
‘ choose a new direction then check it for collisions by recursing this sub
dir = Math.GetRandomNumber(4)
snakeCollisions()
EndIf
EndIf

‘ set snake in new safe direction
snake[1][“moves”] = dir

EndSub

‘ =====================================================================

Sub checkKeys

‘ indicate if player is to move
keyPress = GraphicsWindow.LastKey

EndSub

‘ =====================================================================

Sub movePlayer
‘ depending on the key pressed, move the player in the required direction
‘ unless we hit the edge of the screen, or a wall

If keyPress <> “” Then    ‘ only process if a key was pressed

move = 0  ‘ initially prevent any movement

‘ CHECK LEFT
If keyPress = “Left” Then
px = math.Floor(((player[“x”]-13)-gwLeft)/32)+1     ‘ subtract 13 from x to allow for half sprite width offset
py = math.Floor(((player[“y”]-gwTop))/32)+1

‘ hit edge of screen?
If player[“x”]-13 > gwLeft Then
move = 1
EndIf

‘ hit a wall?
If Text.GetSubText( level[thisLevel][py], px, 1) = “W” Then
move = 0
EndIf
EndIf

‘ CHECK RIGHT
If keyPress = “Right” Then
px = math.Floor(((player[“x”]+13)-gwLeft)/32)+1
py = math.Floor((player[“y”]-gwTop)/32)+1

‘ hit edge of screen?
If player[“x”]+13 < gwRight Then
move = 1
EndIf

‘ hit a wall?
If Text.GetSubText( level[thisLevel][py], px, 1) = “W” Then
move = 0
EndIf
EndIf

‘ CHECK UP
If keyPress = “Up”  Then
px = math.Floor(((player[“x”])-gwLeft)/32)+1
py = math.Floor(((player[“y”]-13)-gwTop)/32)+1

‘ hit edge of screen?
If player[“y”]-13 > gwTop Then
move = 1
EndIf

‘ hit a wall?
If Text.GetSubText( level[thisLevel][py], px, 1) = “W” Then
move = 0
EndIf
EndIf

‘ CHECK DOWN
If keyPress = “Down” Then
px = math.Floor(((player[“x”])-gwLeft)/32)+1
py = math.Floor(((player[“y”]+13)-gwTop)/32)+1

‘ hit edge of screen?
If player[“y”]+13 < gwBottom Then
move = 1
EndIf

‘ hit a wall?
If Text.GetSubText( level[thisLevel][py], px, 1) = “W” Then
move = 0
EndIf
EndIf

‘ ADJUST PLAYER LOCATION and rotate player to point the correct direction
If keyPress = “Left” Then
player[“x”] = player[“x”] – move
Shapes.Rotate(player[“sprite”], 270)
EndIf
If keyPress = “Right” Then
player[“x”] = player[“x”] + move
Shapes.Rotate(player[“sprite”], 90)
EndIf
If keyPress = “Up”  Then
player[“y”] = player[“y”] – move
Shapes.Rotate(player[“sprite”], 0)
EndIf
If keyPress = “Down”  Then
player[“y”] = player[“y”] + move
Shapes.Rotate(player[“sprite”], 180)
E